Merge branch 'master' into unittest_bugfix
diff --git a/conf/onos-embedded.properties b/conf/onos-embedded.properties
index 5e09059..8bbf25d 100644
--- a/conf/onos-embedded.properties
+++ b/conf/onos-embedded.properties
@@ -8,6 +8,7 @@
 net.floodlightcontroller.perfmon.PktInProcessingTime,\
 net.floodlightcontroller.ui.web.StaticWebRoutable,\
 net.onrc.onos.datagrid.HazelcastDatagrid,\
+net.onrc.onos.ofcontroller.flowmanager.FlowManager,\
 net.onrc.onos.registry.controller.ZookeeperRegistry
 net.floodlightcontroller.restserver.RestApiServer.port = 8080
 net.floodlightcontroller.core.FloodlightProvider.openflowport = 6633
diff --git a/conf/onos.properties b/conf/onos.properties
index 4920744..c67b340 100644
--- a/conf/onos.properties
+++ b/conf/onos.properties
@@ -7,6 +7,8 @@
 net.floodlightcontroller.counter.CounterStore,\
 net.floodlightcontroller.perfmon.PktInProcessingTime,\
 net.floodlightcontroller.ui.web.StaticWebRoutable,\
+net.onrc.onos.datagrid.HazelcastDatagrid,\
+net.onrc.onos.ofcontroller.flowmanager.FlowManager,\
 net.onrc.onos.registry.controller.ZookeeperRegistry
 net.floodlightcontroller.restserver.RestApiServer.port = 8080
 net.floodlightcontroller.core.FloodlightProvider.openflowport = 6633
diff --git a/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java b/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
index c821339..95daf96 100644
--- a/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
+++ b/src/main/java/net/floodlightcontroller/core/FloodlightProvider.java
@@ -15,7 +15,6 @@
 import net.floodlightcontroller.restserver.IRestApiService;
 import net.floodlightcontroller.storage.IStorageSourceService;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
-import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
 
 public class FloodlightProvider implements IFloodlightModule {
@@ -52,7 +51,6 @@
         dependencies.add(ICounterStoreService.class);
         dependencies.add(IThreadPoolService.class);
         // Following added by ONOS
-        dependencies.add(IFlowService.class);
         dependencies.add(IControllerRegistryService.class);
 
         return dependencies;
@@ -71,7 +69,6 @@
        controller.setThreadPoolService(
            context.getServiceImpl(IThreadPoolService.class));
        // Following added by ONOS
-       controller.setFlowService(context.getServiceImpl(IFlowService.class));
        controller.setMastershipService(
     		   context.getServiceImpl(IControllerRegistryService.class));
 
diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index 21eceb3..9d4ac9a 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -75,7 +75,6 @@
 import net.floodlightcontroller.storage.StorageException;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
 import net.onrc.onos.ofcontroller.core.IOFSwitchPortListener;
-import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
 import net.onrc.onos.registry.controller.IControllerRegistryService.ControlChangeCallback;
 import net.onrc.onos.registry.controller.RegistryException;
@@ -146,7 +145,7 @@
  * - Detailed Port event: PORTCHANGED -> {PORTCHANGED, PORTADDED, PORTREMOVED} 
  *    Available as net.onrc.onos.ofcontroller.core.IOFSwitchPortListener
  * - Distributed ownership control of switch through RegistryService(IControllerRegistryService)
- * - Register ONOS services. (IFlowService, IControllerRegistryService)
+ * - Register ONOS services. (IControllerRegistryService)
  * - Additional DEBUG logs
  * - Try using hostname as controller ID, when ID was not explicitly given.
  */
@@ -188,7 +187,6 @@
     protected IStorageSourceService storageSource;
     protected IPktInProcessingTimeService pktinProcTime;
     protected IThreadPoolService threadPool;
-    protected IFlowService flowService;
     protected IControllerRegistryService registryService;
     
     // Configuration options
@@ -405,10 +403,6 @@
         this.threadPool = tp;
     }
 
-    public void setFlowService(IFlowService serviceImpl) {
-	this.flowService = serviceImpl;		
-    }
-
 	public void setMastershipService(IControllerRegistryService serviceImpl) {
 		this.registryService = serviceImpl;		
 	}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
