diff --git a/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java b/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
index 41676c4..199f877 100644
--- a/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
+++ b/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
@@ -46,8 +46,8 @@
         dependencies.add(IRestApiService.class);
         dependencies.add(IThreadPoolService.class);
         // Following added by ONOS
-        dependencies.add(IControllerRegistryService.class);
-        dependencies.add(ILinkDiscoveryService.class);
+        // dependencies.add(IControllerRegistryService.class);
+        // dependencies.add(ILinkDiscoveryService.class);
 
         return dependencies;
     }
diff --git a/src/main/java/net/floodlightcontroller/core/module/FloodlightModuleLoader.java b/src/main/java/net/floodlightcontroller/core/module/FloodlightModuleLoader.java
index 2686d00..7507fd5 100644
--- a/src/main/java/net/floodlightcontroller/core/module/FloodlightModuleLoader.java
+++ b/src/main/java/net/floodlightcontroller/core/module/FloodlightModuleLoader.java
@@ -297,7 +297,64 @@
                 }
             }
         }
-        
+
+	//
+	// Reorder the moduleSet to take into account the module dependencies:
+	// If a module depends on the service provided by another module, the
+	// latter should be included before the former.
+	//
+	Collection<IFloodlightModule> orderedModuleSet =
+	    new ArrayList<IFloodlightModule>();
+	while (! moduleSet.isEmpty()) {
+	    //
+	    // Evaluate each module in the unsorted collection: if all its
+	    // dependencies are in the orderedModuleSet, then add it to the
+	    // orderedModuleSet.
+	    //
+	    boolean moduleWasSorted = false;
+	    for (IFloodlightModule module : moduleSet) {
+		Collection<Class<? extends IFloodlightService>> deps =
+		    module.getModuleDependencies();
+		boolean allDepsFound = true;
+		if (deps != null) {
+		    for (Class<? extends IFloodlightService> c : deps) {
+			IFloodlightModule m = moduleMap.get(c);
+			// NOTE: Earlier we checked that the module exists
+			assert(m != null);
+			if (! orderedModuleSet.contains(m)) {
+			    allDepsFound = false;
+			    break;
+			}
+		    }
+		}
+
+		// Move the module to the sorted collection
+		if (allDepsFound) {
+		    orderedModuleSet.add(module);
+		    moduleSet.remove(module);
+		    moduleWasSorted = true;
+		    break;
+		}
+	    }
+
+	    //
+	    // Test for cyclic depenency:
+	    // If no module was sorted, but there are still unsorted modules
+	    // then there is cyclic dependency.
+	    //
+	    if ((! moduleWasSorted) && (! moduleSet.isEmpty())) {
+		String errorMsg = "";
+		for (IFloodlightModule module : moduleSet) {
+		    if (! errorMsg.isEmpty())
+			errorMsg += ", ";
+		    errorMsg += module.getClass().getName();
+		}
+		errorMsg = "ERROR! Cyclic service dependency/dependencies among the following modules: " + errorMsg;
+		throw new FloodlightModuleException(errorMsg);
+	    }
+	}
+	moduleSet = orderedModuleSet;
+
         floodlightModuleContext.setModuleSet(moduleSet);
         parseConfigParameters(prop);
         initModules(moduleSet);
diff --git a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
index 99357be..f77a62c 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/NetworkGraphPublisher.java
@@ -438,11 +438,12 @@
 	public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
 	    Collection<Class<? extends IFloodlightService>> l =
 	            new ArrayList<Class<? extends IFloodlightService>>();
-        l.add(IFloodlightProviderService.class);
-        //l.add(IDeviceService.class);
-        l.add(IDatagridService.class);
-        l.add(IThreadPoolService.class);
-        return l;
+	        l.add(IFloodlightProviderService.class);
+	        //l.add(IDeviceService.class);
+	        l.add(IDatagridService.class);
+	        l.add(IThreadPoolService.class);
+		l.add(ILinkDiscoveryService.class);
+	        return l;
 	}
 
 	@Override
diff --git a/src/main/java/net/onrc/onos/registry/controller/StandaloneRegistry.java b/src/main/java/net/onrc/onos/registry/controller/StandaloneRegistry.java
index 422949a..1e2934b 100755
--- a/src/main/java/net/onrc/onos/registry/controller/StandaloneRegistry.java
+++ b/src/main/java/net/onrc/onos/registry/controller/StandaloneRegistry.java
@@ -6,6 +6,7 @@
 import java.util.List;
 import java.util.Map;
 
+import net.floodlightcontroller.core.IFloodlightProviderService;
 import net.floodlightcontroller.core.module.FloodlightModuleContext;
 import net.floodlightcontroller.core.module.FloodlightModuleException;
 import net.floodlightcontroller.core.module.IFloodlightModule;
@@ -160,7 +161,8 @@
 	public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
 		Collection<Class<? extends IFloodlightService>> l =
                 new ArrayList<Class<? extends IFloodlightService>>();
-        l.add(IRestApiService.class);
+		l.add(IFloodlightProviderService.class);
+		l.add(IRestApiService.class);
 		return l;
 	}
 
diff --git a/src/main/java/net/onrc/onos/registry/controller/ZookeeperRegistry.java b/src/main/java/net/onrc/onos/registry/controller/ZookeeperRegistry.java
index b496321..8a2af13 100755
--- a/src/main/java/net/onrc/onos/registry/controller/ZookeeperRegistry.java
+++ b/src/main/java/net/onrc/onos/registry/controller/ZookeeperRegistry.java
@@ -10,6 +10,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import net.floodlightcontroller.core.IFloodlightProviderService;
 import net.floodlightcontroller.core.module.FloodlightModuleContext;
 import net.floodlightcontroller.core.module.FloodlightModuleException;
 import net.floodlightcontroller.core.module.IFloodlightModule;
@@ -468,7 +469,8 @@
 	public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
 		Collection<Class<? extends IFloodlightService>> l =
                 new ArrayList<Class<? extends IFloodlightService>>();
-        l.add(IRestApiService.class);
+		l.add(IFloodlightProviderService.class);
+		l.add(IRestApiService.class);
 		return l;
 	}
 	
