diff --git a/pom.xml b/pom.xml
index fd83750..5d1061f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,6 +96,10 @@
       <scope>provided</scope>
     </dependency>
     <dependency>
+      <groupId>javax.jcr</groupId>
+      <artifactId>jcr</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.capabilities</artifactId>
       <version>0.0.1-SNAPSHOT</version>
diff --git a/src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java b/src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java
index 1deec51..250ed5a 100644
--- a/src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java
+++ b/src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java
@@ -20,20 +20,69 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryManager;
+import javax.jcr.query.QueryResult;
 import org.apache.sling.capabilities.CapabilitiesSource;
+import org.apache.sling.jcr.api.SlingRepository;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** CapabilitiesSource that provides information on the JCR Repository's search features */
 @Component(service = CapabilitiesSource.class)
 public class SearchSource implements CapabilitiesSource {
 
     public static final String NAMESPACE = "org.apache.sling.jcr.search";
+
+    public static final String SSA_PROP_NAME = "similarity.search.active";
+
+    public static final int SIMILARITY_SEARCH_CACHE_LIFETIME_SECONDS = 60;
+
+    private final Logger log = LoggerFactory.getLogger(getClass().getName());
+    private boolean similaritySearchActive;
+    private long similaritySearchCacheExpires;
+
+    @Reference
+    private SlingRepository repository;
     
     @Override
     public Map<String, Object> getCapabilities() throws Exception {
+        refreshCachedValues();
         final Map<String, Object> result = new HashMap<>();
+        result.put("similarity.search.active", String.valueOf(similaritySearchActive));
         return result;
     }
+
+    /** Find out whether the Oak similarity search is active, by
+     *  searching for any index definition that has useInSimilarity=true.
+     *  Cache the result to avoid making too many searches.
+     */
+    private void refreshCachedValues() throws RepositoryException {
+        if(System.currentTimeMillis() < similaritySearchCacheExpires) {
+            log.debug("Using cached similaritySearchActive value");
+            return;
+        }
+
+        similaritySearchCacheExpires = System.currentTimeMillis() + (SIMILARITY_SEARCH_CACHE_LIFETIME_SECONDS * 1000L);
+
+        synchronized(this) {
+            // TODO use a service user
+            final Session session = repository.loginAdministrative(null);
+            try {
+                    String query = "/jcr:root/oak:index//properties//* [@useInSimilarity = \"true\"]";
+                    final QueryManager qm = session.getWorkspace().getQueryManager();
+                    final QueryResult qr = qm.createQuery(query, Query.XPATH).execute();
+                    similaritySearchActive = qr.getNodes().hasNext();
+                    log.debug("Recomputed {}={} using query {}", SSA_PROP_NAME, similaritySearchActive, query);
+            } finally {
+                session.logout();
+            }
+        }
+    }
     
     @Override
     public String getNamespace() {
