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 ea6eb00..bc46397 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
@@ -489,11 +489,11 @@ public class Oak {
 
     /**
      * Enable the asynchronous (background) indexing behavior.
-     * 
+     *
      * Please not that when enabling the background indexer, you need to take
      * care of calling
      * <code>#shutdown<code> on the <code>executor<code> provided for this Oak instance.
-     * 
+     *
      */
     public Oak withAsyncIndexing() {
         this.asyncIndexing = true;
@@ -506,7 +506,8 @@ public class Oak {
     }
 
     public ContentRepository createContentRepository() {
-        whiteboard.register(Executor.class, getExecutor(), Collections.emptyMap());
+        final List<Registration> regs = Lists.newArrayList();
+        regs.add(whiteboard.register(Executor.class, getExecutor(), Collections.emptyMap()));
 
         IndexEditorProvider indexEditors = CompositeIndexEditorProvider.compose(indexEditorProviders);
         OakInitializer.initialize(store, new CompositeInitializer(initializers), indexEditors);
@@ -521,20 +522,20 @@ public class Oak {
             String name = "async";
             AsyncIndexUpdate task = new AsyncIndexUpdate(name, store,
                     indexEditors);
-            scheduleWithFixedDelay(whiteboard, task, 5, true);
-            registerMBean(whiteboard, IndexStatsMBean.class,
-                    task.getIndexStats(), IndexStatsMBean.TYPE, name);
+            regs.add(scheduleWithFixedDelay(whiteboard, task, 5, true));
+            regs.add(registerMBean(whiteboard, IndexStatsMBean.class,
+                    task.getIndexStats(), IndexStatsMBean.TYPE, name));
 
             PropertyIndexAsyncReindex asyncPI = new PropertyIndexAsyncReindex(
                     new AsyncIndexUpdate("async-reindex", store, indexEditors,
                             true), getExecutor()
             );
-            registerMBean(whiteboard, PropertyIndexAsyncReindexMBean.class,
-                    asyncPI, PropertyIndexAsyncReindexMBean.TYPE, name);
+            regs.add(registerMBean(whiteboard, PropertyIndexAsyncReindexMBean.class,
+                    asyncPI, PropertyIndexAsyncReindexMBean.TYPE, name));
         }
 
-        registerMBean(whiteboard, QueryEngineSettingsMBean.class,
-                queryEngineSettings, QueryEngineSettingsMBean.TYPE, "settings");
+        regs.add(registerMBean(whiteboard, QueryEngineSettingsMBean.class,
+                queryEngineSettings, QueryEngineSettingsMBean.TYPE, "settings"));
 
         // FIXME: OAK-810 move to proper workspace initialization
         // initialize default workspace
@@ -555,12 +556,12 @@ public class Oak {
 
         // Register observer last to prevent sending events while initialising
         for (Observer observer : observers) {
-            registerObserver(whiteboard, observer);
+            regs.add(registerObserver(whiteboard, observer));
         }
 
         RepositoryManager repositoryManager = new RepositoryManager(whiteboard);
-        registerMBean(whiteboard, RepositoryManagementMBean.class, repositoryManager,
-                RepositoryManagementMBean.TYPE, repositoryManager.getName());
+        regs.add(registerMBean(whiteboard, RepositoryManagementMBean.class, repositoryManager,
+                RepositoryManagementMBean.TYPE, repositoryManager.getName()));
 
         return new ContentRepositoryImpl(
                 store,
@@ -568,7 +569,15 @@ public class Oak {
                 defaultWorkspaceName,
                 queryEngineSettings,
                 indexProvider,
-                securityProvider);
+                securityProvider) {
+            @Override
+            public void close() throws IOException {
+                super.close();
+                for(Registration reg : regs){
+                    reg.unregister();
+                }
+            }
+        };
     }
 
     /**
diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
index a2c485a..be5b079 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.oak.core;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
@@ -107,7 +108,7 @@ import static javax.jcr.Repository.WRITE_SUPPORTED;
  * {@code MicroKernel}-based implementation of
  * the {@link ContentRepository} interface.
  */
-public class ContentRepositoryImpl implements ContentRepository {
+public class ContentRepositoryImpl implements ContentRepository, Closeable {
 
     private final NodeStore nodeStore;
     private final CommitHook commitHook;
@@ -175,6 +176,11 @@ public class ContentRepositoryImpl implements ContentRepository {
         }
         return descriptors;
     }
+
+    @Override
+    public void close() throws IOException {
+
+    }
     
     @SuppressWarnings("deprecation")
     @Nonnull
