diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java
index 598db65..4f47851 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java
@@ -70,7 +70,7 @@
      * @param pid The PID of the configuration used to configure the component.
      * @param props the property dictionary from the configuration.
      * @param changeCount change count of the configuration, or R4 imitation.
-     * @param targetedPid TODO
+     * @param targetedPid Targeted PID for the configuration
      * @return true if a new component is created for a factory PID, false if an existing factory pid configuration is updated or 
      * we have no factory pid
      */
@@ -78,14 +78,15 @@
     
     /**
      * Change count (or fake R4 imitation)
+     * @param pid PID of the component we are interested in.
      * @return the last change count from a configurationUpdated call for the given pid.
      */
     long getChangeCount( String pid );
     
     /**
      * Returns the targeted PID used to configure this component
-     * @param pid TODO
-     * @return
+     * @param pid a targetedPID containing the service pid for the component desired (the rest of the targeted pid is ignored)
+     * @return the complete targeted pid actually used to configure the comonent.
      */
     TargetedPID getConfigurationTargetedPID(TargetedPID pid);
 
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationSupport.java b/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationSupport.java
index 71a23b6..4599118 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationSupport.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurationSupport.java
@@ -513,7 +513,7 @@
      *
      * @param ca Configuration Admin service
      * @param pid Pid for desired configuration
-     * @param bundle TODO
+     * @param bundle bundle of the component we are configuring (used in targeted pids)
      * @return configuration with the specified Pid
      */
     public Configuration findSingletonConfiguration(final ConfigurationAdmin ca, final String pid, Bundle bundle)
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 4c701cf..a1aa66f 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
@@ -91,7 +91,7 @@
     /**
      * Constructor that receives several parameters.
      * @param dependency An object that contains data about the dependency
-     * @param index TODO
+     * @param index index of the dependency manager in the metadata
      */
     DependencyManager( AbstractComponentManager<S> componentManager, ReferenceMetadata dependency, int index )
     {
@@ -272,7 +272,7 @@
         {
             boolean success = m_dependencyMetadata.isOptional() || !getTracker().isEmpty();
             AtomicInteger trackingCount = new AtomicInteger( );
-            getTracker().getTracked( true, trackingCount );   //TODO activate method??
+            getTracker().getTracked( true, trackingCount );
             return success;
         }
 
@@ -1395,7 +1395,7 @@
     /**
      * initializes a dependency. This method binds all of the service
      * occurrences to the instance object
-     * @param edgeInfo TODO
+     * @param edgeInfo Edge info for the combination of this component instance and this dependency manager.
      *
      * @return true if the dependency is satisfied and at least the minimum
      *      number of services could be bound. Otherwise false is returned.
@@ -1457,7 +1457,8 @@
     /**
      * Revoke the given bindings. This method cannot throw an exception since
      * it must try to complete all that it can
-     * @param edgeInfo TODO
+     * @param componentInstance instance we are unbinding from.
+     * @param edgeInfo EdgeInfo for the combination of this component instance and this dependency manager.
      */
     void close( S componentInstance, EdgeInfo edgeInfo )
     {
@@ -1534,10 +1535,10 @@
      *
      *
      *
-     * @param componentInstance
+     * @param componentInstance instance we are binding to
      * @param refPair the service reference, service object tuple.
-     * @param trackingCount
-     * @param edgeInfo TODO
+     * @param trackingCount service event counter for this service.
+     * @param edgeInfo EdgeInfo for the combination of this instance and this dependency manager.
      * @return true if the service should be considered bound. If no bind
      *      method is found or the method call fails, <code>true</code> is
      *      returned. <code>false</code> is only returned if the service must
@@ -1587,9 +1588,9 @@
     /**
      * Calls the updated method.
      *
-     * @param componentInstance
+     * @param componentInstance instance we are calling updated on.
      * @param refPair A service reference corresponding to the service whose service
-     * @param edgeInfo TODO
+     * @param edgeInfo EdgeInfo for the comibination of this instance and this dependency manager.
      */
     void invokeUpdatedMethod( S componentInstance, final RefPair<T> refPair, int trackingCount, EdgeInfo info )
     {
@@ -1669,10 +1670,10 @@
      * to the component this method has no effect and just returns
      * <code>true</code>.
      *
-     * @param componentInstance
-     * @param refPair A service reference corresponding to the service that will be
-     * @param trackingCount
-     * @param info TODO
+     * @param componentInstance instance we are unbinding from
+     * @param refPair A service reference, service pair that will be unbound
+     * @param trackingCount service event count for this reference
+     * @param info EdgeInfo for the combination of this instance and this dependency manager
      */
     void invokeUnbindMethod( S componentInstance, final RefPair<T> refPair, int trackingCount, EdgeInfo info )
     {
@@ -1680,8 +1681,12 @@
         // null. This is valid for both immediate and delayed components
         if ( componentInstance != null )
         {
-            //TODO needs sync on getTracker().tracked()
-            if (info.outOfRange( trackingCount ) )
+            boolean outOfRange;
+            synchronized ( m_tracker.tracked() )
+            {
+                outOfRange = info.outOfRange( trackingCount );
+            }
+            if ( outOfRange )
             {
                 //wait for unbinds to complete
                 if (info.getCloseLatch() != null)
@@ -1906,8 +1911,19 @@
             {
                 m_componentManager.log( LogService.LOG_ERROR, "Invalid syntax in target property for dependency {0} to {1}", new Object[]
                         {getName(), target}, null );
-                // TODO this is an error, how do we recover?
-                return; //avoid an NPE
+                
+                //create a filter that will never be satisfied
+                filterString = "(component.id=-1)";
+                try
+                {
+                    m_targetFilter = bundleContext.createFilter( filterString );
+                }
+                catch ( InvalidSyntaxException e )
+                {
+                    //this should not happen
+                    return;
+                }
+
             }
         }
         else
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 df9077a..b3e5373 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
@@ -529,8 +529,8 @@
      * @param configuration The configuration properties for the component from
      *                      the Configuration Admin Service or <code>null</code> if there is
      *                      no configuration or if the configuration has just been deleted.
-     * @param changeCount TODO
-     * @param targetedPID TODO
+     * @param changeCount Change count for the configuration
+     * @param targetedPID TargetedPID for the configuration
      */
     public void reconfigure( Dictionary<String, Object> configuration, long changeCount, TargetedPID targetedPID )
     {
