diff --git a/scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java
index faa0d17..00499c8 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java
@@ -69,7 +69,7 @@
         m_state = STATE_DISABLED;
         m_dependencyManagers = new ArrayList();
 
-        getActivator().log( LogService.LOG_DEBUG, "Component created", m_componentMetadata, null );
+        log( LogService.LOG_DEBUG, "Component created", m_componentMetadata, null );
     }
 
 
@@ -147,8 +147,7 @@
      */
     public final void reconfigure()
     {
-        getActivator().log( LogService.LOG_DEBUG, "Deactivating and Activating to reconfigure", m_componentMetadata,
-            null );
+        log( LogService.LOG_DEBUG, "Deactivating and Activating to reconfigure", m_componentMetadata, null );
         reactivate();
     }
 
@@ -259,7 +258,8 @@
     {
         if ( m_dependencyManagers != null && m_dependencyManagers.size() > 0 )
         {
-            return (org.apache.felix.scr.Reference[] ) m_dependencyManagers.toArray( new Reference[m_dependencyManagers.size()] );
+            return ( org.apache.felix.scr.Reference[] ) m_dependencyManagers
+                .toArray( new Reference[m_dependencyManagers.size()] );
         }
 
         return null;
@@ -310,17 +310,16 @@
 
         if ( getState() == STATE_DESTROYED )
         {
-            getActivator().log( LogService.LOG_ERROR, "Destroyed Component cannot be enabled", m_componentMetadata,
-                null );
+            log( LogService.LOG_ERROR, "Destroyed Component cannot be enabled", m_componentMetadata, null );
             return;
         }
         else if ( getState() != STATE_DISABLED )
         {
-            getActivator().log( LogService.LOG_DEBUG, "Component is already enabled", m_componentMetadata, null );
+            log( LogService.LOG_DEBUG, "Component is already enabled", m_componentMetadata, null );
             return;
         }
 
-        getActivator().log( LogService.LOG_DEBUG, "Enabling component", m_componentMetadata, null );
+        log( LogService.LOG_DEBUG, "Enabling component", m_componentMetadata, null );
 
         try
         {
@@ -342,14 +341,14 @@
             // enter enabled state before trying to activate
             setState( STATE_ENABLED );
 
-            getActivator().log( LogService.LOG_DEBUG, "Component enabled", m_componentMetadata, null );
+            log( LogService.LOG_DEBUG, "Component enabled", m_componentMetadata, null );
 
             // immediately activate the compopnent, no need to schedule again
             activateInternal();
         }
         catch ( Exception ex )
         {
-            getActivator().log( LogService.LOG_ERROR, "Failed enabling Component", m_componentMetadata, ex );
+            log( LogService.LOG_ERROR, "Failed enabling Component", m_componentMetadata, ex );
 
             // ensure we get back to DISABLED state
             // immediately disable, no need to schedule again
@@ -384,13 +383,13 @@
             // we cannot activate if the component activator is shutting down
             if ( !isActive() )
             {
-                getActivator().log( LogService.LOG_DEBUG,
-                    "Component cannot be activated because the Activator is being disposed", m_componentMetadata, null );
+                log( LogService.LOG_DEBUG, "Component cannot be activated because the Activator is being disposed",
+                    m_componentMetadata, null );
                 setState( STATE_UNSATISFIED );
                 return;
             }
 
-            getActivator().log( LogService.LOG_DEBUG, "Activating component", m_componentMetadata, null );
+            log( LogService.LOG_DEBUG, "Activating component", m_componentMetadata, null );
 
             // Before creating the implementation object, we are going to
             // test if all the mandatory dependencies are satisfied
@@ -407,8 +406,7 @@
                 if ( !dm.isSatisfied() )
                 {
                     // at least one dependency is not satisfied
-                    getActivator().log( LogService.LOG_INFO, "Dependency not satisfied: " + dm.getName(),
-                        m_componentMetadata, null );
+                    log( LogService.LOG_INFO, "Dependency not satisfied: " + dm.getName(), m_componentMetadata, null );
                     setState( STATE_UNSATISFIED );
                 }
 
@@ -427,7 +425,7 @@
             if ( !createComponent() )
             {
                 // component creation failed, not active now
-                getActivator().log( LogService.LOG_ERROR, "Component instance could not be created, activation failed",
+                log( LogService.LOG_ERROR, "Component instance could not be created, activation failed",
                     m_componentMetadata, null );
 
                 // set state to unsatisfied
@@ -449,13 +447,13 @@
         try
         {
             m_serviceRegistration = registerComponentService();
-            getActivator().log( LogService.LOG_DEBUG, "Component activated", m_componentMetadata, null );
+            log( LogService.LOG_DEBUG, "Component activated", m_componentMetadata, null );
         }
         catch ( IllegalStateException ise )
         {
             // thrown by service registration if the bundle is stopping
             // we just log this at debug level but ignore it
-            getActivator().log( LogService.LOG_DEBUG, "Component activation failed while registering the service",
+            log( LogService.LOG_DEBUG, "Component activation failed while registering the service",
                 m_componentMetadata, ise );
         }
 
@@ -483,7 +481,7 @@
             return;
         }
 
-        getActivator().log( LogService.LOG_DEBUG, "Deactivating component", m_componentMetadata, null );
+        log( LogService.LOG_DEBUG, "Deactivating component", m_componentMetadata, null );
 
         // 0.- Remove published services from the registry
         unregisterComponentService();
@@ -498,7 +496,7 @@
         // reset to state UNSATISFIED
         setState( STATE_UNSATISFIED );
 
-        getActivator().log( LogService.LOG_DEBUG, "Component deactivated", m_componentMetadata, null );
+        log( LogService.LOG_DEBUG, "Component deactivated", m_componentMetadata, null );
     }
 
 
@@ -510,7 +508,7 @@
         // deactivate first, this does nothing if not active/registered/factory
         deactivateInternal();
 
-        getActivator().log( LogService.LOG_DEBUG, "Disabling component", m_componentMetadata, null );
+        log( LogService.LOG_DEBUG, "Disabling component", m_componentMetadata, null );
 
         // close all service listeners now, they are recreated on enable
         // Stop the dependency managers to listen to events...
@@ -525,7 +523,7 @@
         // we are now disabled, ready for re-enablement or complete destroyal
         setState( STATE_DISABLED );
 
-        getActivator().log( LogService.LOG_DEBUG, "Component disabled", m_componentMetadata, null );
+        log( LogService.LOG_DEBUG, "Component disabled", m_componentMetadata, null );
     }
 
 
@@ -543,7 +541,7 @@
         // this component must not be used any more
         setState( STATE_DESTROYED );
 
-        getActivator().log( LogService.LOG_DEBUG, "Component disposed", m_componentMetadata, null );
+        log( LogService.LOG_DEBUG, "Component disposed", m_componentMetadata, null );
 
         // release references (except component metadata for logging purposes)
         m_activator = null;
@@ -615,7 +613,7 @@
     {
         if ( getComponentMetadata().getServiceMetadata() != null )
         {
-            getActivator().log( LogService.LOG_DEBUG, "registering services", getComponentMetadata(), null );
+            log( LogService.LOG_DEBUG, "registering services", getComponentMetadata(), null );
 
             // get a copy of the component properties as service properties
             Dictionary serviceProperties = copyTo( null, getProperties() );
@@ -635,7 +633,7 @@
             m_serviceRegistration.unregister();
             m_serviceRegistration = null;
 
-            getActivator().log( LogService.LOG_DEBUG, "unregistering the services", getComponentMetadata(), null );
+            log( LogService.LOG_DEBUG, "unregistering the services", getComponentMetadata(), null );
         }
     }
 
@@ -648,6 +646,16 @@
     }
 
 
+    void log( int level, String message, ComponentMetadata metadata, Throwable ex )
+    {
+        BundleComponentActivator activator = getActivator();
+        if ( activator != null )
+        {
+            activator.log( level, message, metadata, ex );
+        }
+    }
+
+
     /**
      * Returns <code>true</code> if this instance has not been disposed off
      * yet and the BundleComponentActivator is still active. If the Bundle
@@ -755,7 +763,7 @@
     **/
     protected synchronized void setState( int newState )
     {
-        getActivator().log( LogService.LOG_DEBUG,
+        log( LogService.LOG_DEBUG,
             "State transition : " + stateToString( m_state ) + " -> " + stateToString( newState ), m_componentMetadata,
             null );
 
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java
index 52c2640..f8ca2d1 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java
@@ -82,7 +82,7 @@
 
     protected ServiceRegistration registerComponentService()
     {
-        getActivator().log( LogService.LOG_DEBUG, "registering component factory", getComponentMetadata(), null );
+        log( LogService.LOG_DEBUG, "registering component factory", getComponentMetadata(), null );
 
         Dictionary serviceProperties = getProperties();
         return getActivator().getBundleContext().registerService( new String[]
@@ -162,8 +162,8 @@
             ComponentManager cm = ( ComponentManager ) m_configuredServices.remove( pid );
             if ( cm != null )
             {
-                getActivator().log( LogService.LOG_DEBUG, "Disposing component after configuration deletion",
-                    getComponentMetadata(), null );
+                log( LogService.LOG_DEBUG, "Disposing component after configuration deletion", getComponentMetadata(),
+                    null );
 
                 disposeComponentManager( cm );
             }
@@ -201,7 +201,7 @@
         {
             ( ( ImmediateComponentManager ) cm ).setFactoryProperties( configuration );
         }
-        
+
         // enable synchronously or asynchronously depending on the flag
         if ( cm instanceof AbstractComponentManager )
         {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java
index 38c8477..9529a85 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java
@@ -73,9 +73,8 @@
 
     public Object getService( Bundle arg0, ServiceRegistration arg1 )
     {
-        getActivator().log( LogService.LOG_DEBUG, "DelayedComponentServiceFactory.getService()",
-            getComponentMetadata(), null );
-        
+        log( LogService.LOG_DEBUG, "DelayedComponentServiceFactory.getService()", getComponentMetadata(), null );
+
         // When the getServiceMethod is called, the implementation object must be created
         // unless another bundle has already retrievd it
 
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java b/scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java
index 258d9b9..a842320 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java
@@ -143,10 +143,9 @@
         // ignore the service, if it does not match the target filter
         if ( !targetFilterMatch( reference ) )
         {
-            m_componentManager.getActivator().log( LogService.LOG_DEBUG,
-                    "Dependency Manager: Ignoring added Service for " + m_dependencyMetadata.getName()
-                        + " : does not match target filter " + getTarget(), m_componentManager.getComponentMetadata(),
-                    null );
+            m_componentManager.log( LogService.LOG_DEBUG, "Dependency Manager: Ignoring added Service for "
+                + m_dependencyMetadata.getName() + " : does not match target filter " + getTarget(), m_componentManager
+                .getComponentMetadata(), null );
             return;
         }
 
@@ -157,9 +156,9 @@
         // by adding this service, try to activate
         if ( m_componentManager.getState() == AbstractComponentManager.STATE_UNSATISFIED )
         {
-            m_componentManager.getActivator().log( LogService.LOG_INFO,
-                "Dependency Manager: Service " + m_dependencyMetadata.getName() + " registered, trying to activate",
-                m_componentManager.getComponentMetadata(), null );
+            m_componentManager.log( LogService.LOG_INFO, "Dependency Manager: Service "
+                + m_dependencyMetadata.getName() + " registered, trying to activate", m_componentManager
+                .getComponentMetadata(), null );
 
             m_componentManager.activate();
         }
@@ -175,10 +174,9 @@
                 // only reactivate if the service has an influence on binding
                 if ( m_dependencyMetadata.isMultiple() || !isBound() )
                 {
-                    m_componentManager.getActivator().log(
-                        LogService.LOG_DEBUG,
-                        "Dependency Manager: Service " + m_dependencyMetadata.getName()
-                            + " registered, reactivate component", m_componentManager.getComponentMetadata(), null );
+                    m_componentManager.log( LogService.LOG_DEBUG, "Dependency Manager: Service "
+                        + m_dependencyMetadata.getName() + " registered, reactivate component", m_componentManager
+                        .getComponentMetadata(), null );
 
                     m_componentManager.reactivate();
                 }
@@ -212,10 +210,9 @@
         // ignore the service, if it does not match the target filter
         if ( !targetFilterMatch( reference ) )
         {
-            m_componentManager.getActivator().log( LogService.LOG_DEBUG,
-                    "Dependency Manager: Ignoring removed Service for " + m_dependencyMetadata.getName()
-                        + " : does not match target filter " + getTarget(), m_componentManager.getComponentMetadata(),
-                    null );
+            m_componentManager.log( LogService.LOG_DEBUG, "Dependency Manager: Ignoring removed Service for "
+                + m_dependencyMetadata.getName() + " : does not match target filter " + getTarget(), m_componentManager
+                .getComponentMetadata(), null );
             return;
         }
 
@@ -251,17 +248,15 @@
             {
                 try
                 {
-                    m_componentManager.getActivator().log(
-                        LogService.LOG_DEBUG,
-                        "Dependency Manager: Static dependency on " + m_dependencyMetadata.getName() + "/"
-                            + m_dependencyMetadata.getInterface() + " is broken",
+                    m_componentManager.log( LogService.LOG_DEBUG, "Dependency Manager: Static dependency on "
+                        + m_dependencyMetadata.getName() + "/" + m_dependencyMetadata.getInterface() + " is broken",
                         m_componentManager.getComponentMetadata(), null );
                     m_componentManager.reactivate();
                 }
                 catch ( Exception ex )
                 {
-                    m_componentManager.getActivator().log( LogService.LOG_ERROR,
-                        "Exception while recreating dependency ", m_componentManager.getComponentMetadata(), ex );
+                    m_componentManager.log( LogService.LOG_ERROR, "Exception while recreating dependency ",
+                        m_componentManager.getComponentMetadata(), ex );
                 }
             }
 
@@ -280,8 +275,7 @@
                     // available, bind returns false and we deactivate
                     if ( !bind( instance ) )
                     {
-                        m_componentManager.getActivator().log(
-                            LogService.LOG_DEBUG,
+                        m_componentManager.log( LogService.LOG_DEBUG,
                             "Dependency Manager: Deactivating component due to mandatory dependency on "
                                 + m_dependencyMetadata.getName() + "/" + m_dependencyMetadata.getInterface()
                                 + " not satisfied", m_componentManager.getComponentMetadata(), null );
@@ -314,7 +308,6 @@
 
     //---------- Reference interface ------------------------------------------
 
-
     public String getServiceName()
     {
         return m_dependencyMetadata.getInterface();
@@ -357,7 +350,6 @@
     }
 
 
-
     //---------- Service tracking support -------------------------------------
 
     /**
@@ -437,8 +429,7 @@
         }
         catch ( InvalidSyntaxException ise )
         {
-            m_componentManager.getActivator().log( LogService.LOG_ERROR,
-                "Unexpected problem with filter '" + getTarget() + "'",
+            m_componentManager.log( LogService.LOG_ERROR, "Unexpected problem with filter '" + getTarget() + "'",
                 m_componentManager.getComponentMetadata(), ise );
             return null;
         }
@@ -792,9 +783,8 @@
             }
             catch ( ClassNotFoundException ex2 )
             {
-                m_componentManager.getActivator().log( LogService.LOG_ERROR,
-                    "Cannot load class used as parameter " + parameterClassName,
-                    m_componentManager.getComponentMetadata(), ex2 );
+                m_componentManager.log( LogService.LOG_ERROR, "Cannot load class used as parameter "
+                    + parameterClassName, m_componentManager.getComponentMetadata(), ex2 );
             }
         }
 
@@ -830,8 +820,8 @@
             try
             {
                 // Get the bind method
-                m_componentManager.getActivator().log( LogService.LOG_DEBUG,
-                    "getting bind: " + m_dependencyMetadata.getBind(), m_componentManager.getComponentMetadata(), null );
+                m_componentManager.log( LogService.LOG_DEBUG, "getting bind: " + m_dependencyMetadata.getBind(),
+                    m_componentManager.getComponentMetadata(), null );
                 if ( m_bind == null )
                 {
                     m_bind = getBindingMethod( m_dependencyMetadata.getBind(), implementationObject.getClass(),
@@ -842,8 +832,8 @@
                     // method
                     if ( m_bind == null )
                     {
-                        m_componentManager.getActivator().log( LogService.LOG_ERROR, "bind() method not found",
-                            m_componentManager.getComponentMetadata(), null );
+                        m_componentManager.log( LogService.LOG_ERROR, "bind() method not found", m_componentManager
+                            .getComponentMetadata(), null );
                         return true;
                     }
 
@@ -867,9 +857,8 @@
                     parameter = getService( ref );
                     if ( parameter == null )
                     {
-                        m_componentManager.getActivator().log( LogService.LOG_INFO,
-                            "Dependency Manager: Service " + ref + " has already gone, not binding",
-                            m_componentManager.getComponentMetadata(), null );
+                        m_componentManager.log( LogService.LOG_INFO, "Dependency Manager: Service " + ref
+                            + " has already gone, not binding", m_componentManager.getComponentMetadata(), null );
                         return false;
                     }
                 }
@@ -878,8 +867,8 @@
                 m_bind.invoke( implementationObject, new Object[]
                     { parameter } );
 
-                m_componentManager.getActivator().log( LogService.LOG_DEBUG, "bound: " + getName(),
-                    m_componentManager.getComponentMetadata(), null );
+                m_componentManager.log( LogService.LOG_DEBUG, "bound: " + getName(), m_componentManager
+                    .getComponentMetadata(), null );
 
                 return true;
             }
@@ -888,17 +877,16 @@
                 // 112.3.1 If the method is not is not declared protected or
                 // public, SCR must log an error message with the log service,
                 // if present, and ignore the method
-                m_componentManager.getActivator().log( LogService.LOG_ERROR, "bind() method cannot be called",
-                    m_componentManager.getComponentMetadata(), ex );
+                m_componentManager.log( LogService.LOG_ERROR, "bind() method cannot be called", m_componentManager
+                    .getComponentMetadata(), ex );
                 return true;
             }
             catch ( InvocationTargetException ex )
             {
                 // 112.5.7 If a bind method throws an exception, SCR must log an
                 // error message containing the exception [...]
-                m_componentManager.getActivator().log( LogService.LOG_ERROR,
-                    "DependencyManager : exception while invoking " + m_dependencyMetadata.getBind() + "()",
-                    m_componentManager.getComponentMetadata(), ex );
+                m_componentManager.log( LogService.LOG_ERROR, "DependencyManager : exception while invoking "
+                    + m_dependencyMetadata.getBind() + "()", m_componentManager.getComponentMetadata(), ex );
                 return true;
             }
         }
@@ -936,9 +924,8 @@
             try
             {
                 // Get the bind method
-                m_componentManager.getActivator().log( LogService.LOG_DEBUG,
-                    "getting unbind: " + m_dependencyMetadata.getUnbind(), m_componentManager.getComponentMetadata(),
-                    null );
+                m_componentManager.log( LogService.LOG_DEBUG, "getting unbind: " + m_dependencyMetadata.getUnbind(),
+                    m_componentManager.getComponentMetadata(), null );
                 if ( m_unbind == null )
                 {
                     m_unbind = getBindingMethod( m_dependencyMetadata.getUnbind(), implementationObject.getClass(),
@@ -949,8 +936,8 @@
                         // 112.3.1 If the method is not found, SCR must log an error
                         // message with the log service, if present, and ignore the
                         // method
-                        m_componentManager.getActivator().log( LogService.LOG_ERROR, "unbind() method not found",
-                            m_componentManager.getComponentMetadata(), null );
+                        m_componentManager.log( LogService.LOG_ERROR, "unbind() method not found", m_componentManager
+                            .getComponentMetadata(), null );
                         return true;
                     }
                     // cache whether the unbind method takes a reference
@@ -968,9 +955,8 @@
                     parameter = getService( ref );
                     if ( parameter == null )
                     {
-                        m_componentManager.getActivator().log( LogService.LOG_INFO,
-                            "Dependency Manager: Service " + ref + " has already gone, not unbinding",
-                            m_componentManager.getComponentMetadata(), null );
+                        m_componentManager.log( LogService.LOG_INFO, "Dependency Manager: Service " + ref
+                            + " has already gone, not unbinding", m_componentManager.getComponentMetadata(), null );
                         return false;
                     }
                 }
@@ -978,8 +964,8 @@
                 m_unbind.invoke( implementationObject, new Object[]
                     { parameter } );
 
-                m_componentManager.getActivator().log( LogService.LOG_DEBUG, "unbound: " + getName(),
-                    m_componentManager.getComponentMetadata(), null );
+                m_componentManager.log( LogService.LOG_DEBUG, "unbound: " + getName(), m_componentManager
+                    .getComponentMetadata(), null );
 
                 return true;
             }
@@ -988,17 +974,18 @@
                 // 112.3.1 If the method is not is not declared protected or
                 // public, SCR must log an error message with the log service,
                 // if present, and ignore the method
-                m_componentManager.getActivator().log( LogService.LOG_ERROR, "unbind() method cannot be called",
-                    m_componentManager.getComponentMetadata(), ex );
+                m_componentManager.log( LogService.LOG_ERROR, "unbind() method cannot be called", m_componentManager
+                    .getComponentMetadata(), ex );
                 return false;
             }
             catch ( InvocationTargetException ex )
             {
                 // 112.5.13 If an unbind method throws an exception, SCR must
                 // log an error message containing the exception [...]
-                m_componentManager.getActivator().log( LogService.LOG_ERROR,
-                    "DependencyManager : exception while invoking " + m_dependencyMetadata.getUnbind() + "()",
-                    m_componentManager.getComponentMetadata(), ex.getCause() );
+                m_componentManager
+                    .log( LogService.LOG_ERROR, "DependencyManager : exception while invoking "
+                        + m_dependencyMetadata.getUnbind() + "()", m_componentManager.getComponentMetadata(), ex
+                        .getCause() );
                 return true;
             }
             finally
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java
index 1df36c3..b2875aa 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java
@@ -112,8 +112,7 @@
             }
             catch ( Throwable t )
             {
-                getActivator().log( LogService.LOG_INFO, "Unexpected problem unregistering ManagedService",
-                    getComponentMetadata(), t );
+                log( LogService.LOG_INFO, "Unexpected problem unregistering ManagedService", getComponentMetadata(), t );
             }
         }
 
@@ -188,7 +187,7 @@
         catch ( Exception ex )
         {
             // failed to instantiate, return null
-            getActivator().log( LogService.LOG_ERROR, "Error during instantiation of the implementation object",
+            log( LogService.LOG_ERROR, "Error during instantiation of the implementation object",
                 getComponentMetadata(), ex );
             return null;
         }
@@ -203,9 +202,8 @@
             DependencyManager dm = ( DependencyManager ) it.next();
             if ( !dm.bind( implementationObject ) )
             {
-                getActivator().log( LogService.LOG_ERROR,
-                    "Cannot create component instance due to failure to bind reference " + dm.getName(),
-                    getComponentMetadata(), null );
+                log( LogService.LOG_ERROR, "Cannot create component instance due to failure to bind reference "
+                    + dm.getName(), getComponentMetadata(), null );
 
                 // make sure, we keep no bindings
                 it = getDependencyManagers();
@@ -231,21 +229,19 @@
         catch ( NoSuchMethodException ex )
         {
             // We can safely ignore this one
-            getActivator().log( LogService.LOG_DEBUG, "activate() method is not implemented", getComponentMetadata(),
-                null );
+            log( LogService.LOG_DEBUG, "activate() method is not implemented", getComponentMetadata(), null );
         }
         catch ( IllegalAccessException ex )
         {
             // Ignored, but should it be logged?
-            getActivator().log( LogService.LOG_DEBUG, "activate() method cannot be called", getComponentMetadata(),
-                null );
+            log( LogService.LOG_DEBUG, "activate() method cannot be called", getComponentMetadata(), null );
         }
         catch ( InvocationTargetException ex )
         {
             // 112.5.8 If the activate method throws an exception, SCR must log an error message
             // containing the exception with the Log Service and activation fails
-            getActivator().log( LogService.LOG_ERROR, "The activate method has thrown an exception",
-                getComponentMetadata(), ex.getCause() );
+            log( LogService.LOG_ERROR, "The activate method has thrown an exception", getComponentMetadata(), ex
+                .getCause() );
 
             // make sure, we keep no bindings
             it = getDependencyManagers();
@@ -276,21 +272,19 @@
         catch ( NoSuchMethodException ex )
         {
             // We can safely ignore this one
-            getActivator().log( LogService.LOG_DEBUG, "deactivate() method is not implemented", getComponentMetadata(),
-                null );
+            log( LogService.LOG_DEBUG, "deactivate() method is not implemented", getComponentMetadata(), null );
         }
         catch ( IllegalAccessException ex )
         {
             // Ignored, but should it be logged?
-            getActivator().log( LogService.LOG_DEBUG, "deactivate() method cannot be called", getComponentMetadata(),
-                null );
+            log( LogService.LOG_DEBUG, "deactivate() method cannot be called", getComponentMetadata(), null );
         }
         catch ( InvocationTargetException ex )
         {
             // 112.5.12 If the deactivate method throws an exception, SCR must log an error message
             // containing the exception with the Log Service and continue
-            getActivator().log( LogService.LOG_ERROR, "The deactivate method has thrown an exception",
-                getComponentMetadata(), ex.getCause() );
+            log( LogService.LOG_ERROR, "The deactivate method has thrown an exception", getComponentMetadata(), ex
+                .getCause() );
         }
 
         // 2. Unbind any bound services
@@ -396,7 +390,7 @@
         // configuration data
         if ( ( getState() & ( STATE_ACTIVE | STATE_FACTORY | STATE_REGISTERED ) ) != 0 )
         {
-            getActivator().log( LogService.LOG_DEBUG, "Deactivating and Activating to reconfigure from configuration",
+            log( LogService.LOG_DEBUG, "Deactivating and Activating to reconfigure from configuration",
                 getComponentMetadata(), null );
             reactivate();
         }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java
index 4ca248c..7978573 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java
@@ -92,8 +92,7 @@
      */
     public Object getService( Bundle bundle, ServiceRegistration registration )
     {
-        getActivator().log( LogService.LOG_DEBUG, "DelayedServiceFactoryServiceFactory.getService()",
-            getComponentMetadata(), null );
+        log( LogService.LOG_DEBUG, "DelayedServiceFactoryServiceFactory.getService()", getComponentMetadata(), null );
 
         // When the getServiceMethod is called, the implementation object must be created
 
@@ -120,8 +119,7 @@
      */
     public void ungetService( Bundle bundle, ServiceRegistration registration, Object service )
     {
-        getActivator().log( LogService.LOG_DEBUG, "DelayedServiceFactoryServiceFactory.ungetService()",
-            getComponentMetadata(), null );
+        log( LogService.LOG_DEBUG, "DelayedServiceFactoryServiceFactory.ungetService()", getComponentMetadata(), null );
 
         // When the ungetServiceMethod is called, the implementation object must be deactivated
 
