diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
index a248cda..e698a6a 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
@@ -392,12 +392,15 @@
                 m_isStarted = false;
                 needsStopping = true;
             }
-            m_services.remove(service);
         }
         if (needsStopping) {
             m_tracker.close();
             m_tracker = null;
         }
+        //moved this down
+        synchronized (this) {
+            m_services.remove(service);
+        }
     }
 
     public Object addingService(ServiceReference ref) {
@@ -461,6 +464,7 @@
         synchronized (this) {
             services = m_services.toArray();
         }
+
         for (int i = 0; i < services.length; i++) {
             DependencyService ds = (DependencyService) services[i];
             if (makeUnavailable) {
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
index 01a84e5..c0217b6 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
@@ -812,7 +812,7 @@
 	class Tracked extends AbstractTracked implements ServiceListener {
 	    /** A list of services that are currently hidden because there is an aspect available with a higher ranking. */
 	    private final List m_hidden = new ArrayList();
-
+	    
 	    /**
 	     * Returns the highest hidden aspect for the specified service ID.
 	     * 
@@ -981,33 +981,30 @@
 						+ event.getType() + "]: " + reference);  
 			}
 
+			long sid = ServiceUtil.getServiceId(reference);
 			switch (event.getType()) {
 				case ServiceEvent.REGISTERED :
 				case ServiceEvent.MODIFIED :
 				    ServiceReference higher = null;
 				    ServiceReference lower = null;
-				    boolean isAspect = ServiceUtil.isAspect(reference);
-				    if (true /* WAS isAspect */) {
-    				    long sid = ServiceUtil.getServiceId(reference);
-    				    ServiceReference sr = highestTracked(sid);
-    				    if (sr != null) {
-    				        int ranking = ServiceUtil.getRanking(reference);
-    				        int trackedRanking = ServiceUtil.getRanking(sr);
-    				        if (ranking > trackedRanking) {
-    				            // found a higher ranked one!
-    				            if (DEBUG) {
-    				                System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a higher ranked aspect: " + ServiceUtil.toString(reference) + " vs " + ServiceUtil.toString(sr));
-    				            }
-    				            higher = sr;
-    				        }
-    				        else {
-    				            // found lower ranked one!
-                                if (DEBUG) {
-                                    System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a lower ranked aspect: " + ServiceUtil.toString(reference) + " vs " + ServiceUtil.toString(sr));
-                                }
-    				            lower = sr;
-    				        }
-    				    }
+				    ServiceReference sr = highestTracked(sid);
+				    if (sr != null) {
+				        int ranking = ServiceUtil.getRanking(reference);
+				        int trackedRanking = ServiceUtil.getRanking(sr);
+				        if (ranking > trackedRanking) {
+				            // found a higher ranked one!
+				            if (DEBUG) {
+				                System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a higher ranked aspect: " + ServiceUtil.toString(reference) + " vs " + ServiceUtil.toString(sr));
+				            }
+				            higher = sr;
+				        }
+				        else {
+				            // found lower ranked one!
+                            if (DEBUG) {
+                                System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a lower ranked aspect: " + ServiceUtil.toString(reference) + " vs " + ServiceUtil.toString(sr));
+                            }
+				            lower = sr;
+				        }
 				    }
 				    
 					if (listenerFilter != null) { // service listener added with filter
@@ -1060,26 +1057,21 @@
 							 */
 						}
 						else {
-		                    higher = null;
-		                    isAspect = ServiceUtil.isAspect(reference);
-		                    if (true /* WAS isAspect */) {
-		                        long sid = ServiceUtil.getServiceId(reference);
-		                        ServiceReference sr = highestHidden(sid);
-		                        if (sr != null) {
-	                                if (DEBUG) {
-	                                    System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a hidden aspect: " + ServiceUtil.toString(reference));
-	                                }
-		                            higher = sr;
+		                    ServiceReference ht = highestTracked(sid);
+		                    ServiceReference hh = highestHidden(sid);
+		                    if (reference.equals(ht)) {
+		                        try {
+		                            if (hh != null) {
+		                                unhide(hh);
+		                                track(hh, null);
+		                            }
+		                        }
+		                        finally {
+		                            untrack(reference, event);
 		                        }
 		                    }
-		                    try {
-    		                    if (higher != null) {
-    		                        unhide(higher);
-    		                        track(higher, null);
-    		                    }
-		                    }
-		                    finally {
-		                        untrack(reference, event);
+		                    else {
+		                        unhide(reference);
 		                    }
 							/*
 							 * If the customizer throws an unchecked exception,
@@ -1090,27 +1082,22 @@
 					break;
                 case 8 /* ServiceEvent.MODIFIED_ENDMATCH */ :
 				case ServiceEvent.UNREGISTERING :
-                    higher = null;
-                    isAspect = ServiceUtil.isAspect(reference);
-                    if (true /* WAS isAspect */) {
-                        long sid = ServiceUtil.getServiceId(reference);
-                        ServiceReference sr = highestHidden(sid);
-                        if (sr != null) {
-                            if (DEBUG) {
-                                System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a hidden aspect: " + ServiceUtil.toString(reference));
-                            }
-                            higher = sr;
-                        }
-                    }
-                    try {
-                        if (higher != null) {
-                            unhide(higher);
-                            track(higher, null);
-                        }
-                    }
-                    finally {
-                        untrack(reference, event);
-                    }
+				    ServiceReference ht = highestTracked(sid);
+				    ServiceReference hh = highestHidden(sid);
+				    if (reference.equals(ht)) {
+				        try {
+    				        if (hh != null) {
+    				            unhide(hh);
+    				            track(hh, null);
+    				        }
+				        }
+				        finally {
+				            untrack(reference, event);
+				        }
+				    }
+				    else {
+				        unhide(reference);
+				    }
 					/*
 					 * If the customizer throws an unchecked exception, it is
 					 * safe to let it propagate
