diff --git a/src/main/java/net/onrc/onos/api/flowmanager/Flow.java b/src/main/java/net/onrc/onos/api/flowmanager/Flow.java
index 50c9d16..0622be6 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/Flow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/Flow.java
@@ -1,7 +1,7 @@
 package net.onrc.onos.api.flowmanager;
 
 import net.onrc.onos.api.batchoperation.BatchOperationTarget;
-import net.onrc.onos.core.matchaction.MatchActionPlan;
+import net.onrc.onos.core.matchaction.MatchActionOperations;
 import net.onrc.onos.core.matchaction.match.Match;
 
 /**
@@ -29,9 +29,9 @@
     /**
      * Compiles this object to MatchAction plan.
      * <p>
-     * This method is called by FlowManagerModule to create MatchAction plans.
+     * This method is called by FlowManagerModule to create MatchAction operations.
      *
      * @return a MatchAction plan of this flow object.
      */
-    public MatchActionPlan compile();
+    public MatchActionOperations compile();
 }
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/OpticalPathFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/OpticalPathFlow.java
index 1b37d7f..9de82c5 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/OpticalPathFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/OpticalPathFlow.java
@@ -2,7 +2,7 @@
 
 import java.util.List;
 
-import net.onrc.onos.core.matchaction.MatchActionPlan;
+import net.onrc.onos.core.matchaction.MatchActionOperations;
 import net.onrc.onos.core.matchaction.action.Action;
 import net.onrc.onos.core.util.PortNumber;
 
@@ -41,7 +41,7 @@
     }
 
     @Override
-    public MatchActionPlan compile() {
+    public MatchActionOperations compile() {
         // TODO Auto-generated method stub
         return super.compile();
     }
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/PacketPathFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/PacketPathFlow.java
index 5f3aa31..3c6bd6d 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/PacketPathFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/PacketPathFlow.java
@@ -2,7 +2,7 @@
 
 import java.util.List;
 
-import net.onrc.onos.core.matchaction.MatchActionPlan;
+import net.onrc.onos.core.matchaction.MatchActionOperations;
 import net.onrc.onos.core.matchaction.action.Action;
 import net.onrc.onos.core.matchaction.match.PacketMatch;
 import net.onrc.onos.core.util.PortNumber;
@@ -54,7 +54,7 @@
     }
 
     @Override
-    public MatchActionPlan compile() {
+    public MatchActionOperations compile() {
         // TODO Auto-generated method stub
         return super.compile();
     }
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/PathFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/PathFlow.java
index b09d8bf..d1b10f6 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/PathFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/PathFlow.java
@@ -2,7 +2,7 @@
 
 import java.util.List;
 
-import net.onrc.onos.core.matchaction.MatchActionPlan;
+import net.onrc.onos.core.matchaction.MatchActionOperations;
 import net.onrc.onos.core.matchaction.action.Action;
 import net.onrc.onos.core.matchaction.match.Match;
 import net.onrc.onos.core.util.PortNumber;
@@ -50,7 +50,7 @@
     }
 
     @Override
-    public MatchActionPlan compile() {
+    public MatchActionOperations compile() {
         // TODO Auto-generated method stub
         return null;
     }
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
index 58c5b38..3587eb1 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
@@ -5,7 +5,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import net.onrc.onos.core.matchaction.MatchActionPlan;
+import net.onrc.onos.core.matchaction.MatchActionOperations;
 import net.onrc.onos.core.matchaction.action.OutputAction;
 import net.onrc.onos.core.matchaction.match.PacketMatch;
 import net.onrc.onos.core.util.SwitchPort;
@@ -56,7 +56,7 @@
     }
 
     @Override
-    public MatchActionPlan compile() {
+    public MatchActionOperations compile() {
         // TODO Auto-generated method stub
         return null;
     }
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/SingleSrcTreeFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/SingleSrcTreeFlow.java
index b9fdb88..e39006a 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/SingleSrcTreeFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/SingleSrcTreeFlow.java
@@ -2,7 +2,7 @@
 
 import java.util.Set;
 
-import net.onrc.onos.core.matchaction.MatchActionPlan;
+import net.onrc.onos.core.matchaction.MatchActionOperations;
 import net.onrc.onos.core.matchaction.action.OutputAction;
 import net.onrc.onos.core.matchaction.match.PacketMatch;
 import net.onrc.onos.core.util.Dpid;
@@ -53,7 +53,7 @@
     }
 
     @Override
-    public MatchActionPlan compile() {
+    public MatchActionOperations compile() {
         // TODO Auto-generated method stub
         return null;
     }
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionEvent.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionEvent.java
index a711d46..485bdc5 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionEvent.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionEvent.java
@@ -11,14 +11,14 @@
     /**
      * TODO.
      *
-     * @return
+     * @return Match Action ID (This is a WIP).
      */
     public MatchActionId getId();
 
     /**
      * TODO.
      *
-     * @return
+     * @return Match Action Status (This is a WIP).
      */
     public MatchActionStatus getStatus();
 
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationsEvent.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationsEvent.java
index fd8acfc..2ee1ea0 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationsEvent.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationsEvent.java
@@ -8,14 +8,14 @@
     /**
      * TODO.
      *
-     * @return
+     * @return Match Action Operations Id (this is a WIP).
      */
     public MatchActionOperationsId getId();
 
     /**
      * TODO.
      *
-     * @return
+     * @return Match Action Operations State (this is a WIP).
      */
     public MatchActionOperationsState getState();
 
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionPlan.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionPlan.java
deleted file mode 100644
index 2ca52be..0000000
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionPlan.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.onrc.onos.core.matchaction;
-
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * A match-action plan to be executed on the match-action module.
- * <p>
- * The plan is a list of phases, and the phase is a batch operation of
- * match-actions.
- */
-public class MatchActionPlan {
-    List<MatchAction> phases;
-
-    /**
-     * Constructor.
-     */
-    public MatchActionPlan() {
-        phases = new LinkedList<>();
-    }
-
-    /**
-     * Adds the specified phase to the plan.
-     *
-     * @param phase The batch operation of match-actions to be added to the
-     *        plan.
-     */
-    public void addPhase(MatchAction phase) {
-        phases.add(phase);
-    }
-
-    /**
-     * Gets the list of phases of the plan.
-     *
-     * @return The list of phases, batch operations of match-actions.
-     */
-    public List<MatchAction> getPhases() {
-        return Collections.unmodifiableList(phases);
-    }
-}
