diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java
index 21cbf0a..4fcee90 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java
@@ -69,6 +69,12 @@
      * @param pid The PID of the configuration used to configure the component
      */
     void configurationUpdated( String pid, Dictionary<String, Object> props );
+    
+    /**
+     * Has this component holder ever been configured?  Used to avoid double update during startup
+     * @return true if configurationUpdated has ever been called on this holder.
+     */
+    boolean isConfigured();
 
     /**
      * Returns all <code>Component</code> instances held by this holder.
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationSupport.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationSupport.java
index ea3d43c..4dd6e5b 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationSupport.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationSupport.java
@@ -74,7 +74,7 @@
     {
 
         // 112.7 configure unless configuration not required
-        if (!holder.getComponentMetadata().isConfigurationIgnored())
+        if (!holder.isConfigured() && !holder.getComponentMetadata().isConfigurationIgnored())
         {
             final BundleContext bundleContext = holder.getActivator().getBundleContext();
             final String bundleLocation = bundleContext.getBundle().getLocation();
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ImmediateComponentHolder.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ImmediateComponentHolder.java
index 11fa58e..7c452b7 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ImmediateComponentHolder.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ImmediateComponentHolder.java
@@ -105,6 +105,8 @@
      */
     private volatile boolean m_enabled;
     private final ComponentMethods m_componentMethods;
+    
+    private volatile boolean m_configured;
 
 
     public ImmediateComponentHolder( final BundleComponentActivator activator, final ComponentMetadata metadata )
@@ -268,11 +270,12 @@
      * this case a new component is created, configured and stored in the map</li>
      * </ul>
      */
-    public void configurationUpdated( final String pid, final Dictionary props )
+    public void configurationUpdated( final String pid, final Dictionary<String, Object> props )
     {
         log( LogService.LOG_DEBUG, "ImmediateComponentHolder configuration updated for pid {0} with properties {1}",
                 new Object[] {pid, props}, null);
 
+        m_configured = true;
         // component to update or create
         final ImmediateComponentManager icm;
         final String message;
@@ -356,6 +359,10 @@
         }
     }
 
+    public boolean isConfigured()
+    {
+        return m_configured;
+    }
 
     public Component[] getComponents()
     {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
index 40b6c5b..6cb1b56 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
@@ -78,11 +78,16 @@
     private volatile Dictionary<String, Object> m_configuration;
     
     /**
-     * Flag telling if our component factory is configured from config admin.
+     * Flag telling if our component factory is currently configured from config admin.
      * We are configured when configuration policy is required and we have received the
      * config admin properties, or when configuration policy is optional or ignored.
      */
-    public volatile boolean m_isConfigured;
+    private volatile boolean m_hasConfiguration;
+    
+    /**
+     * whether this holder has ever been configured.
+     */
+    private volatile boolean m_isConfigured;
 
     public ComponentFactoryImpl( BundleComponentActivator activator, ComponentMetadata metadata )
     {
@@ -202,7 +207,7 @@
 
     public boolean hasConfiguration()
     {
-        return m_isConfigured;
+        return m_hasConfiguration;
     }
 
 
@@ -314,14 +319,14 @@
             log( LogService.LOG_DEBUG, "Handling configuration removal", null );
 
             // nothing to do if there is no configuration currently known.
-            if ( !m_isConfigured )
+            if ( !m_hasConfiguration )
             {
                 log( LogService.LOG_DEBUG, "ignoring configuration removal: not currently configured", null );
                 return;
             }
 
             // So far, we were configured: clear the current configuration.
-            m_isConfigured = false;
+            m_hasConfiguration = false;
             m_configuration = new Hashtable();
 
             log( LogService.LOG_DEBUG, "Current component factory state={0}", new Object[] {getState()}, null );
@@ -343,6 +348,7 @@
 
     public void configurationUpdated( String pid, Dictionary<String, Object> configuration )
     {
+        m_isConfigured = true;
         if ( pid.equals( getComponentMetadata().getConfigurationPid() ) )
         {
             log( LogService.LOG_INFO, "Configuration PID updated for Component Factory", null );
@@ -357,7 +363,7 @@
             m_configuration = configuration;
 
             // We are now configured from config admin.
-            m_isConfigured = true;
+            m_hasConfiguration = true;
 
             log( LogService.LOG_INFO, "Current ComponentFactory state={0}", new Object[]
                     {getState()}, null );
@@ -398,6 +404,11 @@
     }
 
 
+    public boolean isConfigured()
+    {
+        return m_isConfigured;
+    }
+    
     public Component[] getComponents()
     {
         List<AbstractComponentManager> cms = getComponentList();
