diff --git a/src/server/sparql/Filters.js b/src/server/sparql/Filters.js
index 1898e5542ce86143c85d38ac14c646bd24c1a1ae..5ced5a4d4ee07f32a7e0c567ea7a0cd40b0ecd34 100644
--- a/src/server/sparql/Filters.js
+++ b/src/server/sparql/Filters.js
@@ -56,7 +56,8 @@ export const generateConstraintsBlock = ({
           facetClass: facetClass,
           facetID: c.id,
           filterTarget: filterTarget,
-          queryString: c.values
+          queryString: c.values,
+          inverse: inverse
         });
         break;
       case 'uriFilter':
@@ -74,6 +75,7 @@ export const generateConstraintsBlock = ({
           facetID: c.id,
           filterTarget: filterTarget,
           values: c.values,
+          inverse: inverse
         });
         break;
       case 'timespanFilter':
@@ -82,6 +84,7 @@ export const generateConstraintsBlock = ({
           facetID: c.id,
           filterTarget: filterTarget,
           values: c.values,
+          inverse: inverse
         });
         break;
     }
@@ -93,29 +96,50 @@ const generateTextFilter = ({
   facetClass,
   facetID,
   filterTarget,
-  queryString
+  queryString,
+  inverse
 }) => {
-  return `?${filterTarget} text:query (${facetConfigs[facetClass][facetID].textQueryProperty} '${queryString}') . `;
+  const filterStr = `?${filterTarget} text:query (${facetConfigs[facetClass][facetID].textQueryProperty} '${queryString}') . `;
+  if (inverse) {
+    return `
+      FILTER NOT EXISTS {
+        ${filterStr}
+      }
+    `;
+  } else {
+    return filterStr;
+  }
 };
 
 const generateSpatialFilter = ({
   facetClass,
   facetID,
   filterTarget,
-  values
+  values,
+  inverse
 }) => {
   const { latMin, longMin, latMax, longMax } = values;
-  return `
+  const filterStr = `
     ?${facetID}Filter spatial:withinBox (${latMin} ${longMin} ${latMax} ${longMax} 1000000) .
     ?${filterTarget} ${facetConfigs[facetClass][facetID].predicate} ?${facetID}Filter .
   `;
+  if (inverse) {
+    return `
+      FILTER NOT EXISTS {
+        ${filterStr}
+      }
+    `;
+  } else {
+    return filterStr;
+  }
 };
 
 const generateTimespanFilter = ({
   facetClass,
   facetID,
   filterTarget,
-  values
+  values,
+  inverse
 }) => {
   const facetConfig = facetConfigs[facetClass][facetID];
   const { start, end } = values;
@@ -129,7 +153,7 @@ const generateTimespanFilter = ({
   //   FILTER(?start >= "${start}"^^xsd:date)
   //   FILTER(?end <= "${end}"^^xsd:date)
   // `;
-  return `
+  const filterStr = `
     ?${filterTarget} ${facetConfig.predicate} ?${facetID} .
     ?${facetID} ${facetConfig.startProperty} ?${facetID}Start .
     ?${facetID} ${facetConfig.endProperty} ?${facetID}End .
@@ -140,6 +164,15 @@ const generateTimespanFilter = ({
       ?${facetID}End >= "${selectionStart}"^^xsd:date && ?${facetID}End <= "${selectionEnd}"^^xsd:date
     )
   `;
+  if (inverse) {
+    return `
+    FILTER NOT EXISTS {
+        ${filterStr}
+    }
+    `;
+  } else {
+    return filterStr;
+  }
 };
 
 const generateUriFilter = ({