index 826fd93..9b6ac53 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
@@ -34,7 +34,6 @@
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.ofcontroller.bgproute.RibUpdate.Operation;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoLinkService;
-import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.onrc.onos.ofcontroller.core.internal.TopoLinkServiceImpl;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscovery;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscovery.LDUpdate;
@@ -42,7 +41,8 @@
 import net.onrc.onos.ofcontroller.proxyarp.IArpRequester;
 import net.onrc.onos.ofcontroller.proxyarp.IProxyArpService;
 import net.onrc.onos.ofcontroller.proxyarp.ProxyArpManager;
-import net.onrc.onos.ofcontroller.routing.TopoRouteService;
+import net.onrc.onos.ofcontroller.topology.ITopologyNetService;
+import net.onrc.onos.ofcontroller.topology.TopologyManager;
 import net.onrc.onos.ofcontroller.util.DataPath;
 import net.onrc.onos.ofcontroller.util.Dpid;
 import net.onrc.onos.ofcontroller.util.FlowEntry;
@@ -83,7 +83,7 @@
 
 	protected IFloodlightProviderService floodlightProvider;
 	protected ITopologyService topology;
-	protected ITopoRouteService topoRouteService;
+	protected ITopologyNetService topologyNetService;
 	protected ILinkDiscoveryService linkDiscoveryService;
 	protected IRestApiService restApi;
 	
@@ -142,7 +142,7 @@
 	
 	private FlowCache flowCache;
 	
