diff --git a/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java b/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
index ec5e7e3..5c847b7 100644
--- a/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
+++ b/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
@@ -10,6 +10,7 @@
 import net.floodlightcontroller.core.module.FloodlightModuleException;
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
+import net.floodlightcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.floodlightcontroller.counter.ICounterStoreService;
 import net.floodlightcontroller.flowcache.IFlowService;
 import net.floodlightcontroller.mastership.IMastershipService;
@@ -53,6 +54,7 @@
         dependencies.add(IThreadPoolService.class);
         dependencies.add(IMastershipService.class);
         dependencies.add(IFlowService.class);
+        dependencies.add(ITopoRouteService.class);
         return dependencies;
     }
 
@@ -70,6 +72,7 @@
            context.getServiceImpl(IThreadPoolService.class));
        controller.setMastershipService(context.getServiceImpl(IMastershipService.class));
        controller.setFlowService(context.getServiceImpl(IFlowService.class));
+       controller.setTopoRouteService(context.getServiceImpl(ITopoRouteService.class));
        controller.init(context.getConfigParams(this));
     }
 
diff --git a/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java b/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
index 937c551..a3eb830 100644
--- a/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
+++ b/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.core.INetMapTopologyObjects.IDeviceObject;
 import net.floodlightcontroller.core.INetMapTopologyObjects.IPortObject;
 import net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject;
@@ -29,7 +30,7 @@
 		Iterable<IDeviceObject> getDevicesOnSwitch(String dpid, short port_num);
 	}
 	
