diff --git a/features/core/src/main/java/org/apache/karaf/features/RegionDigraphPersistence.java b/features/core/src/main/java/org/apache/karaf/features/RegionDigraphPersistence.java
new file mode 100644
index 0000000..2259774
--- /dev/null
+++ b/features/core/src/main/java/org/apache/karaf/features/RegionDigraphPersistence.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.features;
+
+
+import java.io.IOException;
+
+public interface RegionDigraphPersistence {
+
+	void persistRegionDigraph() throws IOException;
+	
+}
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
index b38c33f..c557e75 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
@@ -32,6 +32,7 @@
 import org.apache.felix.utils.properties.Properties;
 import org.apache.karaf.features.FeaturesListener;
 import org.apache.karaf.features.FeaturesService;
+import org.apache.karaf.features.RegionDigraphPersistence;
 import org.apache.karaf.features.internal.management.FeaturesServiceMBeanImpl;
 import org.apache.karaf.features.internal.region.DigraphHelper;
 import org.apache.karaf.features.internal.region.SubsystemResolveContext;
@@ -83,7 +84,7 @@
 
     private ServiceTracker<FeaturesListener, FeaturesListener> featuresListenerTracker;
     private FeaturesServiceImpl featuresService;
-    private StandardRegionDigraph digraph;
+    private static StandardRegionDigraph digraph;
     private StandardManageableRegionDigraph digraphMBean;
 
     public Activator() {
@@ -133,6 +134,7 @@
         register(org.osgi.framework.hooks.service.FindHook.class, digraph.getServiceFindHook());
         register(org.osgi.framework.hooks.service.EventHook.class, digraph.getServiceEventHook());
         register(RegionDigraph.class, digraph);
+        register(RegionDigraphPersistence.class, createRegionDigraphPersister());
         digraphMBean = new StandardManageableRegionDigraph(digraph, "org.apache.karaf", bundleContext);
         digraphMBean.registerMBean();
 
@@ -262,7 +264,19 @@
         registerMBean(featuresServiceMBean, "type=feature");
     }
 
-    protected void doStop() {
+    private RegionDigraphPersistence createRegionDigraphPersister() {
+		
+		RegionDigraphPersistence persister = new RegionDigraphPersistence() {
+			
+			@Override
+			public void persistRegionDigraph() throws IOException {
+				Activator.this.doPersistRegionDigraph();
+			}
+		};
+		return persister;
+	}
+
+	protected void doStop() {
         if (digraphMBean != null) {
             digraphMBean.unregisterMbean();
             digraphMBean = null;
@@ -275,14 +289,22 @@
         if (featuresService != null) {
             featuresService = null;
         }
-        if (digraph != null) {
+        doPersistRegionDigraph();
+        digraph = null;
+    }
+
+	private void doPersistRegionDigraph() {
+		if (digraph != null) {
             try {
                 DigraphHelper.saveDigraph(bundleContext, digraph);
             } catch (Exception e) {
                 // Ignore
             }
-            digraph = null;
         }
-    }
+	}
+
+	public static StandardRegionDigraph getDigraph() {
+		return digraph;
+	}
 
 }