diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
index c2140a0..ce85c3a 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
@@ -603,7 +603,7 @@ public class Oak {
             asyncTasks = new HashMap<String, Long>();
         }
         checkState(delayInSeconds > 0, "delayInSeconds value must be > 0");
-        asyncTasks.put(checkNotNull(name), delayInSeconds);
+        asyncTasks.put(AsyncIndexUpdate.checkValidName(name), delayInSeconds);
         return this;
     }
 
diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
index 8027c3c..6139a9e 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
@@ -18,6 +18,7 @@
  */
 package org.apache.jackrabbit.oak.plugins.index;
 
+import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Throwables.getStackTraceAsString;
 import static com.google.common.collect.Sets.newHashSet;
@@ -205,7 +206,7 @@ public class AsyncIndexUpdate implements Runnable, Closeable {
 
     public AsyncIndexUpdate(@Nonnull String name, @Nonnull NodeStore store,
                             @Nonnull IndexEditorProvider provider, StatisticsProvider statsProvider, boolean switchOnSync) {
-        this.name = checkNotNull(name);
+        this.name = checkValidName(name);
         this.lastIndexedTo = name + "-LastIndexedTo";
         this.store = checkNotNull(store);
         this.provider = checkNotNull(provider);
@@ -219,6 +220,16 @@ public class AsyncIndexUpdate implements Runnable, Closeable {
         this(name, store, provider, false);
     }
 
+    public static String checkValidName(String asyncName){
+        checkNotNull(asyncName, "async name should not be null");
+        if (IndexConstants.ASYNC_REINDEX_VALUE.equals(asyncName)){
+            return asyncName;
+        }
+        checkArgument(asyncName.endsWith("async"), "async name [%s] does not confirm to " +
+                "naming pattern of ending with 'async'", asyncName);
+        return asyncName;
+    }
+
     /**
      * Index update callback that tries to raise the async status flag when
      * the first index change is detected.
diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
index ecf4576..0bbf5dc 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
@@ -228,7 +228,7 @@ public class AsyncIndexerService {
         final long timeIntervalInSecs;
 
         private AsyncConfig(String name, long timeIntervalInSecs) {
-            this.name = name;
+            this.name = AsyncIndexUpdate.checkValidName(name);
             this.timeIntervalInSecs = timeIntervalInSecs;
         }
 
diff --git oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
index feefaf9..6ae0be8 100644
--- oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
+++ oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
@@ -165,7 +165,7 @@ public class OakTest {
         Oak oak = new Oak()
                 .with(new OpenSecurityProvider())
                 .with(wb)
-                .withAsyncIndexing("foo", 5);
+                .withAsyncIndexing("foo-async", 5);
         ContentRepository repo = oak.createContentRepository();
 
         ((Closeable)repo).close();
diff --git oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
index 87d26a7..91fc60e 100644
--- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
+++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
@@ -791,16 +791,17 @@ public class AsyncIndexUpdateTest {
         IndexEditorProvider provider = new PropertyIndexEditorProvider();
 
         NodeBuilder builder = store.getRoot().builder();
+        String missingAsync = "missing-async";
         createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME),
                 "rootIndex", true, false, ImmutableSet.of("foo"), null)
-                .setProperty(ASYNC_PROPERTY_NAME, "asyncMissing");
+                .setProperty(ASYNC_PROPERTY_NAME, missingAsync);
 
         builder.child("testRoot").setProperty("foo", "abc");
 
         // merge it back in
         store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
-        AsyncIndexUpdate async = new AsyncIndexUpdate("asyncMissing", store,
+        AsyncIndexUpdate async = new AsyncIndexUpdate(missingAsync, store,
                 provider);
         //first run, creates a checkpoint and a ref to it as the last indexed state
         async.run();
@@ -811,12 +812,12 @@ public class AsyncIndexUpdateTest {
         assertEquals(
                 firstCp,
                 store.getRoot().getChildNode(ASYNC)
-                        .getString("asyncMissing"));
+                        .getString(missingAsync));
 
         // second run, simulate an index going away
         provider = CompositeIndexEditorProvider
                 .compose(new ArrayList<IndexEditorProvider>());
-        async = new AsyncIndexUpdate("asyncMissing", store, provider);
+        async = new AsyncIndexUpdate(missingAsync, store, provider);
         async.run();
         assertTrue(async.isFailing());
         // don't set reindex=true but skip the update
@@ -833,7 +834,7 @@ public class AsyncIndexUpdateTest {
         assertEquals(
                 firstCp,
                 store.getRoot().getChildNode(ASYNC)
-                        .getString("asyncMissing"));
+                        .getString(missingAsync));
     }
 
     @Test
@@ -842,14 +843,15 @@ public class AsyncIndexUpdateTest {
         IndexEditorProvider provider = new PropertyIndexEditorProvider();
 
         NodeBuilder builder = store.getRoot().builder();
+        String missingAsyncName = "missing-async";
         createIndexDefinition(builder.child("subNodeIndex").child(INDEX_DEFINITIONS_NAME),
                 "rootIndex2", true, false, ImmutableSet.of("foo"), null)
-                .setProperty(ASYNC_PROPERTY_NAME, "asyncMissing");
+                .setProperty(ASYNC_PROPERTY_NAME, missingAsyncName);
 
         builder.child("subNodeIndex").child("testRoot").setProperty("foo", "abc");
         store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
-        AsyncIndexUpdate async = new AsyncIndexUpdate("asyncMissing", store,  provider);
+        AsyncIndexUpdate async = new AsyncIndexUpdate(missingAsyncName, store,  provider);
         //first run, creates a checkpoint and a ref to it as the last indexed state
         async.run();
         assertFalse(async.isFailing());
@@ -857,7 +859,7 @@ public class AsyncIndexUpdateTest {
         assertTrue("Expecting one checkpoint",
                 store.listCheckpoints().size() == 1);
         String firstCp = store.listCheckpoints().iterator().next();
-        assertEquals(firstCp, store.getRoot().getChildNode(ASYNC).getString("asyncMissing"));
+        assertEquals(firstCp, store.getRoot().getChildNode(ASYNC).getString(missingAsyncName));
 
         builder = store.getRoot().builder();
         builder.child("subNodeIndex").child("testRoot2").setProperty("foo", "abc");
@@ -865,7 +867,7 @@ public class AsyncIndexUpdateTest {
 
         // second run, simulate an index going away
         provider = CompositeIndexEditorProvider.compose(new ArrayList<IndexEditorProvider>());
-        async = new AsyncIndexUpdate("asyncMissing", store, provider);
+        async = new AsyncIndexUpdate(missingAsyncName, store, provider);
         async.run();
         assertTrue(async.isFailing());
         // don't set reindex=true but skip the update
@@ -878,7 +880,7 @@ public class AsyncIndexUpdateTest {
         assertTrue("Expecting one checkpoint",store.listCheckpoints().size() == 1);
         String secondCp = store.listCheckpoints().iterator().next();
         assertTrue("Store should not create a new checkpoint",  secondCp.equals(firstCp));
-        assertEquals(firstCp, store.getRoot().getChildNode(ASYNC).getString("asyncMissing"));
+        assertEquals(firstCp, store.getRoot().getChildNode(ASYNC).getString(missingAsyncName));
     }
 
     private static class FaultyIndexEditorProvder implements
@@ -1750,6 +1752,27 @@ public class AsyncIndexUpdateTest {
         assertFalse(async.getCorruptIndexHandler().getFailingIndexData("async").containsKey("/oak:index/barIndex"));
     }
 
+    @Test
+    public void validName() throws Exception{
+        assertNotNull(AsyncIndexUpdate.checkValidName("async"));
+        assertNotNull(AsyncIndexUpdate.checkValidName("foo-async"));
+        assertNotNull(AsyncIndexUpdate.checkValidName(IndexConstants.ASYNC_REINDEX_VALUE));
+
+        try{
+            AsyncIndexUpdate.checkValidName(null);
+            fail();
+        } catch (Exception ignore){
+
+        }
+
+        try{
+            AsyncIndexUpdate.checkValidName("foo");
+            fail();
+        } catch (Exception ignore){
+
+        }
+    }
+
     private static class TestIndexEditorProvider extends PropertyIndexEditorProvider {
         private String indexPathToFail;
         @Override
diff --git oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java
index 5632dd4..c4b63c0 100644
--- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java
+++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerServiceTest.java
@@ -139,9 +139,9 @@ public class AsyncIndexerServiceTest {
         assertEquals("async", configs.get(0).name);
         assertEquals(15, configs.get(0).timeIntervalInSecs);
 
-        configs = AsyncIndexerService.getAsyncConfig(new String[]{"async:15", "foo:23"});
+        configs = AsyncIndexerService.getAsyncConfig(new String[]{"async:15", "foo-async:23"});
         assertEquals(2, configs.size());
-        assertEquals("foo", configs.get(1).name);
+        assertEquals("foo-async", configs.get(1).name);
         assertEquals(23, configs.get(1).timeIntervalInSecs);
     }
 
