diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java
index 2ace191..bef5c8f 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/ClusterRepositoryInfo.java
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
 import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
 
 /**
  * Utility class to manage a unique cluster/repository id for the cluster.
@@ -56,7 +57,7 @@ public class ClusterRepositoryInfo {
      * @return the repository id
      * @throws CommitFailedException
      */
-    public static String createId(NodeStore store, String customId) throws CommitFailedException {
+    public static String createId(NodeStore store, @Nullable String customId) throws CommitFailedException {
         NodeBuilder root = store.getRoot().builder();
         if (!root.hasChildNode(CLUSTER_CONFIG_NODE) ||
                 !root.getChildNode(CLUSTER_CONFIG_NODE).hasProperty(CLUSTER_ID_PROP)) {
diff --git oak-segment/pom.xml oak-segment/pom.xml
index 0ed28e3..2e776f3 100644
--- oak-segment/pom.xml
+++ oak-segment/pom.xml
@@ -161,6 +161,12 @@
             <artifactId>org.apache.felix.scr.annotations</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.settings</artifactId>
+            <version>1.2.0</version>
+            <optional>true</optional>
+        </dependency>
 
         <!-- Dependencies on Oak testing modules -->
 
diff --git oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
index 1c84667..d325d62 100644
--- oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
+++ oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
@@ -89,9 +89,11 @@ import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
 import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardExecutor;
 import org.apache.jackrabbit.oak.stats.Clock;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
+import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -456,7 +458,17 @@ public class SegmentNodeStoreService extends ProxyNodeStore
         // If a shared data store register the repo id in the data store
         String repoId = "";
         if (SharedDataStoreUtils.isShared(blobStore)) {
-            String customRepoID = property(PROP_SHARED_DS_REPO_ID);
+            String customRepoID = determineRepoId(context.getBundleContext());
+            if (customRepoID == null) {
+                customRepoID = property(PROP_SHARED_DS_REPO_ID);
+                if (customRepoID != null){
+                    log.info("RepositoryId determined from config with name {} - " +
+                            "{}", PROP_SHARED_DS_REPO_ID, customRepoID);
+                } else {
+                    log.info("RepositoryId not specified in config via {}. " +
+                            "A randomId would be generated", PROP_SHARED_DS_REPO_ID);
+                }
+            }
 
             try {
                 repoId = ClusterRepositoryInfo.createId(delegate, customRepoID);
@@ -494,6 +506,22 @@ public class SegmentNodeStoreService extends ProxyNodeStore
         return true;
     }
 
+    private String determineRepoId(BundleContext bundleContext) {
+        try {
+            ServiceTracker tracker = new ServiceTracker(bundleContext, "org.apache.sling.settings.SlingSettingsService", null);
+            tracker.open();
+            org.apache.sling.settings.SlingSettingsService settingsService =
+                    (org.apache.sling.settings.SlingSettingsService) tracker.getService();
+            if (settingsService != null){
+                return settingsService.getSlingId();
+            }
+        } catch (Throwable cnfe){
+            log.info("No SlingSettingsService found. RepositoryId would be determined via OSGi config or randomly " +
+                    "generated");
+        }
+        return null;
+    }
+
     private String property(String name) {
         return lookupConfigurationThenFramework(context, name);
     }
diff --git oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
index c7cd82b..e65b64a 100644
--- oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
+++ oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
@@ -21,15 +21,24 @@ package org.apache.jackrabbit.oak.plugins.segment;
 
 import static com.google.common.collect.Maps.newHashMap;
 import static org.apache.sling.testing.mock.osgi.MockOsgi.deactivate;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
+import java.io.IOException;
 import java.util.Map;
 
+import org.apache.jackrabbit.core.data.FileDataStore;
+import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
+import org.apache.jackrabbit.oak.plugins.blob.datastore.OakFileDataStore;
+import org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreUtils;
+import org.apache.jackrabbit.oak.plugins.identifier.ClusterRepositoryInfo;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.apache.sling.settings.SlingSettingsService;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
 import org.junit.Rule;
@@ -139,6 +148,31 @@ public class SegmentNodeStoreServiceTest {
         unregisterSegmentNodeStoreService();
     }
 
+    @Test
+    public void sharedBlobStoreAndRandomRepoID() throws Exception{
+        BlobStore sharedBlobStore = createSharedBlobStore();
+        context.registerService(BlobStore.class, sharedBlobStore, null);
+        registerSegmentNodeStoreService(true);
+
+        NodeStore ns = context.getService(NodeStore.class);
+        assertNotNull(ClusterRepositoryInfo.getId(ns));
+    }
+
+    @Test
+    public void sharedBlobStoreAndSlingSettingsRepoID() throws Exception{
+        BlobStore sharedBlobStore = createSharedBlobStore();
+        context.registerService(BlobStore.class, sharedBlobStore, null);
+
+        SlingSettingsService settings = mock(SlingSettingsService.class);
+        context.registerService(SlingSettingsService.class, settings, null);
+        when(settings.getSlingId()).thenReturn("foo");
+
+        registerSegmentNodeStoreService(true);
+
+        NodeStore ns = context.getService(NodeStore.class);
+        assertEquals("foo", ClusterRepositoryInfo.getId(ns));
+    }
+
     private SegmentNodeStoreService segmentNodeStoreService;
 
     private void registerSegmentNodeStoreService(boolean customBlobStore) {
@@ -174,4 +208,11 @@ public class SegmentNodeStoreServiceTest {
         assertNull(context.getService(SegmentStoreProvider.class));
     }
 
+    private BlobStore createSharedBlobStore() throws IOException {
+        OakFileDataStore fds = new OakFileDataStore();
+        fds.setMinRecordLength(4092);
+        fds.init(folder.newFolder().getAbsolutePath());
+        return new DataStoreBlobStore(fds);
+    }
+
 }
