diff --git a/scr/src/main/java/org/apache/felix/scr/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/AbstractComponentManager.java
index c530daa..3bdd255 100644
--- a/scr/src/main/java/org/apache/felix/scr/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/AbstractComponentManager.java
@@ -221,7 +221,7 @@
      * method has to actually complete before other actions like bundle stopping
      * may continue.
      */
-    public final void dispose()
+    public void dispose()
     {
         disposeInternal();
     }
diff --git a/scr/src/main/java/org/apache/felix/scr/ComponentFactoryImpl.java b/scr/src/main/java/org/apache/felix/scr/ComponentFactoryImpl.java
index 2291a5f..deb3a36 100644
--- a/scr/src/main/java/org/apache/felix/scr/ComponentFactoryImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/ComponentFactoryImpl.java
@@ -115,6 +115,11 @@
         // also register with the factory PID
         props.put( Constants.SERVICE_PID, getComponentMetadata().getName() );
 
+        // descriptive service properties
+        props.put( Constants.SERVICE_DESCRIPTION, "ManagedServiceFactory for Factory Component"
+            + getComponentMetadata().getName() );
+        props.put( Constants.SERVICE_VENDOR, "Apache Software Foundation" );
+
         return props;
     }
 
@@ -148,16 +153,10 @@
             // keep a reference for future updates
             m_configuredServices.put( pid, cm );
         }
-        else
+        else if ( cm instanceof ImmediateComponentManager )
         {
-            if ( cm instanceof ImmediateComponentManager )
-            {
-                // inject current configuration before cycling
-                ( ( ImmediateComponentManager ) cm ).setFactoryProperties( configuration );
-            }
-
-            // reconfigure the component
-            cm.reconfigure();
+            // update the configuration as if called as ManagedService
+            ( ( ImmediateComponentManager ) cm ).updated( configuration );
         }
     }
 
diff --git a/scr/src/main/java/org/apache/felix/scr/ComponentRegistry.java b/scr/src/main/java/org/apache/felix/scr/ComponentRegistry.java
index 9591f63..e016856 100644
--- a/scr/src/main/java/org/apache/felix/scr/ComponentRegistry.java
+++ b/scr/src/main/java/org/apache/felix/scr/ComponentRegistry.java
@@ -19,16 +19,11 @@
 package org.apache.felix.scr;
 
 
-import java.util.Dictionary;
 import java.util.HashMap;
-import java.util.Hashtable;
 import java.util.Map;
 
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.cm.ConfigurationEvent;
-import org.osgi.service.cm.ConfigurationListener;
 import org.osgi.service.component.ComponentException;
 
 
@@ -37,7 +32,7 @@
  *
  * @author fmeschbe
  */
-public class ComponentRegistry implements ConfigurationListener
+public class ComponentRegistry
 {
 
     // Known and registered ComponentManager instances
@@ -54,11 +49,6 @@
     {
         m_componentNames = new HashMap();
         m_componentCounter = -1;
-
-        Dictionary props = new Hashtable();
-        props.put( Constants.SERVICE_DESCRIPTION, "Service Component Configuration Support" );
-        props.put( Constants.SERVICE_VENDOR, "Apache Software Foundation" );
-        registration = context.registerService( ConfigurationListener.class.getName(), this, props );
     }
 
 
@@ -72,19 +62,6 @@
     }
 
 
-    //---------- ConfigurationListener ----------------------------------------
-
-    public void configurationEvent( ConfigurationEvent configEvent )
-    {
-        String pid = configEvent.getPid();
-        ComponentManager cm = getComponent( pid );
-        if ( cm != null )
-        {
-            cm.reconfigure();
-        }
-    }
-
-
     //---------- ComponentManager registration support ------------------------
 
     long createComponentId()
diff --git a/scr/src/main/java/org/apache/felix/scr/ImmediateComponentManager.java b/scr/src/main/java/org/apache/felix/scr/ImmediateComponentManager.java
index 6102bfe..eb98100 100644
--- a/scr/src/main/java/org/apache/felix/scr/ImmediateComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/ImmediateComponentManager.java
@@ -19,14 +19,15 @@
 package org.apache.felix.scr;
 
 
