diff --git a/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java b/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
index 5ad110b..4e20e79 100644
--- a/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
+++ b/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
@@ -669,7 +669,7 @@
         private final SimpleDateFormat m_sdf = new SimpleDateFormat( "HH:mm:ss,S" );
         private final static PrintStream m_out = new PrintStream( new BufferedOutputStream( new FileOutputStream(
             FileDescriptor.err ), 128 ) );
-        private final List<String> m_warnings = Collections.synchronizedList( new ArrayList<String>() );//<String>
+        private final List<String> m_warnings = Collections.synchronizedList( new ArrayList<String>() );
         private LinkedBlockingQueue<LogEntry> m_logQueue = new LinkedBlockingQueue<LogEntry>();
         private volatile Thread m_logThread;
         private volatile PrintStream m_realOut;
diff --git a/scr/src/test/java/org/apache/felix/scr/integration/Felix3680_2Test.java b/scr/src/test/java/org/apache/felix/scr/integration/Felix3680_2Test.java
index b3ca444..701508e 100644
--- a/scr/src/test/java/org/apache/felix/scr/integration/Felix3680_2Test.java
+++ b/scr/src/test/java/org/apache/felix/scr/integration/Felix3680_2Test.java
@@ -63,7 +63,7 @@
 
 
     @Test
-    public void test_concurrent_injetion_with_bundleContext()
+    public void test_concurrent_injection_with_bundleContext()
     {
         final Component main = findComponentByName( "org.apache.felix.scr.integration.components.felix3680_2.Main" );
         TestCase.assertNotNull( main );
@@ -75,10 +75,6 @@
         for ( Iterator it = log.foundWarnings().iterator(); it.hasNext(); )
         {
             String message = ( String ) it.next();
-            if ( message.startsWith( "Performed " ) && message.endsWith( " tests." ) )
-            {
-                continue;
-            }
             TestCase.fail( "unexpected warning or error logged: " + message );
         }
     }
diff --git a/scr/src/test/java/org/apache/felix/scr/integration/components/felix3680_2/Main.java b/scr/src/test/java/org/apache/felix/scr/integration/components/felix3680_2/Main.java
index 57533a1..273e79c 100644
--- a/scr/src/test/java/org/apache/felix/scr/integration/components/felix3680_2/Main.java
+++ b/scr/src/test/java/org/apache/felix/scr/integration/components/felix3680_2/Main.java
@@ -19,6 +19,9 @@
 package org.apache.felix.scr.integration.components.felix3680_2;
 
 
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadInfo;
+import java.lang.management.ThreadMXBean;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
@@ -27,6 +30,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.felix.scr.ScrService;
+import org.apache.felix.scr.impl.manager.ThreadDump;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
@@ -220,6 +224,7 @@
                 {
                     System.out.println( "Did not get A injected timely ... see logs.txt" );
                     m_logService.log( LogService.LOG_ERROR, "enableLatch TIMEOUT" );
+                    m_logService.log(LogService.LOG_ERROR, dumpThreads());
                     dumpA();
                     System.exit( 1 );
                 }
@@ -235,6 +240,7 @@
                 {
                     System.out.println( "Could not disable components timely ... see logs.txt" );
                     m_logService.log( LogService.LOG_ERROR, "disableLatch TIMEOUT" );
+                    m_logService.log(LogService.LOG_ERROR, dumpThreads());
                     dumpA();
                     System.exit( 1 );
                 }
@@ -246,11 +252,29 @@
             ++loop;
             if ( loop % 100 == 0 )
             {
-                m_logService.log( LogService.LOG_WARNING, "Performed " + loop + " tests." );
+                m_logService.log( LogService.LOG_INFO, "Performed " + loop + " tests." );
             }
         }
     }
 
+    private String dumpThreads()
+    {
+        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
+        StringBuffer b = new StringBuffer( "Thread dump\n" );
+        ThreadInfo[] infos = threadMXBean.dumpAllThreads( threadMXBean.isObjectMonitorUsageSupported(), threadMXBean.isSynchronizerUsageSupported() );
+        for ( int i = 0; i < infos.length; i++ )
+        {
+            ThreadInfo ti = infos[i];
+            b.append( "\n\nThreadId: " ).append( ti.getThreadId() ).append( " : name: " ).append( ti.getThreadName() ).append( " State: " ).append( ti.getThreadState() );
+            b.append( "\n  LockInfo: " ).append( ti.getLockInfo() ).append( " LockOwnerId: " ).append( ti.getLockOwnerId() ).append( " LockOwnerName: ").append( ti.getLockOwnerName() );
+            StackTraceElement[] stackTrace = ti.getStackTrace();
+            for (int j = 0; j < stackTrace.length; j++ )
+            {
+                b.append( "\n  " ).append( stackTrace[j] );
+            }
+        }
+        return b.toString();
+    }
 
     private void dumpA()
     {
