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 ebfb0d6..9ab6180 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
@@ -51,7 +51,7 @@
     static final String PACKAGEADMIN_CLASS = "org.osgi.service.packageadmin.PackageAdmin";
 
     // Our configuration from bundle context properties and Config Admin
-    private static ScrConfiguration m_configuration = new ScrConfiguration();
+    private static ScrConfiguration m_configuration;
 
     // this bundle's context
     private static BundleContext m_context;
@@ -75,6 +75,7 @@
     private ComponentActorThread m_componentActor;
 
     public Activator() {
+        m_configuration = new ScrConfiguration( this );
         setSynchronous(true);
     }
 
@@ -89,20 +90,53 @@
     {
         m_context = context;
         m_bundle = context.getBundle();
-        super.start(context);
-    }
-
-    protected void doStart() throws Exception {
         // require the log service
         m_logService = new ServiceTracker( m_context, LOGSERVICE_CLASS, null );
         m_logService.open();
+        // get the configuration
+        m_configuration.start( m_context ); //this will call restart, which calls super.start.
+    }
+    
+    public void restart( boolean globalExtender )
+    {
+        BundleContext context;
+        if ( globalExtender )
+        {
+            context = m_context.getBundle( 0 ).getBundleContext();
+        }
+        else
+        {
+            context = m_context;
+        }
+        if ( m_packageAdmin != null )
+        {
+            //this really is a restart, not the initial start
+            try
+            {
+                super.stop(context);
+            }
+            catch ( Exception e )
+            {
+                log( LogService.LOG_ERROR, m_bundle, "Exception stopping during restart", e );
+            }
+        }
+        try
+        {
+            super.start( context );
+        }
+        catch ( Exception e )
+        {
+            log( LogService.LOG_ERROR, m_bundle, "Exception starting during restart", e );
+        }
+        
+    }
+
+    protected void doStart() throws Exception {
 
         // prepare component registry
         m_componentBundles = new HashMap<Long, BundleComponentActivator>();
         m_componentRegistry = new ComponentRegistry( m_context );
 
-        // get the configuration
-        m_configuration.start( m_context );
 
         // log SCR startup
         log( LogService.LOG_INFO, m_bundle, " Version = {0}",
@@ -120,6 +154,13 @@
         ScrCommand scrCommand = ScrCommand.register(m_context, m_componentRegistry, m_configuration);
         m_configuration.setScrCommand( scrCommand );
     }
+    
+    public void stop(BundleContext context) throws Exception
+    {
+        super.stop(context);
+        m_configuration.stop();
+        m_configuration = null;
+    }
 
 
     /**
@@ -349,7 +390,7 @@
      */
     public static boolean isLogEnabled( int level )
     {
-        return m_configuration.getLogLevel() >= level;
+        return m_configuration == null || m_configuration.getLogLevel() >= level;
     }
 
     /**
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 1f96d31..8c4dd04 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
@@ -22,10 +22,12 @@
 import java.util.Dictionary;
 import java.util.Hashtable;
 
+import org.apache.felix.scr.impl.Activator;
 import org.apache.felix.scr.impl.ScrCommand;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cm.ManagedService;
 import org.osgi.service.log.LogService;
 
 
@@ -85,6 +87,10 @@
     private static final String PROP_SHOWTRACE = "ds.showtrace";
 
     private static final String PROP_SHOWERRORS = "ds.showerrors";
+    
+    public static final String PROP_GLOBAL_EXTENDER="ds.global.extender";
+    
+    private final Activator activator;
 
     private int logLevel;
 
@@ -97,32 +103,38 @@
     private long lockTimeout = DEFAULT_LOCK_TIMEOUT_MILLISECONDS;
 
     private long stopTimeout = DEFAULT_STOP_TIMEOUT_MILLISECONDS;
+    
+    private Boolean globalExtender;
 
     private BundleContext bundleContext;
 
-    private ServiceRegistration managedService;
+    private ServiceRegistration<ManagedService> managedService;
     
     private ScrCommand scrCommand;
 
-    public ScrConfiguration( )
+    public ScrConfiguration( Activator activator )
     {
-        // default configuration
-        configure( null );
+        this.activator = activator;
     }
 
-    public void start(final BundleContext bundleContext){
+    @SuppressWarnings("unchecked")
+    public void start(final BundleContext bundleContext) 
+    {
         this.bundleContext = bundleContext;
 
-        // reconfigure from bundle context properties
-        configure( null );
-
         // listen for Configuration Admin configuration
-        Dictionary props = new Hashtable();
+        Dictionary<String, Object> props = new Hashtable<String, Object>();
         props.put(Constants.SERVICE_PID, PID);
         props.put(Constants.SERVICE_DESCRIPTION, "SCR Configurator");
         props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
-        managedService = bundleContext.registerService("org.osgi.service.cm.ManagedService", new ScrManagedServiceServiceFactory(this),
+        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 );            
+        }
     }
 
     public void stop() {
@@ -141,8 +153,9 @@
     }
 
     // Called from the ScrManagedService.updated method to reconfigure
-    void configure( Dictionary config )
+    void configure( Dictionary<String, ?> config )
     {
+        Boolean oldGlobalExtender = globalExtender;
         if ( config == null )
         {
             if ( this.bundleContext == null )
@@ -153,6 +166,7 @@
                 infoAsService = false;
                 lockTimeout = DEFAULT_LOCK_TIMEOUT_MILLISECONDS;
                 stopTimeout = DEFAULT_STOP_TIMEOUT_MILLISECONDS;
+                globalExtender = false;
             }
             else
             {
@@ -162,6 +176,7 @@
                 infoAsService = getDefaultInfoAsService();
                 lockTimeout = getDefaultLockTimeout();
                 stopTimeout = getDefaultStopTimeout();
+                globalExtender = getDefaultGlobalExtender();
             }
         }
         else
@@ -174,11 +189,16 @@
             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 );
+        }
     }
 
     /**
@@ -260,6 +280,11 @@
     }
 
 
+    private boolean getDefaultGlobalExtender()
+    {
+        return VALUE_TRUE.equalsIgnoreCase( bundleContext.getProperty( PROP_GLOBAL_EXTENDER) );
+    }
+
     private int getLogLevel( final Object levelObject )
     {
         if ( levelObject != null )
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 d64f88c..d2973c9 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
@@ -50,7 +50,7 @@
         this.scrConfiguration = scrConfiguration;
     }
 
-    public void updated(Dictionary properties) throws ConfigurationException
+    public void updated(Dictionary<String, ?> properties) throws ConfigurationException
     {
         this.scrConfiguration.configure(properties);
     }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java
index ac9e27a..9bc0281 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java
@@ -99,7 +99,7 @@
                     + "Declarative Services specifications suggests that instances of delayed components are disposed off "
                     + "if there is not used any longer. Setting this flag causes the components to not be disposed off "
                     + "and thus prevent them from being constantly recreated if often used. Examples of such components "
-                    + "may be EventHandler services. The default is to dispose off unused components.", this
+                    + "may be EventHandler services. The default is to dispose of unused components.", this
                     .getScrConfiguration().keepInstances() ) );
 
         adList.add( new AttributeDefinitionImpl(
@@ -116,6 +116,20 @@
                 new String[] { String.valueOf(this.getScrConfiguration().lockTimeout())}, 
                 0, null, null) );
 
+        adList.add( new AttributeDefinitionImpl(
+                ScrConfiguration.PROP_STOP_TIMEOUT,
+                "Stop timeout milliseconds",
+                "How long stopping a bundle is waited for before continuing due to suspected deadlock", 
+                AttributeDefinition.LONG,
+                new String[] { String.valueOf(this.getScrConfiguration().stopTimeout())}, 
+                0, null, null) );
+
+        adList.add( new AttributeDefinitionImpl(
+                ScrConfiguration.PROP_GLOBAL_EXTENDER,
+                "Global Extender",
+                "Whether to extend all bundles whether or not visible to this bundle.", 
+                false ) );
+
         return new ObjectClassDefinition()
         {
 