-	protected volatile Map<Long, ?> topoRouteTopology = null;
+	protected volatile Map<Long, ?> shortestPathTopo = null;
 		
 	protected class TopologyChangeDetector implements Runnable {
 		@Override
@@ -272,7 +272,7 @@
 		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
 		topologyChangeDetectorTask = new SingletonTask(executor, new TopologyChangeDetector());
 
-		topoRouteService = new TopoRouteService("");
+		topologyNetService = new TopologyManager("");
 		
 		pathsWaitingOnArp = new HashMap<InetAddress, Path>();
 		prefixesWaitingOnArp = Multimaps.synchronizedSetMultimap(
@@ -498,14 +498,14 @@
 		//Add a flow to rewrite mac for this prefix to all other border switches
 		for (Interface srcInterface : srcInterfaces.values()) {
 			DataPath shortestPath; 
-			if (topoRouteTopology == null) {
-				shortestPath = topoRouteService.getShortestPath(
+			if (shortestPathTopo == null) {
+				shortestPath = topologyNetService.getShortestPath(
 						srcInterface.getSwitchPort(),
 						egressInterface.getSwitchPort());
 			}
 			else {
-				shortestPath = topoRouteService.getTopoShortestPath(
-						topoRouteTopology, srcInterface.getSwitchPort(),
+				shortestPath = topologyNetService.getTopoShortestPath(
+						shortestPathTopo, srcInterface.getSwitchPort(),
 						egressInterface.getSwitchPort());
 			}
 			
@@ -697,12 +697,12 @@
 			}
 			
 			DataPath shortestPath;
-			if (topoRouteTopology == null) {
-				shortestPath = topoRouteService.getShortestPath(
+			if (shortestPathTopo == null) {
+				shortestPath = topologyNetService.getShortestPath(
 						srcInterface.getSwitchPort(), dstInterface.getSwitchPort());
 			}
 			else {
-				shortestPath = topoRouteService.getTopoShortestPath(topoRouteTopology, 
+				shortestPath = topologyNetService.getTopoShortestPath(shortestPathTopo, 
 						srcInterface.getSwitchPort(), dstInterface.getSwitchPort());
 			}
 			
@@ -771,7 +771,7 @@
 		for (BgpPeer bgpPeer : bgpPeers.values()){
 			Interface peerInterface = interfaces.get(bgpPeer.getInterfaceName());
 			
-			DataPath path = topoRouteService.getShortestPath(
+			DataPath path = topologyNetService.getShortestPath(
 					peerInterface.getSwitchPort(), bgpdAttachmentPoint);
 			
 			if (path == null){
@@ -1046,7 +1046,7 @@
 	
 	private void beginRouting(){
 		log.debug("Topology is now ready, beginning routing function");
-		topoRouteTopology = topoRouteService.prepareShortestPathTopo();
+		shortestPathTopo = topologyNetService.prepareShortestPathTopo();
 		
 		setupArpFlows();
 		setupDefaultDropFlows();
@@ -1086,7 +1086,7 @@
 					continue;
 				}
 				
-				DataPath shortestPath = topoRouteService.getShortestPath(
+				DataPath shortestPath = topologyNetService.getShortestPath(
 						srcInterface.getSwitchPort(), dstInterface.getSwitchPort());
 				
 				if (shortestPath == null){
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyService.java b/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyService.java
index 954515b..f5ccc49 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyService.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyService.java
@@ -1,16 +1,11 @@
 package net.onrc.onos.ofcontroller.core;
 
 import java.util.List;
-import java.util.Map;
 
-import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.routing.Link;
-import net.floodlightcontroller.topology.NodePortTuple;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
-import net.onrc.onos.ofcontroller.util.DataPath;
-import net.onrc.onos.ofcontroller.util.SwitchPort;
 
 public interface INetMapTopologyService extends INetMapService {
 
@@ -34,90 +29,4 @@
 		Iterable<IDeviceObject> getDevicesOnSwitch(String dpid);
 		Iterable<IDeviceObject> getDevicesOnSwitch(String dpid, short port_num);
 	}
-	
-	public interface ITopoRouteService extends IFloodlightService {
-	    /**
-	     * Get the shortest path from a source to a destination.
-	     *
-	     * @param src the source in the shortest path computation.
-	     * @param dest the destination in the shortest path computation.
-	     * @return the data path with the computed shortest path if
-	     * found, otherwise null.
-	     */
-	    DataPath getShortestPath(SwitchPort src, SwitchPort dest);
-
-	    /**
-	     * Fetch the Switch and Ports info from the Titan Graph
-	     * and return it for fast access during the shortest path
-	     * computation.
-	     *
-	     * After fetching the state, method @ref getTopoShortestPath()
-	     * can be used for fast shortest path computation.
-	     *
-	     * Note: There is certain cost to fetch the state, hence it should
-	     * be used only when there is a large number of shortest path
-	     * computations that need to be done on the same topology.
-	     * Typically, a single call to @ref prepareShortestPathTopo()
-	     * should be followed by a large number of calls to
-	     * method @ref getTopoShortestPath().
-	     * After the last @ref getTopoShortestPath() call,
-	     * method @ref dropShortestPathTopo() should be used to release
-	     * the internal state that is not needed anymore:
-	     *
-	     *       Map<Long, ?> shortestPathTopo;
-	     *       shortestPathTopo = prepareShortestPathTopo();
-	     *       for (int i = 0; i < 10000; i++) {
-	     *           dataPath = getTopoShortestPath(shortestPathTopo, ...);
-	     *           ...
-	     *        }
-	     *        dropShortestPathTopo(shortestPathTopo);
-	     *
-	     * @return the Shortest Path info handler stored in a map.
-	     */
-	    Map<Long, ?> prepareShortestPathTopo();
-
-	    /**
-	     * Release the state that was populated by
-	     * method @ref prepareShortestPathTopo().
-	     *
-	     * See the documentation for method @ref prepareShortestPathTopo()
-	     * for additional information and usage.
-	     *
-	     * @param shortestPathTopo the Shortest Path info handler to release.
-	     */
-	    void dropShortestPathTopo(Map<Long, ?> shortestPathTopo);
-
-	    /**
-	     * Get the shortest path from a source to a destination by
-	     * using the pre-populated local topology state prepared
-	     * by method @ref prepareShortestPathTopo().
-	     *
-	     * See the documentation for method @ref prepareShortestPathTopo()
-	     * for additional information and usage.
-	     *
-	     * @param shortestPathTopo the Shortest Path info handler
-	     * to use.
-	     * @param src the source in the shortest path computation.
-	     * @param dest the destination in the shortest path computation.
-	     * @return the data path with the computed shortest path if
-	     * found, otherwise null.
-	     */
-	    DataPath getTopoShortestPath(Map<Long, ?> shortestPathTopo,
-					 SwitchPort src, SwitchPort dest);
-
-	    /**
-	     * Test whether a route exists from a source to a destination.
-	     *
-	     * @param src the source node for the test.
-	     * @param dest the destination node for the test.
-	     * @return true if a route exists, otherwise false.
-	     */
-	    Boolean routeExists(SwitchPort src, SwitchPort dest);
-	}
-	
-	public interface ITopoFlowService {
-		Boolean flowExists(NodePortTuple src, NodePortTuple dest);
-		List<NodePortTuple> getShortestFlowPath(NodePortTuple src, NodePortTuple dest);
-		
-	}
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
index ad98227..4130da6 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
@@ -33,9 +33,9 @@
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
-import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.onrc.onos.ofcontroller.flowmanager.web.FlowWebRoutable;
-import net.onrc.onos.ofcontroller.routing.TopoRouteService;
+import net.onrc.onos.ofcontroller.topology.ITopologyNetService;
+import net.onrc.onos.ofcontroller.topology.TopologyManager;
 import net.onrc.onos.ofcontroller.util.CallerId;
 import net.onrc.onos.ofcontroller.util.DataPath;
 import net.onrc.onos.ofcontroller.util.DataPathEndpoints;
@@ -73,7 +73,7 @@
 
     protected IRestApiService restApi;
     protected volatile IFloodlightProviderService floodlightProvider;
-    protected volatile ITopoRouteService topoRouteService;
+    protected volatile ITopologyNetService topologyNetService;
     protected FloodlightModuleContext context;
 
     protected OFMessageDamper messageDamper;
@@ -294,7 +294,7 @@
 		// Flow Paths this controller is responsible for.
 		//
 		Map<Long, ?> shortestPathTopo =
-		    topoRouteService.prepareShortestPathTopo();
+		    topologyNetService.prepareShortestPathTopo();
 		Iterable<IFlowPath> allFlowPaths = op.getAllFlowPaths();
 		for (IFlowPath flowPathObj : allFlowPaths) {
 		    counterAllFlowPaths++;
@@ -372,9 +372,9 @@
 		    // to avoid closing the transaction.
 		    //
 		    DataPath dataPath =
-			topoRouteService.getTopoShortestPath(shortestPathTopo,
-							     srcSwitchPort,
-							     dstSwitchPort);
+			topologyNetService.getTopoShortestPath(shortestPathTopo,
+							       srcSwitchPort,
+							       dstSwitchPort);
 		    if (dataPath == null) {
 			// We need the DataPath to compare the paths
 			dataPath = new DataPath();
@@ -399,7 +399,7 @@
 		    op.removeFlowPath(flowPathObj);
 		}
 
-		topoRouteService.dropShortestPathTopo(shortestPathTopo);
+		topologyNetService.dropShortestPathTopo(shortestPathTopo);
 
 		op.commit();
 
@@ -433,7 +433,7 @@
     @Override
     public void init(String conf) {
     	op = new GraphDBOperation(conf);
-	topoRouteService = new TopoRouteService(conf);
+	topologyNetService = new TopologyManager(conf);
     }
 
     /**
diff --git a/src/main/java/net/onrc/onos/ofcontroller/topology/ITopologyNetService.java b/src/main/java/net/onrc/onos/ofcontroller/topology/ITopologyNetService.java
new file mode 100644
index 0000000..bd0ca38
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/topology/ITopologyNetService.java
@@ -0,0 +1,90 @@
+package net.onrc.onos.ofcontroller.topology;
+
+import java.util.Map;
+
+import net.floodlightcontroller.core.module.IFloodlightService;
+import net.onrc.onos.ofcontroller.util.DataPath;
+import net.onrc.onos.ofcontroller.util.SwitchPort;
+
+/**
+ * Interface for providing Topology Network Service to other modules.
+ */
+public interface ITopologyNetService extends IFloodlightService {
+    /**
+     * Get the shortest path from a source to a destination.
+     *
+     * @param src the source in the shortest path computation.
+     * @param dest the destination in the shortest path computation.
+     * @return the data path with the computed shortest path if
+     * found, otherwise null.
+     */
+    DataPath getShortestPath(SwitchPort src, SwitchPort dest);
+
+    /**
+     * Fetch the Switch and Ports info from the Titan Graph
+     * and return it for fast access during the shortest path
+     * computation.
+     *
+     * After fetching the state, method @ref getTopoShortestPath()
+     * can be used for fast shortest path computation.
+     *
+     * Note: There is certain cost to fetch the state, hence it should
+     * be used only when there is a large number of shortest path
+     * computations that need to be done on the same topology.
+     * Typically, a single call to @ref prepareShortestPathTopo()
+     * should be followed by a large number of calls to
+     * method @ref getTopoShortestPath().
+     * After the last @ref getTopoShortestPath() call,
+     * method @ref dropShortestPathTopo() should be used to release
+     * the internal state that is not needed anymore:
+     *
+     *       Map<Long, ?> shortestPathTopo;
+     *       shortestPathTopo = prepareShortestPathTopo();
+     *       for (int i = 0; i < 10000; i++) {
+     *           dataPath = getTopoShortestPath(shortestPathTopo, ...);
+     *           ...
+     *        }
+     *        dropShortestPathTopo(shortestPathTopo);
+     *
+     * @return the Shortest Path info handler stored in a map.
+     */
+    Map<Long, ?> prepareShortestPathTopo();
+
+    /**
+     * Release the state that was populated by
+     * method @ref prepareShortestPathTopo().
+     *
+     * See the documentation for method @ref prepareShortestPathTopo()
+     * for additional information and usage.
+     *
+     * @param shortestPathTopo the Shortest Path info handler to release.
+     */
+    void dropShortestPathTopo(Map<Long, ?> shortestPathTopo);
+
+    /**
+     * Get the shortest path from a source to a destination by
+     * using the pre-populated local topology state prepared
+     * by method @ref prepareShortestPathTopo().
+     *
+     * See the documentation for method @ref prepareShortestPathTopo()
+     * for additional information and usage.
+     *
+     * @param shortestPathTopo the Shortest Path info handler
+     * to use.
+     * @param src the source in the shortest path computation.
+     * @param dest the destination in the shortest path computation.
+     * @return the data path with the computed shortest path if
+     * found, otherwise null.
+     */
+    DataPath getTopoShortestPath(Map<Long, ?> shortestPathTopo,
+				 SwitchPort src, SwitchPort dest);
+
+    /**
+     * Test whether a route exists from a source to a destination.
+     *
+     * @param src the source node for the test.
+     * @param dest the destination node for the test.
+     * @return true if a route exists, otherwise false.
+     */
+    Boolean routeExists(SwitchPort src, SwitchPort dest);
+}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/routing/TopoRouteService.java b/src/main/java/net/onrc/onos/ofcontroller/topology/TopologyManager.java
similarity index 97%
rename from src/main/java/net/onrc/onos/ofcontroller/routing/TopoRouteService.java
rename to src/main/java/net/onrc/onos/ofcontroller/topology/TopologyManager.java
index 7ccf207..618ae39 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/routing/TopoRouteService.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/topology/TopologyManager.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.ofcontroller.routing;
+package net.onrc.onos.ofcontroller.topology;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -11,7 +11,6 @@
 
 import net.onrc.onos.graph.GraphDBOperation;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
-import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.onrc.onos.ofcontroller.core.ISwitchStorage.SwitchState;
 import net.onrc.onos.ofcontroller.util.DataPath;
 import net.onrc.onos.ofcontroller.util.Dpid;
@@ -87,13 +86,12 @@
 };
 
 /**
- * A class for implementing Topology Route Service.
+ * A class for implementing Topology Network Service.
  */
-public class TopoRouteService implements ITopoRouteService {
+public class TopologyManager implements ITopologyNetService {
 
     /** The logger. */
-    private static Logger log =
-	LoggerFactory.getLogger(TopoRouteService.class);
+    private static Logger log = LoggerFactory.getLogger(TopologyManager.class);
     
     protected GraphDBOperation op;
 
@@ -101,7 +99,7 @@
     /**
      * Default constructor.
      */
-    public TopoRouteService() {
+    public TopologyManager() {
     }
 
     /**
@@ -110,7 +108,7 @@
      * @param config the database configuration file to use for
      * the initialization.
      */
-    public TopoRouteService(String config) {
+    public TopologyManager(String config) {
 	this.init(config);
     }
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/topology/web/RouteResource.java b/src/main/java/net/onrc/onos/ofcontroller/topology/web/RouteResource.java
index 659609d..a730719 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/topology/web/RouteResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/topology/web/RouteResource.java
@@ -1,7 +1,7 @@
 package net.onrc.onos.ofcontroller.topology.web;
 
-import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoRouteService;
-import net.onrc.onos.ofcontroller.routing.TopoRouteService;
+import net.onrc.onos.ofcontroller.topology.ITopologyNetService;
+import net.onrc.onos.ofcontroller.topology.TopologyManager;
 import net.onrc.onos.ofcontroller.util.DataPath;
 import net.onrc.onos.ofcontroller.util.Dpid;
 import net.onrc.onos.ofcontroller.util.Port;
@@ -18,9 +18,9 @@
 
     @Get("json")
     public DataPath retrieve() {
-        ITopoRouteService topoRouteService = new TopoRouteService("");
-	if (topoRouteService == null) {
-	    log.debug("Topology Route Service not found");
+        ITopologyNetService topologyNetService = new TopologyManager("");
+	if (topologyNetService == null) {
+	    log.debug("Topology Net Service not found");
 	    return null;
 	}
         
@@ -37,8 +37,8 @@
 	Port dstPort = new Port(Short.parseShort(dstPortStr));
         
 	DataPath result =
-	    topoRouteService.getShortestPath(new SwitchPort(srcDpid, srcPort),
-					     new SwitchPort(dstDpid, dstPort));
+	    topologyNetService.getShortestPath(new SwitchPort(srcDpid, srcPort),
+					       new SwitchPort(dstDpid, dstPort));
 	if (result != null) {
 	    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 d3508ff..99ded31 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
@@ -20,7 +20,7 @@
 net.floodlightcontroller.core.test.MockThreadPoolService
 net.onrc.onos.datagrid.HazelcastDatagrid
 net.onrc.onos.ofcontroller.flowmanager.FlowManager
-net.onrc.onos.ofcontroller.routing.TopoRouteService
+net.onrc.onos.ofcontroller.topology.TopologyManager
 net.onrc.onos.ofcontroller.bgproute.BgpRoute
 net.onrc.onos.registry.controller.ZookeeperRegistry
 net.onrc.onos.registry.controller.StandaloneRegistry
diff --git a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
index 4516ece..21788af 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
@@ -70,10 +70,10 @@
 import net.floodlightcontroller.test.FloodlightTestCase;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
 import net.onrc.onos.ofcontroller.core.IOFSwitchPortListener;
-import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.onrc.onos.ofcontroller.flowmanager.FlowManager;
 import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
-import net.onrc.onos.ofcontroller.routing.TopoRouteService;
+import net.onrc.onos.ofcontroller.topology.ITopologyNetService;
+import net.onrc.onos.ofcontroller.topology.TopologyManager;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
 import net.onrc.onos.registry.controller.StandaloneRegistry;
 
@@ -139,7 +139,7 @@
         // Following added by ONOS
         // TODO replace with mock if further testing is needed.
         fmc.addService(IFlowService.class, new FlowManager() );
-        fmc.addService(ITopoRouteService.class, new TopoRouteService() );
+        fmc.addService(ITopologyNetService.class, new TopologyManager() );
         StandaloneRegistry sr = new StandaloneRegistry();
         fmc.addService(IControllerRegistryService.class, sr );
 
diff --git a/src/test/java/net/onrc/onos/ofcontroller/flowmanager/FlowManagerTest.java b/src/test/java/net/onrc/onos/ofcontroller/flowmanager/FlowManagerTest.java
index 83a5fab..68e31ba 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/flowmanager/FlowManagerTest.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/flowmanager/FlowManagerTest.java
@@ -19,7 +19,7 @@
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
 import net.onrc.onos.ofcontroller.flowmanager.web.FlowWebRoutable;
-import net.onrc.onos.ofcontroller.routing.TopoRouteService;
+import net.onrc.onos.ofcontroller.topology.TopologyManager;
 import net.onrc.onos.ofcontroller.util.*;
 
 import org.easymock.EasyMock;
@@ -43,7 +43,7 @@
 public class FlowManagerTest {
 	private static FloodlightModuleContext context;
 	private static IFloodlightProviderService floodlightProvider;
-	private static TopoRouteService topoRouteService;
+	private static TopologyManager topologyManager;
 	private static IRestApiService restApi;
 	private static GraphDBOperation op;
 	
@@ -68,7 +68,7 @@
 		// create mock objects
 		context = createMock(FloodlightModuleContext.class);
 		floodlightProvider = createMock(IFloodlightProviderService.class);
-		topoRouteService = createMock(TopoRouteService.class);
+		topologyManager = createMock(TopologyManager.class);
 		restApi = createMock(IRestApiService.class);
 		op = createMock(GraphDBOperation.class);
 
@@ -76,7 +76,7 @@
 		expect(context.getServiceImpl(IFloodlightProviderService.class)).andReturn(floodlightProvider);
 		expect(context.getServiceImpl(IRestApiService.class)).andReturn(restApi);
 		expectNew(GraphDBOperation.class, new Class<?>[] {String.class}, EasyMock.isA(String.class)).andReturn(op);
-		expectNew(TopoRouteService.class, new Class<?>[] {String.class}, EasyMock.isA(String.class)).andReturn(topoRouteService);
+		expectNew(TopologyManager.class, new Class<?>[] {String.class}, EasyMock.isA(String.class)).andReturn(topologyManager);
 	}
 	
 	private IFlowPath createIFlowPathMock(long flowId, String installerID,
diff --git a/src/test/java/net/onrc/onos/ofcontroller/routing/TopoRouteServiceTest.java b/src/test/java/net/onrc/onos/ofcontroller/topology/TopologyManagerTest.java
similarity index 81%
rename from src/test/java/net/onrc/onos/ofcontroller/routing/TopoRouteServiceTest.java
rename to src/test/java/net/onrc/onos/ofcontroller/topology/TopologyManagerTest.java
index 7929eb1..fbec59e 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/routing/TopoRouteServiceTest.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/topology/TopologyManagerTest.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.ofcontroller.routing;
+package net.onrc.onos.ofcontroller.topology;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -20,7 +20,7 @@
 import net.onrc.onos.graph.GraphDBConnection;
 import net.onrc.onos.graph.GraphDBOperation;
 import net.onrc.onos.ofcontroller.core.internal.TestDatabaseManager;
-import net.onrc.onos.ofcontroller.routing.TopoRouteService;
+import net.onrc.onos.ofcontroller.topology.TopologyManager;
 import net.onrc.onos.ofcontroller.util.DataPath;
 import net.onrc.onos.ofcontroller.util.Dpid;
 import net.onrc.onos.ofcontroller.util.FlowPathFlags;
@@ -28,17 +28,17 @@
 import net.onrc.onos.ofcontroller.util.SwitchPort;
 
 /**
- * A class for testing the TopoRouteService class.
- * @see net.onrc.onos.ofcontroller.routing.TopoRouteService
+ * A class for testing the TopologyManager class.
+ * @see net.onrc.onos.ofcontroller.topology.TopologyManager
  */
 @RunWith(PowerMockRunner.class)
-@PrepareForTest({TitanFactory.class, GraphDBConnection.class, GraphDBOperation.class, TopoRouteService.class})
-public class TopoRouteServiceTest {
+@PrepareForTest({TitanFactory.class, GraphDBConnection.class, GraphDBOperation.class, TopologyManager.class})
+public class TopologyManagerTest {
     String conf;
     private GraphDBConnection conn = null;
     private GraphDBOperation oper = null;
     private TitanGraph titanGraph = null;
-    private TopoRouteService topoRouteService = null;
+    private TopologyManager topologyManager = null;
 
     /**
      * Setup the tests.
@@ -63,9 +63,9 @@
 	// Populate the database
 	TestDatabaseManager.populateTestData(titanGraph);
 
-	// Prepare the TopoRouteService instance
-	topoRouteService = new TopoRouteService();
-	topoRouteService.setDbOperationHandler(oper);
+	// Prepare the TopologyManager instance
+	topologyManager = new TopologyManager();
+	topologyManager.setDbOperationHandler(oper);
     }
 
     /**
@@ -78,9 +78,9 @@
     }
 
     /**
-     * Test method TopoRouteService.getTopoShortestPath()
+     * Test method TopologyManager.getTopoShortestPath()
      *
-     * @see net.onrc.onos.ofcontroller.routing.TopoRouteService#getTopoShortestPath
+     * @see net.onrc.onos.ofcontroller.topology.TopologyManager#getTopoShortestPath
      */
     @Test
     public void test_getTopoShortestPath() {
@@ -104,10 +104,10 @@
 	// Test a valid Shortest-Path computation
 	//
 	Map<Long, ?> shortestPathTopo =
-	    topoRouteService.prepareShortestPathTopo();
-	dataPath = topoRouteService.getTopoShortestPath(shortestPathTopo,
-							srcSwitchPort,
-							dstSwitchPort);
+	    topologyManager.prepareShortestPathTopo();
+	dataPath = topologyManager.getTopoShortestPath(shortestPathTopo,
+						       srcSwitchPort,
+						       dstSwitchPort);
 	assertTrue(dataPath != null);
 	String dataPathSummaryStr = dataPath.dataPathSummary();
 	// System.out.println(dataPathSummaryStr);
@@ -134,18 +134,18 @@
 	String noSuchDpidStr = "ff:ff:00:00:00:00:0a:06";
 	Dpid noSuchDstDpid = new Dpid(noSuchDpidStr);
 	SwitchPort noSuchDstSwitchPort = new SwitchPort(noSuchDstDpid, dstPort);
-	dataPath = topoRouteService.getTopoShortestPath(shortestPathTopo,
-							srcSwitchPort,
-							noSuchDstSwitchPort);
+	dataPath = topologyManager.getTopoShortestPath(shortestPathTopo,
+						       srcSwitchPort,
+						       noSuchDstSwitchPort);
 	assertTrue(dataPath == null);
 
-	topoRouteService.dropShortestPathTopo(shortestPathTopo);
+	topologyManager.dropShortestPathTopo(shortestPathTopo);
     }
 
     /**
-     * Test method TopoRouteService.getShortestPath()
+     * Test method TopologyManager.getShortestPath()
      *
-     * @see net.onrc.onos.ofcontroller.routing.TopoRouteService#getShortestPath
+     * @see net.onrc.onos.ofcontroller.routing.TopologyManager#getShortestPath
      */
     @Test
     public void test_getShortestPath() {
@@ -168,8 +168,8 @@
 	//
 	// Test a valid Shortest-Path computation
 	//
-	dataPath = topoRouteService.getShortestPath(srcSwitchPort,
-						dstSwitchPort);
+	dataPath = topologyManager.getShortestPath(srcSwitchPort,
+						   dstSwitchPort);
 	assertTrue(dataPath != null);
 	String dataPathSummaryStr = dataPath.dataPathSummary();
 	// System.out.println(dataPathSummaryStr);
@@ -197,15 +197,15 @@
 	Dpid noSuchDstDpid = new Dpid(noSuchDpidStr);
 	SwitchPort noSuchDstSwitchPort = new SwitchPort(noSuchDstDpid, dstPort);
 
-	dataPath = topoRouteService.getShortestPath(srcSwitchPort,
-						    noSuchDstSwitchPort);
+	dataPath = topologyManager.getShortestPath(srcSwitchPort,
+						   noSuchDstSwitchPort);
 	assertTrue(dataPath == null);
     }
 
     /**
-     * Test method TopoRouteService.routeExists()
+     * Test method TopologyManager.routeExists()
      *
-     * @see net.onrc.onos.ofcontroller.routing.TopoRouteService#routeExists
+     * @see net.onrc.onos.ofcontroller.routing.TopologyManager#routeExists
      */
     @Test
     public void test_routeExists() {
@@ -228,7 +228,7 @@
 	//
 	// Test a valid route
 	//
-	result = topoRouteService.routeExists(srcSwitchPort, dstSwitchPort);
+	result = topologyManager.routeExists(srcSwitchPort, dstSwitchPort);
 	assertTrue(result == true);
 
 	//
@@ -237,8 +237,8 @@
 	String noSuchDpidStr = "ff:ff:00:00:00:00:0a:06";
 	Dpid noSuchDstDpid = new Dpid(noSuchDpidStr);
 	SwitchPort noSuchDstSwitchPort = new SwitchPort(noSuchDstDpid, dstPort);
-	result = topoRouteService.routeExists(srcSwitchPort,
-					      noSuchDstSwitchPort);
+	result = topologyManager.routeExists(srcSwitchPort,
+					     noSuchDstSwitchPort);
 	assertTrue(result != true);
     }
 }
diff --git a/start-onos.sh b/start-onos.sh
index 7005985..495141d 100755
--- a/start-onos.sh
+++ b/start-onos.sh
@@ -34,6 +34,7 @@
 		-Dcom.sun.management.jmxremote.port=7189 \
 		-Dcom.sun.management.jmxremote.ssl=false \
 		-Dcom.sun.management.jmxremote.authenticate=false"
+JVM_OPTS="$JVM_OPTS -Dhazelcast.logging.type=slf4j"
 
 # Set ONOS core main class
 MAIN_CLASS="net.onrc.onos.ofcontroller.core.Main"