diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchAction.java b/src/main/java/net/onrc/onos/core/matchaction/MatchAction.java
index 7c3a22d..24790b8 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchAction.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchAction.java
@@ -8,7 +8,7 @@
 import net.onrc.onos.core.util.SwitchPort;
 
 /**
- * A filter and actions for traffic.
+ * A filter and actions for traffic.  Objects of this class are immutable.
  */
 public final class MatchAction implements BatchOperationTarget {
     private final MatchActionId id;
@@ -66,4 +66,18 @@
     public List<Action> getActions() {
         return actions;
     }
+
+    @Override
+    public int hashCode() {
+        return id.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof MatchAction) {
+            MatchAction other = (MatchAction) obj;
+            return (id.equals(other.id));
+        }
+        return false;
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionId.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionId.java
index 3e485af..b520439 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionId.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionId.java
@@ -2,9 +2,17 @@
 
 import net.onrc.onos.api.batchoperation.BatchOperationTarget;
 
+/**
+ * A unique identifier for a MatchAction.  Objects of this class are immutable.
+ */
 public final class MatchActionId implements BatchOperationTarget {
     private final String value;
 
+    /**
+     * Creates a new Match Action Identifier based on the given id string.
+     *
+     * @param id unique id string
+     */
     public MatchActionId(String id) {
         value = id;
     }
@@ -23,7 +31,7 @@
     public boolean equals(Object obj) {
         if (obj instanceof MatchActionId) {
             MatchActionId other = (MatchActionId) obj;
-            return (this.value.equals(other.value));
+            return (value.equals(other.value));
         }
         return false;
     }
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java
index 557932e..9ed031c 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java
@@ -1,6 +1,9 @@
 package net.onrc.onos.core.matchaction;
 
+import java.util.Collections;
 import java.util.EventListener;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import net.onrc.onos.api.flowmanager.ConflictDetectionPolicy;
 
@@ -11,6 +14,19 @@
  */
 public class MatchActionModule implements MatchActionService {
 
+    private final HashSet<MatchAction> currentOperations = new HashSet<>();
+
+    private boolean processMatchActionEntries(
+            final List<MatchActionOperationEntry> entries) {
+        int successfulOperations = 0;
+        for (final MatchActionOperationEntry entry : entries) {
+            if (currentOperations.add(entry.getTarget())) {
+                successfulOperations++;
+            }
+        }
+        return entries.size() == successfulOperations;
+    }
+
     @Override
     public boolean addMatchAction(MatchAction matchAction) {
         return false;
@@ -18,14 +34,12 @@
 
     @Override
     public Set<MatchAction> getMatchActions() {
-        // TODO Auto-generated method stub
-        return null;
+        return Collections.unmodifiableSet(currentOperations);
     }
 
     @Override
     public boolean executeOperations(final MatchActionOperations operations) {
-        // TODO Auto-generated method stub
-        return false;
+        return processMatchActionEntries(operations.getOperations());
     }
 
     @Override
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationEntry.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationEntry.java
index b8e150b..2513dd0 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationEntry.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationEntry.java
@@ -2,6 +2,10 @@
 
 import net.onrc.onos.api.batchoperation.BatchOperationEntry;
 
+/**
+ * This class pairs an Operator and a Match Action to represent an executable
+ * Match Action operation.
+ */
 public final class MatchActionOperationEntry
        extends BatchOperationEntry<MatchActionOperations.Operator, MatchAction> {
 
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperations.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperations.java
index 3aaffad..a17d0f2 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperations.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperations.java
@@ -2,8 +2,18 @@
 
 import net.onrc.onos.api.batchoperation.BatchOperation;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * The MatchActionOperations class holds a list of MatchActionOperationEntry
+ * objects to be executed together as one set.
+ * <p/>
+ * Objects of this class are immutable.
+ */
 public final class MatchActionOperations
         extends BatchOperation<MatchActionOperationEntry> {
+
+    private final MatchActionOperationsId id;
     /**
      * The MatchAction operators.
      */
@@ -12,5 +22,47 @@
         REMOVE,
     }
 
-    // TODO waiting on updated BatchOperation as of 8/7
+    /**
+     * Constructs a MatchActionOperations object from an id.  Internal
+     * constructor called by a public factory method.
+     *
+     * @param newId match action operations identifier for this instance
+     */
+    private MatchActionOperations(final MatchActionOperationsId newId) {
+        id = checkNotNull(newId);
+    }
+
+    /**
+     * Creates a MatchActionOperations object from an id.
+     *
+     * @param newId match action operations identifier to use for the new object
+     * @return Match Action Operations object
+     */
+    public static MatchActionOperations createMatchActionsOperations(
+            final MatchActionOperationsId newId) {
+        return new MatchActionOperations(newId);
+    }
+
+    /**
+     * Gets the identifier for the Match Action Operations object.
+     *
+     * @return identifier for the Opertions object
+     */
+    public MatchActionOperationsId getOperationsId() {
+        return id;
+    }
+
+    @Override
+    public int hashCode() {
+        return id.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof MatchActionOperations) {
+            final MatchActionOperations other = (MatchActionOperations) obj;
+            return (id.equals(other.id));
+        }
+        return false;
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationsId.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationsId.java
index 8ea2168..7c9d1db 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationsId.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionOperationsId.java
@@ -1,5 +1,62 @@
 package net.onrc.onos.core.matchaction;
 
-public interface MatchActionOperationsId {
-    // TODO waiting on MatchActionOperations
+import java.util.UUID;
+
+/**
+ * Identifier for a MatchActionOperations object.  This is an immutable class
+ * that encapsulates a globally unique identifier for the MatchActionOperations
+ * object.
+ */
+public final class MatchActionOperationsId {
+
+    private static final String OPERATIONS_ID_PREFIX = "MatchActionOperationsId-";
+    private final String id;
+
+    /**
+     * Constructs an Operations identifier and allocates a unique identifier
+     * for it.
+     */
+    private MatchActionOperationsId() {
+        id = OPERATIONS_ID_PREFIX + UUID.randomUUID();
+    }
+
+    /**
+     * Gets the identifier for the Operations object.
+     *
+     * @return Operations object identifier as a string
+     */
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public boolean equals(final Object other) {
+        if (other == this) {
+            return true;
+        }
+
+        if (!(other instanceof MatchActionOperationsId)) {
+            return false;
+        }
+
+        final MatchActionOperationsId otherMatchActionOperationsId =
+                (MatchActionOperationsId) other;
+
+        return otherMatchActionOperationsId.getId().equals(getId());
+    }
+
+    @Override
+    public int hashCode() {
+        return id.hashCode();
+    }
+
+    /**
+     * Creates a new Id for a MatchActionOperation.
+     *
+     * @return new Id for a MatchActionOperation
+     */
+    public static MatchActionOperationsId createNewOperationsId() {
+        return new MatchActionOperationsId();
+    }
+
 }
