diff --git a/src/main/java/net/onrc/onos/core/matchaction/action/ModifyDstMacAction.java b/src/main/java/net/onrc/onos/core/matchaction/action/ModifyDstMacAction.java
index 47e0d44..491d986 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/action/ModifyDstMacAction.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/action/ModifyDstMacAction.java
@@ -1,7 +1,10 @@
 package net.onrc.onos.core.matchaction.action;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import net.floodlightcontroller.util.MACAddress;
 
+import com.google.common.base.Objects;
+
 /**
  * An action object to modify destination MAC address.
  * <p>
@@ -17,7 +20,7 @@
      * @param dstMac destination MAC address after the modification
      */
     public ModifyDstMacAction(MACAddress dstMac) {
-        this.dstMac = dstMac;
+        this.dstMac = checkNotNull(dstMac);
     }
 
     /**
@@ -29,4 +32,20 @@
         return dstMac;
     }
 
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(dstMac);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null || getClass() != obj.getClass()) {
+            return false;
+        }
+        ModifyDstMacAction that = (ModifyDstMacAction) obj;
+        return Objects.equal(this.dstMac, that.dstMac);
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/matchaction/action/ModifyLambdaAction.java b/src/main/java/net/onrc/onos/core/matchaction/action/ModifyLambdaAction.java
index f2d313d..ee78481 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/action/ModifyLambdaAction.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/action/ModifyLambdaAction.java
@@ -1,5 +1,7 @@
 package net.onrc.onos.core.matchaction.action;
 
+import java.util.Objects;
+
 /**
  * An action object to modify lambda.
  * <p>
@@ -7,7 +9,7 @@
  * MatchAction, Flow or Intent class.
  */
 public class ModifyLambdaAction implements Action {
-    protected int lambda;
+    private final int lambda;
 
     /**
      * Constructor.
@@ -27,4 +29,21 @@
         return lambda;
     }
 
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(lambda);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null || getClass() != obj.getClass()) {
+            return false;
+        }
+        ModifyLambdaAction other = (ModifyLambdaAction) obj;
+        return lambda == other.lambda;
+    }
+
 }
diff --git a/src/main/java/net/onrc/onos/core/matchaction/action/ModifySrcMacAction.java b/src/main/java/net/onrc/onos/core/matchaction/action/ModifySrcMacAction.java
new file mode 100644
index 0000000..21ecf32
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/matchaction/action/ModifySrcMacAction.java
@@ -0,0 +1,51 @@
+package net.onrc.onos.core.matchaction.action;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import net.floodlightcontroller.util.MACAddress;
+
+import com.google.common.base.Objects;
+
+/**
+ * An action object to modify source MAC address.
+ * <p>
+ * This class does not have a switch ID. The switch ID is handled by
+ * MatchAction, Flow or Intent class.
+ */
+public class ModifySrcMacAction implements Action {
+    private final MACAddress srcMac;
+
+    /**
+     * Constructor.
+     *
+     * @param srcMac source MAC address after the modification
+     */
+    public ModifySrcMacAction(MACAddress srcMac) {
+        this.srcMac = checkNotNull(srcMac);
+    }
+
+    /**
+     * Gets the source MAC address.
+     *
+     * @return the source MAC address
+     */
+    public MACAddress getSrcMac() {
+        return srcMac;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(srcMac);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null || getClass() != obj.getClass()) {
+            return false;
+        }
+        ModifySrcMacAction that = (ModifySrcMacAction) obj;
+        return Objects.equal(this.srcMac, that.srcMac);
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/matchaction/action/OutputAction.java b/src/main/java/net/onrc/onos/core/matchaction/action/OutputAction.java
index a86b4d0..792b76e 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/action/OutputAction.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/action/OutputAction.java
@@ -1,7 +1,10 @@
 package net.onrc.onos.core.matchaction.action;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import net.onrc.onos.core.util.PortNumber;
 
+import com.google.common.base.Objects;
+
 /**
  * An action object to output traffic to specified port.
  * <p>
@@ -9,7 +12,7 @@
  * MatchAction, Flow or Intent class.
  */
 public class OutputAction implements Action {
-    protected PortNumber portNumber;
+    private final PortNumber portNumber;
 
     /**
      * Constructor.
@@ -17,7 +20,7 @@
      * @param dstPort The port number of the target output port.
      */
     public OutputAction(PortNumber dstPort) {
-        this.portNumber = dstPort;
+        this.portNumber = checkNotNull(dstPort);
     }
 
     /**
@@ -28,4 +31,22 @@
     public PortNumber getPortNumber() {
         return portNumber;
     }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(portNumber);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null || getClass() != obj.getClass()) {
+            return false;
+        }
+        OutputAction that = (OutputAction) obj;
+        return Objects.equal(this.portNumber, that.portNumber);
+    }
+
 }
