diff --git a/scr/src/main/java/org/apache/felix/scr/impl/Activator.java b/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
index 8350ff4..e9389d3 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
@@ -117,6 +117,7 @@
         }
         if ( m_packageAdmin != null )
         {
+            log( LogService.LOG_INFO, m_bundle, "Stopping to restart with new globalExtender setting: " + globalExtender, null );
             //this really is a restart, not the initial start
             try
             {
@@ -129,6 +130,7 @@
         }
         try
         {
+            log( LogService.LOG_INFO, m_bundle, "Starting with globalExtender setting: " + globalExtender, null );
             super.start( context );
         }
         catch ( Exception e )
@@ -381,12 +383,14 @@
 
     @Override
     protected void debug(Bundle bundle, String msg) {
-        log( LogService.LOG_DEBUG, bundle, msg, null );
+        final String message = MessageFormat.format( msg + " bundle: {0}/{1}", bundle.getSymbolicName(), bundle.getBundleId() );
+        log( LogService.LOG_DEBUG, bundle, message, null );
     }
 
     @Override
     protected void warn(Bundle bundle, String msg, Throwable t) {
-        log( LogService.LOG_WARNING, bundle, msg, t );
+        final String message = MessageFormat.format( msg + " bundle: {0}/{1}", bundle.getSymbolicName(), bundle.getBundleId() );
+        log( LogService.LOG_WARNING, bundle, message, t );
     }
 
     @Override
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfiguration.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfiguration.java
index 1db5b0b..d7994d3 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfiguration.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ScrConfiguration.java
@@ -130,11 +130,8 @@
         managedService = ( ServiceRegistration<ManagedService> ) bundleContext.registerService("org.osgi.service.cm.ManagedService", new ScrManagedServiceServiceFactory(this),
             props);
         
-        if ( globalExtender == null)  //no config admin or no configuration
-        {
-            // configure from bundle context properties
-            configure( null );            
-        }
+        // configure from bundle context properties
+        configure( null, false );            
     }
 
     public void stop() {
@@ -153,51 +150,64 @@
     }
 
     // Called from the ScrManagedService.updated method to reconfigure
-    void configure( Dictionary<String, ?> config )
+    void configure( Dictionary<String, ?> config, boolean fromConfig )
     {
-        Boolean oldGlobalExtender = globalExtender;
-        if ( config == null )
+        Boolean newGlobalExtender;
+        Boolean oldGlobalExtender;
+        synchronized (this)
         {
-            if ( this.bundleContext == null )
+            if ( config == null )
             {
-                logLevel = LogService.LOG_ERROR;
-                factoryEnabled = false;
-                keepInstances = false;
-                infoAsService = false;
-                lockTimeout = DEFAULT_LOCK_TIMEOUT_MILLISECONDS;
-                stopTimeout = DEFAULT_STOP_TIMEOUT_MILLISECONDS;
-                globalExtender = false;
+                if (!fromConfig)
+                {
+                    if (this.bundleContext == null)
+                    {
+                        logLevel = LogService.LOG_ERROR;
+                        factoryEnabled = false;
+                        keepInstances = false;
+                        infoAsService = false;
+                        lockTimeout = DEFAULT_LOCK_TIMEOUT_MILLISECONDS;
+                        stopTimeout = DEFAULT_STOP_TIMEOUT_MILLISECONDS;
+                        newGlobalExtender = false;
+                    }
+                    else
+                    {
+                        logLevel = getDefaultLogLevel();
+                        factoryEnabled = getDefaultFactoryEnabled();
+                        keepInstances = getDefaultKeepInstances();
+                        infoAsService = getDefaultInfoAsService();
+                        lockTimeout = getDefaultLockTimeout();
+                        stopTimeout = getDefaultStopTimeout();
+                        newGlobalExtender = getDefaultGlobalExtender();
+                    }
+                }
+                else
+                {
+                    newGlobalExtender = this.globalExtender;
+                }
             }
             else
             {
-                logLevel = getDefaultLogLevel();
-                factoryEnabled = getDefaultFactoryEnabled();
-                keepInstances = getDefaultKeepInstances();
-                infoAsService = getDefaultInfoAsService();
-                lockTimeout = getDefaultLockTimeout();
-                stopTimeout = getDefaultStopTimeout();
-                globalExtender = getDefaultGlobalExtender();
+                logLevel = getLogLevel( config.get( PROP_LOGLEVEL ) );
+                factoryEnabled = VALUE_TRUE.equalsIgnoreCase( String.valueOf( config.get( PROP_FACTORY_ENABLED ) ) );
+                keepInstances = VALUE_TRUE.equalsIgnoreCase( String.valueOf( config.get( PROP_DELAYED_KEEP_INSTANCES ) ) );
+                infoAsService = VALUE_TRUE.equalsIgnoreCase( String.valueOf( config.get( PROP_INFO_SERVICE) ) );
+                Long timeout = ( Long ) config.get( PROP_LOCK_TIMEOUT );
+                lockTimeout = timeout == null? DEFAULT_LOCK_TIMEOUT_MILLISECONDS: timeout;
+                timeout = ( Long ) config.get( PROP_STOP_TIMEOUT );
+                stopTimeout = timeout == null? DEFAULT_STOP_TIMEOUT_MILLISECONDS: timeout;
+                newGlobalExtender = VALUE_TRUE.equalsIgnoreCase( String.valueOf( config.get( PROP_GLOBAL_EXTENDER) ) );
             }
+            if ( scrCommand != null )
+            {
+                scrCommand.update( infoAsService() );
+            }
+            oldGlobalExtender = this.globalExtender;
+            this.globalExtender = newGlobalExtender;
         }
-        else
+        if ( newGlobalExtender != oldGlobalExtender )
         {
-            logLevel = getLogLevel( config.get( PROP_LOGLEVEL ) );
-            factoryEnabled = VALUE_TRUE.equalsIgnoreCase( String.valueOf( config.get( PROP_FACTORY_ENABLED ) ) );
-            keepInstances = VALUE_TRUE.equalsIgnoreCase( String.valueOf( config.get( PROP_DELAYED_KEEP_INSTANCES ) ) );
-            infoAsService = VALUE_TRUE.equalsIgnoreCase( String.valueOf( config.get( PROP_INFO_SERVICE) ) );
-            Long timeout = ( Long ) config.get( PROP_LOCK_TIMEOUT );
-            lockTimeout = timeout == null? DEFAULT_LOCK_TIMEOUT_MILLISECONDS: timeout;
-            timeout = ( Long ) config.get( PROP_STOP_TIMEOUT );
-            stopTimeout = timeout == null? DEFAULT_STOP_TIMEOUT_MILLISECONDS: timeout;
-            globalExtender = VALUE_TRUE.equalsIgnoreCase( String.valueOf( config.get( PROP_GLOBAL_EXTENDER) ) );
-        }
-        if ( scrCommand != null )
-        {
-            scrCommand.update( infoAsService() );
-        }
-        if ( globalExtender != oldGlobalExtender )
-        {
-            activator.restart( globalExtender );
+            activator.restart( newGlobalExtender );
         }
     }
 
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedService.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedService.java
index d2973c9..de876d0 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedService.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedService.java
@@ -52,6 +52,6 @@
 
     public void updated(Dictionary<String, ?> properties) throws ConfigurationException
     {
-        this.scrConfiguration.configure(properties);
+        this.scrConfiguration.configure(properties, true);
     }
 }
