diff --git a/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java b/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
index 31de35e..eb3344b 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
@@ -244,7 +244,7 @@
                     ComponentHolder holder = m_componentRegistry.createComponentHolder( this, metadata );
 
                     // register the component after validation
-                    m_componentRegistry.registerComponent( metadata.getName(), holder );
+                    m_componentRegistry.registerComponentHolder( metadata.getName(), holder );
                     m_managers.add( holder );
 
                     // enable the component
@@ -260,7 +260,7 @@
                     log( LogService.LOG_ERROR, "Cannot register Component", metadata, t );
 
                     // make sure the name is not reserved any more
-                    m_componentRegistry.unregisterComponent( metadata.getName() );
+                    m_componentRegistry.unregisterComponentHolder( metadata.getName() );
                 }
             }
         }
@@ -325,7 +325,7 @@
             }
             finally
             {
-                m_componentRegistry.unregisterComponent( holder.getComponentMetadata().getName() );
+                m_componentRegistry.unregisterComponentHolder( holder.getComponentMetadata().getName() );
             }
 
         }
@@ -498,7 +498,7 @@
             return ( ComponentHolder[] ) m_managers.toArray( new ComponentHolder[m_managers.size()] );
         }
 
-        if ( m_componentRegistry.getComponent( name ) != null )
+        if ( m_componentRegistry.getComponentHolder( name ) != null )
         {
             // otherwise just find it
             Iterator it = m_managers.iterator();
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java b/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
index 5b4f3c1..731a6f8 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
@@ -61,10 +61,10 @@
      * {@link ComponentHolder}.
      *
      * @see #checkComponentName(String)
-     * @see #registerComponent(String, ComponentHolder)
-     * @see #unregisterComponent(String)
+     * @see #registerComponentHolder(String, ComponentHolder)
+     * @see #unregisterComponentHolder(String)
      */
-    private final Map m_componentsByName;
+    private final Map m_componentHoldersByName;
 
     /**
      * Map of components by component ID. This map indexed by the component
@@ -92,7 +92,7 @@
 
     protected ComponentRegistry( BundleContext context )
     {
-        m_componentsByName = new HashMap();
+        m_componentHoldersByName = new HashMap();
         m_componentsById = new HashMap();
         m_componentCounter = -1;
 
@@ -233,12 +233,12 @@
     {
         // register the name if no registration for that name exists already
         final Object existingRegistration;
-        synchronized ( m_componentsByName )
+        synchronized ( m_componentHoldersByName )
         {
-            existingRegistration = m_componentsByName.get( name );
+            existingRegistration = m_componentHoldersByName.get( name );
             if ( existingRegistration == null )
             {
-                m_componentsByName.put( name, name );
+                m_componentHoldersByName.put( name, name );
             }
         }
 
@@ -280,18 +280,18 @@
      * @throws ComponentException if the name has not been reserved through
      *      {@link #checkComponentName(String)} yet.
      */
-    final void registerComponent( String name, ComponentHolder component )
+    final void registerComponentHolder( String name, ComponentHolder component )
     {
-        synchronized ( m_componentsByName )
+        synchronized ( m_componentHoldersByName )
         {
             // only register the component if there is a m_registration for it !
-            if ( !name.equals( m_componentsByName.get( name ) ) )
+            if ( !name.equals( m_componentHoldersByName.get( name ) ) )
             {
                 // this is not expected if all works ok
                 throw new ComponentException( "The component name '" + name + "' has already been registered." );
             }
 
-            m_componentsByName.put( name, component );
+            m_componentHoldersByName.put( name, component );
         }
     }
 
@@ -300,12 +300,12 @@
      * Returns the component registered under the given name or <code>null</code>
      * if no component is registered yet.
      */
-    public final ComponentHolder getComponent( String name )
+    public final ComponentHolder getComponentHolder( String name )
     {
         Object entry;
-        synchronized ( m_componentsByName )
+        synchronized ( m_componentHoldersByName )
         {
-            entry = m_componentsByName.get( name );
+            entry = m_componentHoldersByName.get( name );
         }
 
         // only return the entry if non-null and not a reservation
@@ -319,16 +319,31 @@
 
 
     /**
+     * Returns an array of all values currently stored in the component holders
+     * map. The entries in the array are either String types for component
+     * name reservations or {@link ComponentHolder} instances for actual
+     * holders of components.
+     */
+    private Object[] getComponentHolders()
+    {
+        synchronized ( m_componentHoldersByName )
+        {
+            return m_componentHoldersByName.values().toArray();
+        }
+    }
+
+
+    /**
      * Removes the component registered under that name. If no component is
      * yet registered but the name is reserved, it is unreserved.
      * <p>
      * After calling this method, the name can be reused by other components.
      */
-    final void unregisterComponent( String name )
+    final void unregisterComponentHolder( String name )
     {
-        synchronized ( m_componentsByName )
+        synchronized ( m_componentHoldersByName )
         {
-            m_componentsByName.remove( name );
+            m_componentHoldersByName.remove( name );
         }
     }
 
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationComponentRegistry.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationComponentRegistry.java
index 01976af..81e55a8 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationComponentRegistry.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationComponentRegistry.java
@@ -46,7 +46,6 @@
     // the service m_registration of the ConfigurationListener service
     private ServiceRegistration m_registration;
 
-
     public ConfigurationComponentRegistry( final BundleContext context )
     {
         super( context );
@@ -104,25 +103,32 @@
             final ConfigurationAdmin ca = ( ConfigurationAdmin ) bundleContext.getService( caRef );
             if ( ca != null )
             {
-                final Configuration[] factory = findFactoryConfigurations( ca, name );
-                if ( factory != null )
+                try
                 {
-                    for ( int i = 0; i < factory.length; i++ )
+                    final Configuration[] factory = findFactoryConfigurations( ca, name );
+                    if ( factory != null )
                     {
-                        final String pid = factory[i].getPid();
-                        final Dictionary props = getConfiguration( ca, pid, bundleLocation );
-                        holder.configurationUpdated( pid, props );
+                        for ( int i = 0; i < factory.length; i++ )
+                        {
+                            final String pid = factory[i].getPid();
+                            final Dictionary props = getConfiguration( ca, pid, bundleLocation );
+                            holder.configurationUpdated( pid, props );
+                        }
+                    }
+                    else
+                    {
+                        // check for configuration and configure the holder
+                        final Configuration singleton = findSingletonConfiguration( ca, name );
+                        if ( singleton != null )
+                        {
+                            final Dictionary props = getConfiguration( ca, name, bundleLocation );
+                            holder.configurationUpdated( name, props );
+                        }
                     }
                 }
-                else
+                finally
                 {
-                    // check for configuration and configure the holder
-                    final Configuration singleton = findSingletonConfiguration( ca, name );
-                    if ( singleton != null )
-                    {
-                        final Dictionary props = getConfiguration( ca, name, bundleLocation );
-                        holder.configurationUpdated( name, props );
-                    }
+                    bundleContext.ungetService( caRef );
                 }
             }
         }
@@ -141,11 +147,11 @@
         final ComponentHolder cm;
         if ( factoryPid == null )
         {
-            cm = getComponent( pid );
+            cm = getComponentHolder( pid );
         }
         else
         {
-            cm = getComponent( factoryPid );
+            cm = getComponentHolder( factoryPid );
         }
 
         if ( cm != null && !cm.getComponentMetadata().isConfigurationIgnored() )
