diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
index fe0bbc9..41069a8 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
@@ -187,6 +187,7 @@
         catch ( InterruptedException e )
         {
             Thread.currentThread().interrupt();
+            dumpThreads();
             //TODO this is so wrong
             throw new IllegalStateException( "Could not obtain lock (Reason: " + e + ")" );
         }
@@ -217,11 +218,11 @@
         try
         {
             String dump = new ThreadDump().call();
-            log( LogService.LOG_ERROR, dump, null );
+            log( LogService.LOG_DEBUG, dump, null );
         }
         catch ( Throwable t )
         {
-            log( LogService.LOG_ERROR, "Could not dump threads", t );
+            log( LogService.LOG_DEBUG, "Could not dump threads", t );
         }
     }
 
@@ -280,6 +281,7 @@
                 catch ( InterruptedException e )
                 {
                     Thread.currentThread().interrupt();
+                    dumpThreads();
                 }
             }
         }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
index 060840e..9475e70 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
@@ -188,6 +188,7 @@
         catch ( InterruptedException e )
         {
             Thread.currentThread().interrupt();
+            getComponentManager().dumpThreads();
             return null;
         }
         return null;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
index 8d9c1ca..60492d5 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
@@ -1638,7 +1638,7 @@
             {
                 if (!info.getOpenLatch().await( getLockTimeout(), TimeUnit.MILLISECONDS ))
                 {
-                    m_componentManager.log( LogService.LOG_WARNING,
+                    m_componentManager.log( LogService.LOG_ERROR,
                             "DependencyManager : invokeUpdatedMethod : timeout on open latch {0}",  new Object[] {getName()}, null );
                     m_componentManager.dumpThreads();
                 }
@@ -1646,6 +1646,8 @@
             catch ( InterruptedException e )
             {
                 Thread.currentThread().interrupt();
+                m_componentManager.dumpThreads();
+                //ignore
             }
             if ( !getServiceObject( m_bindMethods.getUpdated(), refPair ))
             {
@@ -1699,7 +1701,7 @@
                     {
                         if (!info.getCloseLatch().await( getLockTimeout(), TimeUnit.MILLISECONDS ) )
                         {
-                            m_componentManager.log( LogService.LOG_WARNING,
+                            m_componentManager.log( LogService.LOG_ERROR,
                                     "DependencyManager : invokeUnbindMethod : timeout on close latch {0}",  new Object[] {getName()}, null );
                             m_componentManager.dumpThreads();
                         }
@@ -1707,6 +1709,7 @@
                     catch ( InterruptedException e )
                     {
                         Thread.currentThread().interrupt();
+                        m_componentManager.dumpThreads();
                         //ignore
                     }
                 }
@@ -1724,7 +1727,9 @@
             }
             catch ( InterruptedException e )
             {
-                // TODO Auto-generated catch block
+                Thread.currentThread().interrupt();
+                m_componentManager.dumpThreads();
+                //ignore
             }
 
             if (refPair == null)
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
index b52fe01..fc4371c 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
@@ -284,7 +284,7 @@
             // containing the exception with the Log Service and activation fails
             for ( DependencyManager md: getReversedDependencyManagers() )
             {
-                md.close( implementationObject, null );
+                md.close( implementationObject, componentContext.getEdgeInfo( md ) );
             }
 
             // make sure the implementation object is not available
@@ -295,6 +295,8 @@
         else
         {
             componentContext.setImplementationAccessible( true );
+            m_circularReferences.remove();
+            //this may cause a getService as properties now match a filter.
             setServiceProperties( result );
         }
 
@@ -718,6 +720,8 @@
     {
         if (m_circularReferences.get() != null)
         {
+            log( LogService.LOG_ERROR,  "Circular reference detected, getService returning null", null );
+            dumpThreads();
             return false;             
         }
         m_circularReferences.set( Boolean.TRUE );
@@ -775,6 +779,7 @@
         }
         finally
         {
+            //normally this will have been done after object becomes accessible.  This is double-checking.
             m_circularReferences.remove();
         }
     }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java
index 42c5465..be5c514 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java
@@ -181,6 +181,7 @@
                     Thread.currentThread().interrupt();
                     log( LogService.LOG_ERROR, "Interrupted exception waiting for reg change to complete {0}", new Object[]
                             {rsw.getRegState()}, null);
+                    reportTimeout();
                 }
             }
         }
