diff --git a/package-lock.json b/package-lock.json
index 234a5ebe651017e65545b9e93a4baef0558d7e98..18d2a11b91b02bad97cbf6ea8f68d513f38a8949 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26836,6 +26836,11 @@
         "use-debounce": "^5.1.0"
       }
     },
+    "simple-statistics": {
+      "version": "7.7.0",
+      "resolved": "https://registry.npmjs.org/simple-statistics/-/simple-statistics-7.7.0.tgz",
+      "integrity": "sha512-TAsZRUJ7FD/yCnm5UBgyWU7bP1gOPsw9n/dVrE8hQ+BF1zJPgDJ5X/MOnxG+HE/7nejSpJLJLdmTh7bkfsFkRw=="
+    },
     "sisteransi": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
diff --git a/package.json b/package.json
index 2c54ef5d8d40cf2ac2a6fb04d9f856d6205338d6..56b7599fec6691c6b9f7628ad907d01b1ed457f1 100644
--- a/package.json
+++ b/package.json
@@ -77,6 +77,7 @@
     "reselect": "^4.0.0",
     "rxjs": "^7.2.0",
     "simple-react-lightbox": "^3.6.4",
+    "simple-statistics": "^7.7.0",
     "swagger-ui-express": "^4.1.6",
     "victory": "^0.26.1"
   },
diff --git a/src/client/components/facet_results/Deck.js b/src/client/components/facet_results/Deck.js
index fc80488448ddbd45b933e1dedef3233c962127f4..c9809992be4d347907522bd130ae0e2c4f0fc7a9 100644
--- a/src/client/components/facet_results/Deck.js
+++ b/src/client/components/facet_results/Deck.js
@@ -199,7 +199,7 @@ class Deck extends React.Component {
         filled: true,
         lineWidthMinPixels: 1,
         getPolygon: d => d.polygon,
-        getFillColor: d => [255, 0, 0, d.instanceCountScaled],
+        getFillColor: d => d.choroplethColor,
         getLineColor: [80, 80, 80],
         getLineWidth: 1
       })
diff --git a/src/server/sparql/Mappers.js b/src/server/sparql/Mappers.js
index eafd6af3173e5f0628634fc0e044583152b97ecc..9cb6be2d62bfac94220f91bc1fbc4f5024340f8e 100644
--- a/src/server/sparql/Mappers.js
+++ b/src/server/sparql/Mappers.js
@@ -1,5 +1,6 @@
 import { has, cloneDeep } from 'lodash'
 import { getTreeFromFlatData } from '@nosferatu500/react-sortable-tree'
+import { ckmeans } from 'simple-statistics'
 
 export const mapPlaces = sparqlBindings => {
   const results = sparqlBindings.map(b => {
@@ -307,8 +308,10 @@ const mergeDataItems = (itemA, itemB) => {
 }
 
 export const toPolygonLayerFormat = ({ data, config }) => {
-  const scaledData = linearScale({ data, config })
-  scaledData.forEach(item => {
+  // const scaledData = linearScale({ data, config })
+  const valuesArray = []
+  data.forEach(item => {
+    valuesArray.push(item.instanceCount)
     const pointArray = item.polygon.split(' ')
     const deckGlArray = pointArray.map(point => {
       const latLng = point.split(',')
@@ -319,8 +322,31 @@ export const toPolygonLayerFormat = ({ data, config }) => {
     })
     item.polygon = deckGlArray
   })
-  // const example = scaledData[0].polygon[0][0]
-  // console.log(typeof example)
-  // console.log(example)
-  return scaledData
+  // Ckmeans algorithm: https://journal.r-project.org/archive/2011-2/RJournal_2011-2_Wang+Song.pdf
+  const clusters = ckmeans(valuesArray, 8)
+  data.forEach(item => {
+    item.choroplethColor = getChoroplethMapColor({ value: Number(item.instanceCount), clusters })
+  })
+  return data
+}
+
+const getChoroplethMapColor = ({ value, clusters }) => {
+  // https://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=8
+  const colors = [
+    [255, 255, 204],
+    [255, 237, 160],
+    [254, 217, 118],
+    [254, 178, 76],
+    [253, 141, 60],
+    [252, 78, 42],
+    [227, 26, 28],
+    [177, 0, 38]
+  ]
+  let heatmapColor
+  colors.forEach((color, index) => {
+    if (value >= Number(clusters[index][0]) && value <= Number(clusters[index][clusters[index].length - 1])) {
+      heatmapColor = color
+    }
+  })
+  return heatmapColor
 }
diff --git a/src/server/sparql/sampo/BackendSearchConfig.js b/src/server/sparql/sampo/BackendSearchConfig.js
index 0acc9961e010349af566429b3099f7d7657db142..fa8facc77f48314be099882708ac71c1461a038c 100644
--- a/src/server/sparql/sampo/BackendSearchConfig.js
+++ b/src/server/sparql/sampo/BackendSearchConfig.js
@@ -177,9 +177,7 @@ export const backendSearchConfig = {
     postprocess: {
       func: toPolygonLayerFormat,
       config: {
-        variable: 'instanceCount',
-        minAllowed: 0,
-        maxAllowed: 255
+        variable: 'death'
       }
     }
   },
diff --git a/src/server/sparql/sampo/sparql_queries/SparqlQueriesPerspective1.js b/src/server/sparql/sampo/sparql_queries/SparqlQueriesPerspective1.js
index 1036173de7e10e1ae1b68b6e8c029df598afa9ea..ab8b508ecbe22de7e509c864b44c40c613572746 100644
--- a/src/server/sparql/sampo/sparql_queries/SparqlQueriesPerspective1.js
+++ b/src/server/sparql/sampo/sparql_queries/SparqlQueriesPerspective1.js
@@ -607,4 +607,5 @@ export const choroplethQuery = `
   }
   GROUP BY ?id ?prefLabel ?polygon
   ORDER BY desc(?instanceCount)
+  # LIMIT 40
 `