diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java
index 82dde28..f3236dc 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java
@@ -40,8 +40,6 @@
         // If the "dm.log=true" parameter is configured in the OSGi config.properties
         // then, we'll wait for the LogService, else we'll use an optional dependency over it,
         // and we'll eventually use a Null LogService Object.
-        // Notice that the Felix log service must also be configured from the OSGi config.properites, using
-        // the "org.apache.felix.log.storeDebug=true" property, in order to display DEBUG log levels.
 
         boolean logActive = "true".equals(context.getProperty("dm.log"));
         dm.add(createService()
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceBuilder.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceBuilder.java
index 47aa2b5..bd435c6 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceBuilder.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceBuilder.java
@@ -60,11 +60,11 @@
             service.setImplementation(b.loadClass(impl));
             service.setComposition(composition);
             service.setInterface(provide, serviceProperties);
+            // Adds dependencies (except named dependencies, which are managed by the lifecycle handler).
+            addUnamedDependencies(b, dm, service, srvMeta, depsMeta);
             // Creates a ServiceHandler, which will filter all service lifecycle callbacks.
             ServiceLifecycleHandler lfcleHandler = new ServiceLifecycleHandler(service, b, dm, srvMeta, depsMeta);
             service.setCallbacks(lfcleHandler, "init", "start", "stop", "destroy");
-            // Adds dependencies (except named dependencies, which are managed by the lifecycle handler).
-            addUnamedDependencies(b, dm, service, srvMeta, depsMeta);
         }
         else
         {
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
index d9f0976..89c1a33 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
@@ -95,7 +95,7 @@
     private String m_destroy;
     private MetaData m_srvMeta;
     private List<MetaData> m_depsMeta;
-    private List<Dependency> m_deps = new ArrayList<Dependency>();
+    private List<Dependency> m_namedDeps = new ArrayList<Dependency>();
     private Bundle m_bundle;
 
     public ServiceLifecycleHandler(Service srv, Bundle srvBundle, DependencyManager dm,
@@ -108,24 +108,6 @@
         m_stop = srvMeta.getString(Params.stop, null);
         m_destroy = srvMeta.getString(Params.destroy, null);
         m_bundle = srvBundle;
-
-        // Plug configuration dependencies now, and remove them from the dependency list.
-        // (we want these dependencies to be injected before the init method).
-        
-        String confDependency = DependencyBuilder.DependencyType.ConfigurationDependency.toString();
-        Iterator<MetaData> dependencies = depMeta.iterator();
-        while (dependencies.hasNext()) 
-        {
-            MetaData dependency = dependencies.next();
-            if (dependency.getString(Params.type).equals(confDependency))
-            {
-                // Register Configuration dependency now.
-                Dependency dp = new DependencyBuilder(dependency).build(m_bundle, dm);
-                srv.add(dp);
-                dependencies.remove();
-            }
-        }
-        
         m_depsMeta = depMeta;
     }
 
@@ -173,7 +155,7 @@
                                    "ServiceLifecycleHandler.init: adding dependency %s into service %s",
                                    dependency, m_srvMeta);
                 Dependency d = depBuilder.build(m_bundle, dm, true);
-                m_deps.add(d);
+                m_namedDeps.add(d);
                 service.add(d);
             }
         }
@@ -184,7 +166,7 @@
     {
         // Remove "instance bound" flag from all dependencies, because we want to be deactivated
         // once we lose one of the deps ...
-        Iterator it = m_deps.iterator();
+        Iterator it = m_namedDeps.iterator();
         while (it.hasNext())
         {
             Dependency d = (Dependency) it.next();
