diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
index f2fd5e5..1542f0d 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
@@ -74,6 +74,7 @@
     final MacAddress mcastMac = MacAddress.valueOf("01:00:5E:00:00:01");
     final MacAddress mcastMacMask = MacAddress.valueOf("FF:FF:FF:80:00:00");
     final TpPort tpPort = TpPort.tpPort(40000);
+    final TpPort tpPortMask = TpPort.tpPort(65472);
     final int tributaryPortNumber = 11;
     final int tributarySlotLen = 80;
     final byte[] tributarySlotBitmap = new byte[] {1, 2, 3, 4, 2, 3, 4, 2, 3, 4};
@@ -169,6 +170,16 @@
     }
 
     /**
+     * Tests masked ethernet source criterion (Criterion.Type.ETH_SRC_MASKED).
+     */
+    @Test
+    public void matchEthSrcMaskTest() {
+        Criterion criterion = Criteria.matchEthSrcMasked(mcastMac, mcastMacMask);
+        ObjectNode result = criterionCodec.encode(criterion, context);
+        assertThat(result, matchesCriterion(criterion));
+    }
+
+    /**
      * Tests ethernet type criterion.
      */
     @Test
@@ -259,6 +270,16 @@
     }
 
     /**
+     * Tests source TCP port masked criterion.
+     */
+    @Test
+    public void matchTcpSrcMaskedTest() {
+        Criterion criterion = Criteria.matchTcpSrcMasked(tpPort, tpPortMask);
+        ObjectNode result = criterionCodec.encode(criterion, context);
+        assertThat(result, matchesCriterion(criterion));
+    }
+
+    /**
      * Tests destination TCP port criterion.
      */
     @Test
@@ -269,6 +290,16 @@
     }
 
     /**
+     * Tests destination TCP port masked criterion.
+     */
+    @Test
+    public void matchTcpDstMaskedTest() {
+        Criterion criterion = Criteria.matchTcpDstMasked(tpPort, tpPortMask);
+        ObjectNode result = criterionCodec.encode(criterion, context);
+        assertThat(result, matchesCriterion(criterion));
+    }
+
+    /**
      * Tests source UDP port criterion.
      */
     @Test
@@ -279,6 +310,16 @@
     }
 
     /**
+     * Tests source UDP port masked criterion.
+     */
+    @Test
+    public void matchUdpSrcMaskedTest() {
+        Criterion criterion = Criteria.matchUdpSrcMasked(tpPort, tpPortMask);
+        ObjectNode result = criterionCodec.encode(criterion, context);
+        assertThat(result, matchesCriterion(criterion));
+    }
+
+    /**
      * Tests destination UDP criterion.
      */
     @Test
@@ -289,6 +330,16 @@
     }
 
     /**
+     * Tests destination UDP port masked criterion.
+     */
+    @Test
+    public void matchUdpDstMaskedTest() {
+        Criterion criterion = Criteria.matchUdpDstMasked(tpPort, tpPortMask);
+        ObjectNode result = criterionCodec.encode(criterion, context);
+        assertThat(result, matchesCriterion(criterion));
+    }
+
+    /**
      * Tests source SCTP criterion.
      */
     @Test
@@ -299,6 +350,16 @@
     }
 
     /**
+     * Tests source SCTP port masked criterion.
+     */
+    @Test
+    public void matchSctpSrcMaskedTest() {
+        Criterion criterion = Criteria.matchSctpSrcMasked(tpPort, tpPortMask);
+        ObjectNode result = criterionCodec.encode(criterion, context);
+        assertThat(result, matchesCriterion(criterion));
+    }
+
+    /**
      * Tests destination SCTP criterion.
      */
     @Test
@@ -309,6 +370,16 @@
     }
 
     /**
+     * Tests destination SCTP port masked criterion.
+     */
+    @Test
+    public void matchSctpDstMaskedTest() {
+        Criterion criterion = Criteria.matchSctpDstMasked(tpPort, tpPortMask);
+        ObjectNode result = criterionCodec.encode(criterion, context);
+        assertThat(result, matchesCriterion(criterion));
+    }
+
+    /**
      * Tests ICMP type criterion.
      */
     @Test
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
index d1e1f19..9113124 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
@@ -138,7 +138,7 @@
             description.appendText("mac was " + jsonMac);
             return false;
         }
-        if (criterion.type() == Criterion.Type.ETH_DST_MASKED) {
+        if (criterion.type() == Criterion.Type.ETH_SRC_MASKED || criterion.type() == Criterion.Type.ETH_DST_MASKED) {
             final String macMask = criterion.mask().toString();
             final String jsonMacMask = jsonCriterion.get("macMask").textValue();
             if (!macMask.equals(jsonMacMask)) {
@@ -278,6 +278,15 @@
                     + Integer.toString(jsonTcpPort));
             return false;
         }
+        if (criterion.type() == Criterion.Type.TCP_SRC_MASKED || criterion.type() == Criterion.Type.TCP_DST_MASKED) {
+            final int tcpMask = criterion.mask().toInt();
+            final int jsonTcpMask = jsonCriterion.get("tcpMask").intValue();
+            if (tcpMask != jsonTcpMask) {
+                description.appendText("tcp mask was "
+                        + Integer.toString(jsonTcpMask));
+                return false;
+            }
+        }
         return true;
     }
 
@@ -295,6 +304,16 @@
                     + Integer.toString(jsonUdpPort));
             return false;
         }
+
+        if (criterion.type() == Criterion.Type.UDP_SRC_MASKED || criterion.type() == Criterion.Type.UDP_DST_MASKED) {
+            final int udpMask = criterion.mask().toInt();
+            final int jsonUdpMask = jsonCriterion.get("udpMask").intValue();
+            if (udpMask != jsonUdpMask) {
+                description.appendText("udp mask was "
+                        + Integer.toString(jsonUdpMask));
+                return false;
+            }
+        }
         return true;
     }
 
@@ -312,6 +331,15 @@
                     + Integer.toString(jsonSctpPort));
             return false;
         }
+        if (criterion.type() == Criterion.Type.SCTP_SRC_MASKED || criterion.type() == Criterion.Type.SCTP_DST_MASKED) {
+            final int sctpMask = criterion.mask().toInt();
+            final int jsonSctpMask = jsonCriterion.get("sctpMask").intValue();
+            if (sctpMask != jsonSctpMask) {
+                description.appendText("sctp mask was "
+                        + Integer.toString(jsonSctpMask));
+                return false;
+            }
+        }
         return true;
     }
 
@@ -676,6 +704,7 @@
             case ETH_DST:
             case ETH_DST_MASKED:
             case ETH_SRC:
+            case ETH_SRC_MASKED:
                 return matchCriterion((EthCriterion) criterion);
 
             case ETH_TYPE:
@@ -703,15 +732,21 @@
                 return matchCriterion((IPCriterion) criterion);
 
             case TCP_SRC:
+            case TCP_SRC_MASKED:
             case TCP_DST:
+            case TCP_DST_MASKED:
                 return matchCriterion((TcpPortCriterion) criterion);
 
             case UDP_SRC:
+            case UDP_SRC_MASKED:
             case UDP_DST:
+            case UDP_DST_MASKED:
                 return matchCriterion((UdpPortCriterion) criterion);
 
             case SCTP_SRC:
+            case SCTP_SRC_MASKED:
             case SCTP_DST:
+            case SCTP_DST_MASKED:
                 return matchCriterion((SctpPortCriterion) criterion);
 
             case ICMPV4_TYPE:
