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 a3cb17b..64e2447 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
@@ -42,7 +42,6 @@
 import net.onrc.onos.ofcontroller.core.internal.DeviceStorageImpl;
 import net.onrc.onos.ofcontroller.core.internal.TopoLinkServiceImpl;
 import net.onrc.onos.ofcontroller.core.internal.TopoSwitchServiceImpl;
-import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscovery;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscovery.LDUpdate;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryService;
@@ -101,7 +100,6 @@
 	private ILinkDiscoveryService linkDiscoveryService;
 	private IRestApiService restApi;
 	private IProxyArpService proxyArp;
-	protected volatile IFlowService flowManagerService;
 	private IDeviceStorage deviceStorage;
 	private ITopoSwitchService topoSwitchService;
 
@@ -283,7 +281,6 @@
 		topologyService = context.getServiceImpl(ITopologyService.class);
 		linkDiscoveryService = context.getServiceImpl(ILinkDiscoveryService.class);
 		restApi = context.getServiceImpl(IRestApiService.class);
-		flowManagerService = context.getServiceImpl(IFlowService.class);
 		proxyArp = context.getServiceImpl(IProxyArpService.class);
 
 		deviceStorage = new DeviceStorageImpl();
@@ -590,6 +587,8 @@
 			flowPath.setFlowEntryActions(flowEntryActions);
 
 			// Flow Path installation, only to first hop switches
+			// TODO: Add the flow by using the new Path Intent framework
+			/*
 			if (flowManagerService.addFlow(flowPath) == null) {
 				log.error("Failed to install flow path to the first hop for " +
 						"prefix: {}, nextHopMacAddress: {}", prefix.getAddress(),
@@ -602,6 +601,7 @@
 
 				pushedFlowIds.put(prefix, flowPath.flowId());
 			}
+			*/
 		}
 	}
 
@@ -646,6 +646,8 @@
 
 		Collection<FlowId> flowIds = pushedFlowIds.removeAll(prefix);
 		for (FlowId flowId : flowIds) {
+		    // TODO: Delete the flow by using the new Path Intent framework
+		    /*
 			if (log.isTraceEnabled()) {
 				//Trace the flow status by flowPath in the switch before deleting it
 				log.trace("Pushing a DELETE flow mod to flowPath : {}",
@@ -660,6 +662,7 @@
 			{
 				log.debug("Failed to delete FlowId: {}",flowId);
 			}
+		    */
 		}
 	}
 
@@ -785,6 +788,8 @@
 			// NOTE: No need to add ACTION_OUTPUT. It is implied when creating
 			// Shortest Path Flow, and is always the last action for the Flow Entries
 			log.debug("FlowPath of MAC based forwarding: {}", flowPath.toString());
+			// TODO: Add the flow by using the new Path Intent framework
+			/*
 			if (flowManagerService.addFlow(flowPath) == null) {
 				log.error("Failed to set up MAC based forwarding path to {}, {}",
 						path.getDstIpAddress().getHostAddress(),dstMacAddress);
@@ -793,6 +798,7 @@
 				log.debug("Successfully set up MAC based forwarding path to {}, {}",
 						path.getDstIpAddress().getHostAddress(),dstMacAddress);
 			}
+			*/
 		}
 	}
 
@@ -853,6 +859,8 @@
 
 			flowPath.setDataPath(dataPath);
 
+			// TODO: Add the flow by using the new Path Intent framework
+			/*
 			if (flowManagerService.addFlow(flowPath) == null) {
 				log.error("Failed to set up path BGP -> peer {}"+"; dst-TCP-port:179",
 						bgpPeer.getIpAddress().getHostAddress());
@@ -861,6 +869,7 @@
 				log.debug("Successfully set up path BGP -> peer {}"+"; dst-TCP-port:179",
 						bgpPeer.getIpAddress().getHostAddress());
 			}
+			*/
 
 			// Disable dst-TCP-port, and set src-TCP-port
 			flowEntryMatch.disableDstTcpUdpPort();