-import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Dictionary;
+import java.util.Hashtable;
 import java.util.Iterator;
 
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cm.ManagedService;
 import org.osgi.service.component.ComponentConstants;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.log.LogService;
@@ -37,7 +38,7 @@
  * implementation object's lifecycle.
  *
  */
-class ImmediateComponentManager extends AbstractComponentManager
+class ImmediateComponentManager extends AbstractComponentManager implements ManagedService
 {
     // the component ID
     private long m_componentId;
@@ -54,6 +55,15 @@
     // the component properties, also used as service properties
     private Dictionary m_properties;
 
+    // the managed service registration object created in the constructor
+    // to receive configuration from the Configuration Admin Service
+    // null, if this is a component created by a component factory
+    private ServiceRegistration m_managedServiceRegistration;
+
+    // the component properties from the Configuration Admin Service
+    // this is null, if none exist or none are provided
+    private Dictionary m_configurationProperties;
+
 
     /**
      * The constructor receives both the activator and the metadata
@@ -66,6 +76,44 @@
         super( activator, metadata );
 
         m_componentId = componentId;
+
+        // only register as ManagedService if not created by a Component Factory
+        if ( !getComponentMetadata().isFactory() )
+        {
+            Dictionary props = new Hashtable();
+            props.put( Constants.SERVICE_PID, getComponentMetadata().getName() );
+            props.put( Constants.SERVICE_DESCRIPTION, "ManagedService for Component "
+                + getComponentMetadata().getName() );
+            props.put( Constants.SERVICE_VENDOR, "Apache Software Foundation" );
+
+            m_managedServiceRegistration = activator.getBundleContext().registerService(
+                ManagedService.class.getName(), this, props );
+        }
+    }
+
+
+    /**
+     * Before doing real disposal, we also have to unregister the managed
+     * service which was registered when the instance was created.
+     */
+    public void dispose()
+    {
+        if ( m_managedServiceRegistration != null )
+        {
+            try
+            {
+                m_managedServiceRegistration.unregister();
+                m_managedServiceRegistration = null;
+            }
+            catch ( Throwable t )
+            {
+                getActivator().log( LogService.LOG_INFO, "Unexpected problem unregistering ManagedService",
+                    getComponentMetadata(), t );
+            }
+        }
+
+        // really dispose off this manager instance
+        super.dispose();
     }
 
 
@@ -295,23 +343,7 @@
             Dictionary props = copyTo( null, getComponentMetadata().getProperties() );
 
             // 2. overlay with Configuration Admin properties
-            ConfigurationAdmin ca = getActivator().getConfigurationAdmin();
-            if ( ca != null )
-            {
-                try
-                {
-                    Configuration cfg = ca.getConfiguration( getComponentMetadata().getName() );
-                    if ( cfg != null )
-                    {
-                        copyTo( props, cfg.getProperties() );
-                    }
-                }
-                catch ( IOException ioe )
-                {
-                    getActivator().log( LogService.LOG_ERROR, "Problem getting Configuration", getComponentMetadata(),
-                        ioe );
-                }
-            }
+            copyTo( props, m_configurationProperties );
 
             // 3. copy any component factory properties, not supported yet
             copyTo( props, m_factoryProperties );
@@ -326,4 +358,27 @@
         return m_properties;
     }
 
+
+    //---------- ManagedService interface
+
+    /**
+     * Called by the Configuration Admin Service to update the component with
+     * Configuration properties.
+     *
+     * @param configuration The configuration properties for the component from
+     *      the Configuration Admin Service or <code>null</code> if there is
+     *      no configuration or if the configuration has just been deleted.
+     */
+    public void updated( Dictionary configuration )
+    {
+        // store the properties
+        m_configurationProperties = configuration;
+
+        // reactivate the component to ensure it is provided with the
+        // configuration data
+        if ( ( getState() & ( STATE_ACTIVE | STATE_FACTORY | STATE_REGISTERED ) ) != 0 )
+        {
+            reactivate();
+        }
+    }
 }
