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 f3cf693..9ea1d8a 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
@@ -24,7 +24,6 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.FutureTask;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.felix.scr.impl.config.ScrConfiguration;
@@ -187,7 +186,7 @@
 
         public void destroy() {
             try {
-                this.started.await(60, TimeUnit.SECONDS);
+                this.started.await(m_configuration.stopTimeout(), TimeUnit.MILLISECONDS);
             } catch (InterruptedException e) {
                 log( LogService.LOG_WARNING, m_context.getBundle(), "The wait for bundle {0}/{1} being started before destruction has been interrupted.",
                         new Object[] {bundle.getSymbolicName(), bundle.getBundleId()}, e );
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 46a1f51..1f96d31 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
@@ -63,10 +63,14 @@
     public static final String PROP_DELAYED_KEEP_INSTANCES = "ds.delayed.keepInstances";
 
     public static final String PROP_INFO_SERVICE = "ds.info.service";
-    
+
     public static final String PROP_LOCK_TIMEOUT = "ds.lock.timeout.milliseconds";
-    
+
+    public static final String PROP_STOP_TIMEOUT = "ds.stop.timeout.milliseconds";
+
     public static final long DEFAULT_LOCK_TIMEOUT_MILLISECONDS = 5000;
+
+    public static final long DEFAULT_STOP_TIMEOUT_MILLISECONDS = 60000;
     
     public static final String PROP_LOGLEVEL = "ds.loglevel";
 
@@ -92,6 +96,8 @@
     
     private long lockTimeout = DEFAULT_LOCK_TIMEOUT_MILLISECONDS;
 
+    private long stopTimeout = DEFAULT_STOP_TIMEOUT_MILLISECONDS;
+
     private BundleContext bundleContext;
 
     private ServiceRegistration managedService;
@@ -146,6 +152,7 @@
                 keepInstances = false;
                 infoAsService = false;
                 lockTimeout = DEFAULT_LOCK_TIMEOUT_MILLISECONDS;
+                stopTimeout = DEFAULT_STOP_TIMEOUT_MILLISECONDS;
             }
             else
             {
@@ -154,6 +161,7 @@
                 keepInstances = getDefaultKeepInstances();
                 infoAsService = getDefaultInfoAsService();
                 lockTimeout = getDefaultLockTimeout();
+                stopTimeout = getDefaultStopTimeout();
             }
         }
         else
@@ -164,6 +172,8 @@
             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;
         }
         if ( scrCommand != null )
         {
@@ -202,6 +212,11 @@
         return lockTimeout;
     }
 
+    public long stopTimeout()
+    {
+        return stopTimeout;
+    }
+
     private boolean getDefaultFactoryEnabled()
     {
         return VALUE_TRUE.equals( bundleContext.getProperty( PROP_FACTORY_ENABLED ) );
@@ -234,6 +249,16 @@
         return Long.parseLong( val );
     }
 
+    private long getDefaultStopTimeout()
+    {
+        String val = bundleContext.getProperty( PROP_STOP_TIMEOUT);
+        if ( val == null)
+        {
+            return DEFAULT_STOP_TIMEOUT_MILLISECONDS;
+        }
+        return Long.parseLong( val );
+    }
+
 
     private int getLogLevel( final Object levelObject )
     {