@@ -870,6 +879,8 @@
 			// Create a new FlowId
 			flowPath.setFlowId(new FlowId());
 
+			// TODO: Add the flow by using the new Path Intent framework
+			/*
 			if (flowManagerService.addFlow(flowPath) == null) {
 				log.error("Failed to set up path BGP -> Peer {}" + "; src-TCP-port:179",
 						bgpPeer.getIpAddress().getHostAddress());
@@ -878,6 +889,7 @@
 				log.debug("Successfully set up path BGP -> Peer {}" + "; src-TCP-port:179",
 						bgpPeer.getIpAddress().getHostAddress());
 			}
+			*/
 
 			/**
 			 * Create the DataPath: BGP <-BGP peer
@@ -905,6 +917,8 @@
 
 			log.debug("Reversed BGP FlowPath: {}", flowPath.toString());
 
+			// TODO: Add the flow by using the new Path Intent framework
+			/*
 			if (flowManagerService.addFlow(flowPath) == null) {
 
 				log.error("Failed to set up path BGP <- Peer {}" + "; src-TCP-port:179",
@@ -914,6 +928,7 @@
 				log.debug("Successfully set up path BGP <- Peer {}" + "; src-TCP-port:179",
 						bgpPeer.getIpAddress().getHostAddress());
 			}
+			*/
 
 			// Reversed BGP flow path for dst-TCP-port
 			flowPath.setFlowId(new FlowId());
@@ -925,6 +940,8 @@
 
 			log.debug("Reversed BGP FlowPath: {}", flowPath.toString());
 
+			// TODO: Add the flow by using the new Path Intent framework
+			/*
 			if (flowManagerService.addFlow(flowPath) == null) {
 				log.error("Failed to setting up path BGP <- Peer {}" + "; dst-TCP-port:179",
 						bgpPeer.getIpAddress().getHostAddress());
@@ -933,6 +950,7 @@
 				log.debug("Successfully setting up path BGP <- Peer {}" + "; dst-TCP-port:179",
 						bgpPeer.getIpAddress().getHostAddress());
 			}
+			*/
 
 			/**
 			 * ICMP paths between BGPd and its peers
@@ -950,6 +968,8 @@
 
 			log.debug("Reversed ICMP FlowPath: {}", flowPath.toString());
 
+			// TODO: Add the flow by using the new Path Intent framework
+			/*
 			if (flowManagerService.addFlow(flowPath) == null) {
 
 				log.error("Failed to set up ICMP path BGP <- Peer {}",
@@ -959,6 +979,7 @@
 				log.debug("Successfully set up ICMP path BGP <- Peer {}",
 						bgpPeer.getIpAddress().getHostAddress());
 			}
+			*/
 
 			//match ICMP protocol BGP -> Peer
 			flowPath.setFlowId(new FlowId());
@@ -971,7 +992,8 @@
 
 			log.debug("ICMP flowPath: {}", flowPath.toString());
 
-
+			// TODO: Add the flow by using the new Path Intent framework
+			/*
 			if (flowManagerService.addFlow(flowPath) == null) {
 
 				log.error("Failed to set up ICMP path BGP -> Peer {}",
@@ -981,6 +1003,7 @@
 				log.debug("Successfully set up ICMP path BGP -> Peer {}",
 						bgpPeer.getIpAddress().getHostAddress());
 			}
+			*/
 		}
 	}
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowProgrammer.java b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowProgrammer.java
index 4915cc7..eb65669 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowProgrammer.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowProgrammer.java
@@ -22,7 +22,6 @@
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.restserver.IRestApiService;
 import net.onrc.onos.ofcontroller.flowprogrammer.web.FlowProgrammerWebRoutable;
-import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
 import net.onrc.onos.ofcontroller.util.FlowEntryId;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
 
