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 0e70a9b..1ef4431 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowManager.java
@@ -25,6 +25,8 @@
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
 import net.onrc.onos.ofcontroller.floodlightlistener.INetworkGraphService;
 import net.onrc.onos.ofcontroller.flowmanager.web.FlowWebRoutable;
+import net.onrc.onos.ofcontroller.flowprogrammer.FlowPusher;
+import net.onrc.onos.ofcontroller.flowprogrammer.IFlowPusherService;
 import net.onrc.onos.ofcontroller.topology.ITopologyNetService;
 import net.onrc.onos.ofcontroller.topology.Topology;
 import net.onrc.onos.ofcontroller.topology.TopologyElement;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowQueueTable.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowQueueTable.java
deleted file mode 100644
index 509d55a..0000000
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowQueueTable.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package net.onrc.onos.ofcontroller.flowmanager;
-
-import java.util.ArrayDeque;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
-
-import net.floodlightcontroller.core.IOFSwitch;
-
-import org.openflow.protocol.OFMessage;
-
-/**
- * Represents table of message queues attached to each switch. 
- * Each message should be ADD/DELETE of flow.
- * (MODIFY of flow might be handled, but future work)
- * @author Naoki Shiota
- *
- */
-@Deprecated
-public class FlowQueueTable {
-	
-	public enum QueueState {
-		READY,				// Synchronized and working
-		SYNCHRONIZING,		// Synchronization is running
-//		SUSPENDED,			// Synchronized but stopping sending messages
-	}
-	
-	private class QueueInfo {
-		QueueState state;
-		
-		// Max rate of sending message (bytes/sec). 0 implies no limitation.
-		long max_rate = 0;
-	}
-	
-	private Map< IOFSwitch, Queue<OFMessage> > queues
-		= new HashMap< IOFSwitch, Queue<OFMessage> >();
-	private Map<IOFSwitch, QueueInfo> queue_info
-		= new HashMap<IOFSwitch, QueueInfo>();
-	
-	public FlowQueueTable() {
-		// TODO Auto-generated constructor stub
-	}
-
-	/**
-	 * Add flow queue for given switch.
-	 * @param sw
-	 */
-	public void addSwitchQueue(IOFSwitch sw) {
-		QueueInfo info = new QueueInfo();
-		
-		if (queues.containsKey(sw)) {
-			return;
-		}
-		
-		queues.put(sw, new ArrayDeque<OFMessage>());
-		queue_info.put(sw, info);
-	}
-	
-	/**
-	 * Delete flow queue for given switch.
-	 * @param sw
-	 */
-	public void deleteSwitchQueue(IOFSwitch sw) {
-		if (! queues.containsKey(sw)) {
-			return;
-		}
-		
-		queues.remove(sw);
-		queue_info.remove(sw);
-	}
-
-	/**
-	 * Get flow queue for given switch.
-	 * @param sw
-	 * @return
-	 */
-	public Queue<OFMessage> getQueue(IOFSwitch sw) {
-		return queues.get(sw);
-	}
-	
-	public Set<IOFSwitch> getSwitches() {
-		return queues.keySet();
-	}
-
-	/**
-	 * Get state of flow queue for given switch.
-	 * @param sw
-	 */
-	public QueueState getQueueState(IOFSwitch sw) {
-		QueueInfo info = queue_info.get(sw);
-		if (info == null) {
-			return null;
-		}
-		
-		return info.state;
-	}
-	
-	/**
-	 * Set state of flow queue for given switch.
-	 * @param sw
-	 * @param state
-	 */
-	public void setQueueState(IOFSwitch sw, QueueState state) {
-		QueueInfo info = queue_info.get(sw);
-		if (info == null) {
-			return;
-		}
-		
-		info.state = state;
-	}
-
-	/**
-	 * Get maximum rate for given switch.
-	 * @param sw
-	 */
-	public long getQueueRate(IOFSwitch sw) {
-		QueueInfo info = queue_info.get(sw);
-		if (info == null) {
-			return 0;
-		}
-		
-		return info.max_rate;
-	}
-
-	/**
-	 * Set maximum rate for given switch.
-	 * @param sw
-	 * @param rate
-	 */
-	public void setQueueRate(IOFSwitch sw, long rate) {
-		QueueInfo info = queue_info.get(sw);
-		if (info == null) {
-			return;
-		}
-		
-		info.max_rate = rate;
-	}
-	
-	/**
-	 * Get a lock for queue for given switch.
-	 * If locked already, wait for unlock.
-	 * @param sw
-	 */
-	public void lockQueue(IOFSwitch sw) {
-		// TODO not yet implement
-	}
-
-	/**
-	 * Get a lock for queue for given switch.
-	 * If locked already, return false at once.
-	 * @param sw
-	 * @return
-	 */
-	public boolean lockQueueIfAvailable(IOFSwitch sw) {
-		// TODO not yet implement
-		return false;
-	}
-
-	/** Release a lock for queue for given switch.
-	 * @param sw
-	 */
-	public void unlockQueue(IOFSwitch sw) {
-		// TODO not yet implement
-	}
-}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowPusher.java b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowPusher.java
similarity index 99%
rename from src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowPusher.java
rename to src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowPusher.java
index 0f56c54..cb47f0b 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowPusher.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowPusher.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.ofcontroller.flowmanager;
+package net.onrc.onos.ofcontroller.flowprogrammer;
 
 import java.io.IOException;
 import java.util.ArrayDeque;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/IFlowPusherService.java b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/IFlowPusherService.java
similarity index 93%
rename from src/main/java/net/onrc/onos/ofcontroller/flowmanager/IFlowPusherService.java
rename to src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/IFlowPusherService.java
index 830d47f..146f19c 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/IFlowPusherService.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/IFlowPusherService.java
@@ -1,4 +1,4 @@
-package net.onrc.onos.ofcontroller.flowmanager;
+package net.onrc.onos.ofcontroller.flowprogrammer;
 
 import net.floodlightcontroller.core.IOFSwitch;
 import net.floodlightcontroller.core.module.IFloodlightService;
