diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/resource/impl/DistributedLinkResourceStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/resource/impl/DistributedLinkResourceStore.java
index ab167be..1078728 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/resource/impl/DistributedLinkResourceStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/resource/impl/DistributedLinkResourceStore.java
@@ -104,33 +104,32 @@
     private StoreSerializer serializer;
 
 
+    void createTable(String tableName) {
+        boolean tableReady = false;
+        do {
+            try {
+                if (!databaseAdminService.listTables().contains(tableName)) {
+                    databaseAdminService.createTable(tableName);
+                }
+                tableReady = true;
+            } catch (DatabaseException e) {
+                log.debug("Failed creating table, retrying", e);
+                try {
+                    Thread.sleep(200);
+                } catch (InterruptedException e1) {
+                    throw new DatabaseException(e1);
+                }
+            }
+        } while (!tableReady);
+    }
+
     @Activate
     public void activate() {
 
         serializer = new KryoSerializer();
 
-        Set<String> tables = null;
-        int retries = 0;
-        do {
-            try {
-                tables = databaseAdminService.listTables();
-            } catch (DatabaseException e) {
-                log.debug("DatabaseException", e);
-                retries++;
-                if (retries > 10) {
-                    log.error("Failed to list tables, moving on", e);
-                    tables = new HashSet<>();
-                }
-            }
-        } while (tables == null);
-
-        if (!tables.contains(LINK_RESOURCE_ALLOCATIONS)) {
-            databaseAdminService.createTable(LINK_RESOURCE_ALLOCATIONS);
-        }
-        if (!tables.contains(INTENT_ALLOCATIONS)) {
-            databaseAdminService.createTable(INTENT_ALLOCATIONS);
-        }
-
+        createTable(LINK_RESOURCE_ALLOCATIONS);
+        createTable(INTENT_ALLOCATIONS);
 
         log.info("Started");
     }
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/CMap.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/CMap.java
index 2c390c5..a3f907e 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/CMap.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/CMap.java
@@ -23,6 +23,7 @@
 
 import org.onlab.onos.store.serializers.StoreSerializer;
 import org.onlab.onos.store.service.DatabaseAdminService;
+import org.onlab.onos.store.service.DatabaseException;
 import org.onlab.onos.store.service.DatabaseService;
 import org.onlab.onos.store.service.VersionedValue;
 
@@ -70,9 +71,21 @@
         this.tableName = checkNotNull(tableName);
         this.serializer = checkNotNull(serializer);
 
-        if (!dbAdminService.listTables().contains(tableName)) {
-            dbAdminService.createTable(tableName);
-        }
+        boolean tableReady = false;
+        do {
+            try {
+                if (!dbAdminService.listTables().contains(tableName)) {
+                    dbAdminService.createTable(tableName);
+                }
+                tableReady = true;
+            } catch (DatabaseException e) {
+                try {
+                    Thread.sleep(200);
+                } catch (InterruptedException e1) {
+                    throw new DatabaseException(e1);
+                }
+            }
+        } while (!tableReady);
 
         keyCache = CacheBuilder.newBuilder()
                     .softValues()