@@ -43,12 +42,11 @@
 				       IOFMessageListener,
 				       IOFSwitchListener {
     // flag to enable FlowSynchronizer
-    private static final boolean enableFlowSync = true;
+    private static final boolean enableFlowSync = false;
     protected static final Logger log = LoggerFactory.getLogger(FlowProgrammer.class);
     protected volatile IFloodlightProviderService floodlightProvider;
     protected volatile IControllerRegistryService registryService;
     protected volatile IRestApiService restApi;
-    protected volatile IFlowService flowManager;
 
     protected FlowPusher pusher;
     private static final int NUM_PUSHER_THREAD = 1;
@@ -68,7 +66,6 @@
 	floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class);
 	registryService = context.getServiceImpl(IControllerRegistryService.class);
 	restApi = context.getServiceImpl(IRestApiService.class);
-	flowManager = context.getServiceImpl(IFlowService.class);
 	pusher.init(null, context, floodlightProvider.getOFMessageFactory(), null);
 	if (enableFlowSync) {
 	    synchronizer.init(pusher);
@@ -141,7 +138,7 @@
 	    OFFlowRemoved flowMsg = (OFFlowRemoved) msg;
 	    FlowEntryId id = new FlowEntryId(flowMsg.getCookie());
 	    log.debug("Got flow entry removed from {}: {}",sw.getId(), id);
-	    flowManager.flowEntryOnSwitchExpired(sw, id);
+	    // TODO: Inform the Forwarding module that a flow has expired
 	    break;
 	default:
 	    break;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowSynchronizer.java b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowSynchronizer.java
index c1571c8..6e30a88 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowSynchronizer.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowSynchronizer.java
@@ -28,7 +28,6 @@
 import net.onrc.onos.graph.GraphDBManager;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
-import net.onrc.onos.ofcontroller.flowmanager.FlowDatabaseOperation;
 import net.onrc.onos.ofcontroller.flowprogrammer.IFlowPusherService.MsgPriority;
 import net.onrc.onos.ofcontroller.util.Dpid;
 import net.onrc.onos.ofcontroller.util.FlowEntry;
@@ -290,6 +289,10 @@
 	    }
 	    dbTime = System.nanoTime() - startDB;
 
