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 e98ca54..9bb7341 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
@@ -1307,12 +1307,6 @@
             return m_state;
         }
 
-        void ungetService( ImmediateComponentManager dcm )
-        {
-            throw new IllegalStateException("ungetService" + this);
-        }
-
-
         void enable( AbstractComponentManager acm )
         {
             log( acm, "enable" );
@@ -1429,11 +1423,6 @@
             doDeactivate( acm, reason, disable );
         }
 
-        void ungetService( ImmediateComponentManager dcm )
-        {
-            //do nothing, deactivate will unget all the services.
-        }
-
         void dispose( AbstractComponentManager acm, int reason )
         {
             acm.log( LogService.LOG_DEBUG, "Disposing component (reason: {0})", new Object[] { REASONS[ reason ] }, null );
@@ -1562,11 +1551,6 @@
             acm.changeState( Disposed.getInstance() );
         }
 
-        void ungetService( ImmediateComponentManager dcm )
-        {
-            //do nothing.  This can arise if component is deactivated concurrently with ungetService on a delayed component.
-        }
-
     }
 
     protected static abstract class Satisfied extends State
@@ -1635,15 +1619,6 @@
             return m_inst;
         }
 
-
-        void ungetService( ImmediateComponentManager dcm )
-        {
-            dcm.deleteComponent( ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
-            if ( dcm.enabled )
-            {
-                dcm.changeState( Registered.getInstance() );
-            }
-        }
     }
 
     /**
@@ -1668,10 +1643,6 @@
             return m_inst;
         }
 
-        void ungetService( ImmediateComponentManager dcm )
-        {
-            //do nothing.  This can arise if component is deactivated concurrently with ungetService on a delayed component.
-        }
     }
 
     /**
@@ -1722,12 +1693,6 @@
             return m_inst;
         }
 
-        void ungetService( ImmediateComponentManager dcm )
-        {
-            dcm.deleteComponent( ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
-            dcm.changeState( Registered.getInstance() );
-        }
-
         void deactivate( AbstractComponentManager acm, int reason, boolean disable )
         {
             acm.disposeInternal( reason );
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 edb4a77..d7ebc3e 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
@@ -837,7 +837,7 @@
                 {
                     if ( m_useCount.get() == 0 )
                     {
-                        Active.getInstance().ungetService( this );
+                        ungetService( );
                         unsetDependenciesCollected();
                     }
                 }
@@ -849,6 +849,15 @@
         }
     }
 
+    void ungetService( )
+    {
+        deleteComponent( ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
+        if ( isEnabled() )
+        {
+            changeState( Registered.getInstance() );
+        }
+    }
+
     private boolean keepInstances()
     {
         return getActivator() != null && getActivator().getConfiguration().keepInstances();
