diff --git a/src/main/java/net/onrc/onos/core/flowmanager/FlowBatchMap.java b/src/main/java/net/onrc/onos/core/flowmanager/FlowBatchMap.java
new file mode 100644
index 0000000..6886d68
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/flowmanager/FlowBatchMap.java
@@ -0,0 +1,92 @@
+package net.onrc.onos.core.flowmanager;
+
+import java.util.Set;
+
+import net.onrc.onos.api.flowmanager.FlowBatchId;
+import net.onrc.onos.api.flowmanager.FlowBatchOperation;
+import net.onrc.onos.api.flowmanager.FlowBatchState;
+
+/**
+ * Interface of the flow batch map.
+ */
+interface FlowBatchMap {
+    /**
+     * Gets {@link FlowBatchOperation} object having {@link FlowBatchId} as its
+     * ID from the map.
+     *
+     * @param id the {@link FlowBatchId} to be used for getting the object
+     * @return {@link FlowBatchOperation} object if exists, null otherwise
+     */
+    FlowBatchOperation get(FlowBatchId id);
+
+    /**
+     * Puts {@link FlowBatchOperation} object to the map.
+     *
+     * @param id the {@link FlowBatchId} to be used for the object
+     * @param flowOp the {@link FlowBatchOperation} object
+     * @return true if the object was successfully added
+     */
+    boolean put(FlowBatchId id, FlowBatchOperation flowOp);
+
+    /**
+     * Removes {@link FlowBatchOperation} object from the map.
+     *
+     * @param id the {@link FlowBatchId} to be used for removing the object
+     * @return the removed {@link FlowBatchOperation} object if exists, null
+     *         otherwise
+     */
+    FlowBatchOperation remove(FlowBatchId id);
+
+    /**
+     * Gets all {@link FlowBatchOperation} objects existing in the map.
+     * <p>
+     * The changes to the returned set does not affect the original map.
+
+     * @return a set of {@link FlowBatchOperation} objects
+     */
+    Set<FlowBatchOperation> getAll();
+
+    /**
+     * Sets {@link FlowBatchState} to the specified {@link FlowBatchOperation}
+     * object.
+     *
+     * @param id the {@link FlowBatchId} of the {@link FlowBatchOperation}
+     * @param state the {@link FlowBatchState} to be set
+     * @param expectedState the {@link FlowBatchState} expected as the previous
+     *        state
+     * @return true if the ID existed, the previous state was the expected state
+     *         and successfully updated the state
+     */
+    boolean setState(FlowBatchId id, FlowBatchState state, FlowBatchState expectedState);
+
+    /**
+     * Gets {@link FlowBatchState} of the specified {@link FlowBatchOperation}
+     * object.
+     *
+     * @param id the {@link FlowBatchId} of the {@link FlowBatchOperation}
+     * @return the {@link FlowBatchState} of the {@link FlowBatchOperation} or
+     *         null if the object does not exist
+     */
+    FlowBatchState getState(FlowBatchId id);
+
+    /**
+     * Adds a listener for listening events related to the map.
+     *
+     * @param listener the {@link FlowBatchMapEventListener} to be added
+     */
+    void addListener(FlowBatchMapEventListener listener);
+
+    /**
+     * Removes a listener for listening events related to the map.
+     *
+     * @param listener the {@link FlowBatchMapEventListener} to be removed
+     */
+    void removeListener(FlowBatchMapEventListener listener);
+
+    /**
+     * Checks if this instance is a leader of the map.
+     *
+     * @return true if it is leader, false otherwise
+     */
+    boolean isLeader();
+}
diff --git a/src/main/java/net/onrc/onos/core/flowmanager/FlowBatchMapEventListener.java b/src/main/java/net/onrc/onos/core/flowmanager/FlowBatchMapEventListener.java
new file mode 100644
index 0000000..93a0bdf
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/flowmanager/FlowBatchMapEventListener.java
@@ -0,0 +1,34 @@
+package net.onrc.onos.core.flowmanager;
+
+import net.onrc.onos.api.flowmanager.FlowBatchId;
+import net.onrc.onos.api.flowmanager.FlowBatchOperation;
+import net.onrc.onos.api.flowmanager.FlowBatchState;
+
+interface FlowBatchMapEventListener {
+    /**
+     * Invoked when a {@link FlowBatchOperation} object is added.
+     *
+     * @param id the ID of the {@link FlowBatchOperation}.
+     * @param flowOp the {@link FlowBatchOperation} object.
+     */
+    void flowBatchOperationAdded(FlowBatchId id, FlowBatchOperation flowOp);
+
+    /**
+     * Invoked when a {@link FlowBatchOperation} object is removed.
+     *
+     * @param id the ID of the {@link FlowBatchOperation}.
+     */
+    void flowBatchOperationRemoved(FlowBatchId id);
+
+    /**
+     * Invoked when a {@link FlowBatchState} of a {@link FlowBatchOperation}
+     * object is changed.
+     *
+     * @param id the ID of the {@link FlowBatchOperation}
+     * @param oldState the old state of the {@link FlowBatchOperation}
+     * @param currentState the current state of the {@link FlowBatchOperation}
+     */
+    void flowStateChanged(FlowBatchId id,
+            FlowBatchState oldState, FlowBatchState currentState);
+
+}
diff --git a/src/main/java/net/onrc/onos/core/flowmanager/FlowMap.java b/src/main/java/net/onrc/onos/core/flowmanager/FlowMap.java
new file mode 100644
index 0000000..edd6ab5
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/flowmanager/FlowMap.java
@@ -0,0 +1,79 @@
+package net.onrc.onos.core.flowmanager;
+
+import java.util.Set;
+
+import net.onrc.onos.api.flowmanager.Flow;
+import net.onrc.onos.api.flowmanager.FlowId;
+import net.onrc.onos.api.flowmanager.FlowState;
+
+/**
+ * Interface of the flow map.
+ */
+interface FlowMap {
+    /**
+     * Gets {@link Flow} object having {@link FlowId} as its ID from the map.
+     *
+     * @param id the {@link FlowId} to be used for getting the object
+     * @return {@link Flow} object if exists, null otherwise
+     */
+    Flow get(FlowId id);
+
+    /**
+     * Puts {@link Flow} object to the map.
+     *
+     * @param flow the {@link Flow} object
+     * @return true if the object was successfully added
+     */
+    boolean put(Flow flow);
+
+    /**
+     * Removes {@link Flow} object from the map.
+     *
+     * @param id the {@link FlowId} to be used for removing the object
+     * @return the removed {@link Flow} object if exists, null otherwise
+     */
+    Flow remove(FlowId id);
+
+    /**
+     * Gets all {@link Flow} objects existing in the map.
+     * <p>
+     * The changes to the returned set does not affect the original map.
+     *
+     * @return a set of {@link Flow} objects
+     */
+    Set<Flow> getAll();
+
+    /**
+     * Sets {@link FlowState} to the specified {@link Flow} object.
+     *
+     * @param id the {@link FlowId} of the {@link Flow}
+     * @param state the {@link FlowState} to be set
+     * @param expectedState the {@link FlowState} expected as the previous state
+     * @return true if the ID existed, the previous state was the expected state
+     *         and successfully updated the state
+     */
+    boolean setState(FlowId id, FlowState state, FlowState expectedState);
+
+    /**
+     * Gets {@link FlowState} of the specified {@link Flow} object.
+     *
+     * @param id the {@link FlowId} of the {@link Flow}
+     * @return the {@link FlowState} of the {@link Flow} or null if the
+     *         {@link Flow} does not exist
+     */
+    FlowState getState(FlowId id);
+
+    /**
+     * Adds a listener for listening events related to the map.
+     *
+     * @param listener the {@link FlowMapEventListener} to be added
+     */
+    void addListener(FlowMapEventListener listener);
+
+    /**
+     * Removes a listener for listening events related to the map.
+     *
+     * @param listener the {@link FlowMapEventListener} to be removed
+     */
+    void removeListener(FlowMapEventListener listener);
+}
diff --git a/src/main/java/net/onrc/onos/core/flowmanager/FlowMapEventListener.java b/src/main/java/net/onrc/onos/core/flowmanager/FlowMapEventListener.java
new file mode 100644
index 0000000..adc8225
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/flowmanager/FlowMapEventListener.java
@@ -0,0 +1,34 @@
+package net.onrc.onos.core.flowmanager;
+
+import net.onrc.onos.api.flowmanager.Flow;
+import net.onrc.onos.api.flowmanager.FlowId;
+import net.onrc.onos.api.flowmanager.FlowState;
+
+/**
+ * An interface to the event listener of the flow map.
+ */
+interface FlowMapEventListener {
+    /**
+     * Invoked when a {@link Flow} object is added.
+     *
+     * @param id the ID of the {@link Flow}.
+     * @param flow the {@link Flow} object.
+     */
+    void flowAdded(FlowId id, Flow flow);
+
+    /**
+     * Invoked when a {@link Flow} object is removed.
+     *
+     * @param id the ID of the {@link Flow}.
+     */
+    void flowRemoved(FlowId id);
+
+    /**
+     * Invoked when a {@link FlowState} of a {@link Flow} object is changed.
+     *
+     * @param id the ID of the {@link Flow}
+     * @param oldState the old state of the {@link Flow}
+     * @param currentState the current state of the {@link Flow}
+     */
+    void flowStateChanged(FlowId id, FlowState oldState, FlowState currentState);
+}
