diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
index aac7e27..c77a628 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
@@ -45,6 +45,13 @@
     public abstract Component createService(Object[] properties);
     
     /**
+     * Catches our DependencyManager handle from our component init method.
+     */
+    public void init(Component c) {
+        m_manager = c.getDependencyManager();
+    }
+    
+    /**
      * Extra method, which may be used by sub-classes, when adaptee has changed.
      * For now, it's only used by the FactoryConfigurationAdapterImpl class, 
      * but it might also make sense to use this for Resource Adapters ...
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
index f620ae3..84b7ce6 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
@@ -95,6 +95,7 @@
             for (int i = 0; i < m_stateListeners.size(); i ++) {
                 service.addStateListener((ComponentStateListener) m_stateListeners.get(i));
             }
+            configureAutoConfigState(service, m_component);
             return service;
         }
     }
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
index fb7652d..31deeba 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
@@ -68,10 +68,7 @@
     /**
      * Creates, updates, or removes a service, when a ConfigAdmin factory configuration is created/updated or deleted.
      */
-    public class AdapterImpl extends AbstractDecorator implements ManagedServiceFactory {
-        // Our injected dependency manager
-        protected volatile DependencyManager m_dm;
-        
+    public class AdapterImpl extends AbstractDecorator implements ManagedServiceFactory {        
         // Our Managed Service Factory PID
         protected String m_factoryPid;
         
@@ -109,7 +106,7 @@
          */
         public Component createService(Object[] properties) {
             Dictionary settings = (Dictionary) properties[0];     
-            Component newService = m_dm.createComponent();        
+            Component newService = m_manager.createComponent();        
             Object impl = null;
             
             try {
@@ -133,12 +130,13 @@
             newService.setInterface(m_serviceInterfaces, serviceProperties);
             newService.setImplementation(impl);
             List dependencies = m_component.getDependencies();
-            newService.add(dependencies);
+            newService.add(dependencies); // TODO check if we should create a copy of dependencies ?
             newService.setComposition(m_compositionInstance, m_compositionMethod); // if not set, no effect
             newService.setCallbacks(m_callbackObject, m_init, m_start, m_stop, m_destroy); // if not set, no effect
             for (int i = 0; i < m_stateListeners.size(); i ++) {
                 newService.addStateListener((ComponentStateListener) m_stateListeners.get(i));
             }
+            configureAutoConfigState(newService, m_component);
             return newService;
         }
 
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
index d083421..f8823f2 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
@@ -118,6 +118,8 @@
                 .setCallbacks(m_callbackObject, m_init, m_start, m_stop, m_destroy) // if not set, no effect
                 .add(resourceDependency);
             
+            configureAutoConfigState(service, m_component);
+
             for (int i = 0; i < dependencies.size(); i++) {
                 service.add(((Dependency) dependencies.get(i)).createCopy());
             }