+	    //
+	    // TODO: The old FlowDatabaseOperation class is gone, so the code
+	    //
+	    /*
 	    double startExtract = System.nanoTime();
 	    FlowEntry flowEntry =
 		FlowDatabaseOperation.extractFlowEntry(iFlowEntry);
@@ -303,6 +306,7 @@
 	    double startPush = System.nanoTime();
 	    pusher.pushFlowEntry(sw, flowEntry, MsgPriority.HIGH);
 	    pushTime = System.nanoTime() - startPush;
+	    */
 	}
 
 	/**
diff --git a/src/main/java/net/onrc/onos/ofcontroller/forwarding/Forwarding.java b/src/main/java/net/onrc/onos/ofcontroller/forwarding/Forwarding.java
index 5ddee15..a220c43 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/forwarding/Forwarding.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/forwarding/Forwarding.java
@@ -26,7 +26,6 @@
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
 import net.onrc.onos.ofcontroller.core.internal.DeviceStorageImpl;
 import net.onrc.onos.ofcontroller.devicemanager.IOnosDeviceService;
-import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
 import net.onrc.onos.ofcontroller.flowprogrammer.IFlowPusherService;
 import net.onrc.onos.ofcontroller.proxyarp.BroadcastPacketOutNotification;
 import net.onrc.onos.ofcontroller.proxyarp.IProxyArpService;
@@ -72,7 +71,6 @@
 	private final CallerId callerId = new CallerId("Forwarding");
 	
 	private IFloodlightProviderService floodlightProvider;
-	private IFlowService flowService;
 	private IFlowPusherService flowPusher;
 	private IDatagridService datagrid;
 	private IControllerRegistryService controllerRegistryService;
@@ -162,7 +160,6 @@
 		List<Class<? extends IFloodlightService>> dependencies = 
 				new ArrayList<Class<? extends IFloodlightService>>();
 		dependencies.add(IFloodlightProviderService.class);
-		dependencies.add(IFlowService.class);
 		dependencies.add(IFlowPusherService.class);
 		dependencies.add(IOnosDeviceService.class);
 		dependencies.add(IControllerRegistryService.class);
@@ -176,7 +173,6 @@
 	public void init(FloodlightModuleContext context) {
 		floodlightProvider = 
 				context.getServiceImpl(IFloodlightProviderService.class);
-		flowService = context.getServiceImpl(IFlowService.class);
 		flowPusher = context.getServiceImpl(IFlowPusherService.class);
 		datagrid = context.getServiceImpl(IDatagridService.class);
 		controllerRegistryService = context.getServiceImpl(IControllerRegistryService.class);
@@ -430,7 +426,8 @@
 
 		log.debug("Adding forward {} to {}. Flow ID {}", new Object[] {
 				srcMacAddress, dstMacAddress, flowPath.flowId()});
-		flowService.addFlow(flowPath);
+		// TODO: Add the flow by using the new Path Intent framework
+		// flowService.addFlow(flowPath);
 	}
 
 	private OFPacketOut constructPacketOut(OFPacketIn pi, IOFSwitch sw) {	
diff --git a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
index cbb4b17..5ab79ed 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
@@ -60,8 +60,6 @@
 import net.floodlightcontroller.test.FloodlightTestCase;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
 import net.onrc.onos.ofcontroller.core.IOFSwitchPortListener;
-import net.onrc.onos.ofcontroller.flowmanager.FlowManager;
-import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryService;
 import net.onrc.onos.ofcontroller.linkdiscovery.internal.LinkDiscoveryManager;
 import net.onrc.onos.ofcontroller.topology.ITopologyNetService;
@@ -121,7 +119,6 @@
         
         // Following added by ONOS
         // TODO replace with mock if further testing is needed.
-        fmc.addService(IFlowService.class, new FlowManager() );
         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/flowprogrammer/FlowSynchronizerTest.java b/src/test/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowSynchronizerTest.java
index 28f221d..a1398ee 100644
--- a/src/test/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowSynchronizerTest.java
+++ b/src/test/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowSynchronizerTest.java
@@ -12,7 +12,6 @@
 import net.onrc.onos.graph.DBOperation;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
-import net.onrc.onos.ofcontroller.flowmanager.FlowDatabaseOperation;
 import net.onrc.onos.ofcontroller.flowprogrammer.IFlowPusherService.MsgPriority;
 import net.onrc.onos.ofcontroller.flowprogrammer.IFlowSyncService.SyncResult;
 import net.onrc.onos.ofcontroller.util.FlowEntry;
@@ -39,7 +38,7 @@
 // Test should be fixed to fit RAMCloud basis
 @Ignore
 @RunWith(PowerMockRunner.class)
-@PrepareForTest({FlowSynchronizer.class, DBOperation.class, FlowDatabaseOperation.class})
+@PrepareForTest({FlowSynchronizer.class, DBOperation.class})
 public class FlowSynchronizerTest {
 	private FlowPusher pusher;
 	private FlowSynchronizer sync;
@@ -257,6 +256,11 @@
 	 * @param idList List of FlowEntry IDs stored in DB.
 	 */
 	private void initMockGraph(long[] idList) {
+	    /*
+	     * TODO: The old FlowDatabaseOperation class is gone, so the method
+	     * below needs to be rewritten.
+	     */
+	    /*
 		List<IFlowEntry> flowEntryList = new ArrayList<IFlowEntry>();
 		
 		for (long id : idList) {
@@ -301,6 +305,7 @@
 			fail("Failed to create DBOperation");
 		}
 		PowerMock.replay(DBOperation.class);
+	    */
 	}
 	
 	/**