-	public interface ITopoRouteService {
+	public interface ITopoRouteService extends IFloodlightService {
 		List<NodePortTuple> getShortestPath(NodePortTuple src, NodePortTuple dest);
 		Boolean routeExists(NodePortTuple src, NodePortTuple dest);
 	}
diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index 74e5fcf..cbcd9a0 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -58,6 +58,7 @@
 import net.floodlightcontroller.core.IOFSwitch;
 import net.floodlightcontroller.core.IOFSwitchFilter;
 import net.floodlightcontroller.core.IOFSwitchListener;
+import net.floodlightcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.floodlightcontroller.core.ISwitchStorage.SwitchState;
 import net.floodlightcontroller.core.annotations.LogMessageDoc;
 import net.floodlightcontroller.core.annotations.LogMessageDocs;
@@ -192,6 +193,7 @@
     protected IThreadPoolService threadPool;
     protected IMastershipService masterHelper;
     protected IFlowService flowService;
+    protected ITopoRouteService topoRouteService;
     
     // Configuration options
     protected int openFlowPort = 6633;
@@ -401,6 +403,10 @@
     public void setFlowService(IFlowService serviceImpl) {
 	this.flowService = serviceImpl;		
     }
+
+    public void setTopoRouteService(ITopoRouteService serviceImpl) {
+	this.topoRouteService = serviceImpl;		
+    }
 	
     @Override
     public Role getRole() {
diff --git a/src/main/java/net/floodlightcontroller/flowcache/FlowManager.java b/src/main/java/net/floodlightcontroller/flowcache/FlowManager.java
index d9f19ba..12ed505 100644
--- a/src/main/java/net/floodlightcontroller/flowcache/FlowManager.java
+++ b/src/main/java/net/floodlightcontroller/flowcache/FlowManager.java
@@ -26,7 +26,7 @@
 
     /** The logger. */
     private static Logger logger =
-	LoggerFactory.getLogger(FlowReconcileManager.class);
+	LoggerFactory.getLogger(FlowManager.class);
 
     @Override
     public Collection<Class<? extends IFloodlightService>> getModuleServices() {
diff --git a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
index 2c50d29..ba3c2ef 100644
--- a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
+++ b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
@@ -1,10 +1,17 @@
 package net.floodlightcontroller.routing;
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import net.floodlightcontroller.core.internal.SwitchStorageImpl;
+import net.floodlightcontroller.core.module.FloodlightModuleContext;
+import net.floodlightcontroller.core.module.FloodlightModuleException;
+import net.floodlightcontroller.core.module.IFloodlightModule;
+import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.floodlightcontroller.topology.NodePortTuple;
 
@@ -18,7 +25,54 @@
 import javax.script.ScriptException;
 import com.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
 
-public class TopoRouteService implements ITopoRouteService {
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TopoRouteService implements IFloodlightModule, ITopoRouteService {
+
+    /** The logger. */
+    private static Logger logger =
+	LoggerFactory.getLogger(TopoRouteService.class);
+
+    @Override
+    public Collection<Class<? extends IFloodlightService>> getModuleServices() {
+        Collection<Class<? extends IFloodlightService>> l = 
+            new ArrayList<Class<? extends IFloodlightService>>();
+        l.add(ITopoRouteService.class);
+        return l;
+    }
+
+    @Override
+    public Map<Class<? extends IFloodlightService>, IFloodlightService> 
+			       getServiceImpls() {
+        Map<Class<? extends IFloodlightService>,
+        IFloodlightService> m = 
+            new HashMap<Class<? extends IFloodlightService>,
+                IFloodlightService>();
+        m.put(ITopoRouteService.class, this);
+        return m;
+    }
+
+    @Override
+    public Collection<Class<? extends IFloodlightService>> 
+                                                    getModuleDependencies() {
+	Collection<Class<? extends IFloodlightService>> l =
+	    new ArrayList<Class<? extends IFloodlightService>>();
+	// TODO: Add the appropriate dependencies
+	// l.add(IRestApiService.class);
+        return l;
+    }
+
+    @Override
+    public void init(FloodlightModuleContext context)
+	throws FloodlightModuleException {
+	// TODO: Add the appropriate initialization
+    }
+
+    @Override
+    public void startUp(FloodlightModuleContext context) {
+	// TODO: Add the approprate setup
+    }
 
 	ThreadLocal<SwitchStorageImpl> store = new ThreadLocal<SwitchStorageImpl>() {
 	    @Override
diff --git a/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java b/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
index fd9d201..3fa7510 100644
--- a/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
+++ b/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
@@ -2,11 +2,10 @@
 
 import java.util.List;
 
+import net.floodlightcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.floodlightcontroller.routing.IRoutingService;
 import net.floodlightcontroller.routing.Route;
-import net.floodlightcontroller.routing.TopoRouteService;
 import net.floodlightcontroller.topology.NodePortTuple;
-import net.floodlightcontroller.core.INetMapTopologyService.ITopoRouteService;
 
 import org.openflow.util.HexString;
 import org.restlet.resource.Get;
@@ -20,14 +19,11 @@
 
     @Get("json")
     public List<NodePortTuple> retrieve() {
-	/*
-        IRoutingService routing = 
-                (IRoutingService)getContext().getAttributes().
-                    get(IRoutingService.class.getCanonicalName());
-	*/
-	ITopoRouteService onos_routing = new TopoRouteService();
-	if (onos_routing == null) {
-	    log.debug("ONOS Route Service not found");
+        ITopoRouteService topoRouteService = 
+                (ITopoRouteService)getContext().getAttributes().
+                    get(ITopoRouteService.class.getCanonicalName());
+	if (topoRouteService == null) {
+	    log.debug("Topology Route Service not found");
 	    return null;
 	}
         
@@ -43,16 +39,9 @@
         long longDstDpid = HexString.toLong(dstDpid);
         short shortDstPort = Short.parseShort(dstPort);
         
-	/*
-        Route result = routing.getRoute(longSrcDpid, shortSrcPort, longDstDpid, shortDstPort);
-        
-        if (result!=null) {
-            return routing.getRoute(longSrcDpid, shortSrcPort, longDstDpid, shortDstPort).getPath();
-        }
-	*/
 	List<NodePortTuple> result =
-	    onos_routing.getShortestPath(new NodePortTuple(longSrcDpid, shortSrcPort),
-					 new NodePortTuple(longDstDpid, shortDstPort));
+	    topoRouteService.getShortestPath(new NodePortTuple(longSrcDpid, shortSrcPort),
+					     new NodePortTuple(longDstDpid, shortDstPort));
 	if ((result != null) && (result.size() > 0)) {
 	    return result;
 	} else {
diff --git a/src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule b/src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule
index 70ca11d..16deca0 100644
--- a/src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule
+++ b/src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule
@@ -25,3 +25,4 @@
 net.floodlightcontroller.firewall.Firewall
 net.floodlightcontroller.mastership.MastershipManager
 net.floodlightcontroller.flowcache.FlowManager
+net.floodlightcontroller.routing.TopoRouteService
