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 a61689e..6bf4680 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
@@ -23,6 +23,7 @@
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.MplsLabel;
+import org.onlab.packet.TpPort;
 import org.onlab.packet.VlanId;
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
@@ -54,6 +55,7 @@
     final IpPrefix ipPrefix4 = IpPrefix.valueOf("10.1.1.0/24");
     final IpPrefix ipPrefix6 = IpPrefix.valueOf("fe80::/64");
     final MacAddress mac1 = MacAddress.valueOf("00:00:11:00:00:01");
+    final TpPort tpPort = TpPort.tpPort(40000);
 
     /**
      * Sets up for each test.  Creates a context and fetches the criterion
@@ -219,7 +221,7 @@
      */
     @Test
     public void matchTcpSrcTest() {
-        Criterion criterion = Criteria.matchTcpSrc((short) 40000);
+        Criterion criterion = Criteria.matchTcpSrc(tpPort);
         ObjectNode result = criterionCodec.encode(criterion, context);
         assertThat(result, matchesCriterion(criterion));
     }
@@ -229,7 +231,7 @@
      */
     @Test
     public void matchTcpDstTest() {
-        Criterion criterion = Criteria.matchTcpDst((short) 40000);
+        Criterion criterion = Criteria.matchTcpDst(tpPort);
         ObjectNode result = criterionCodec.encode(criterion, context);
         assertThat(result, matchesCriterion(criterion));
     }
@@ -239,7 +241,7 @@
      */
     @Test
     public void matchUdpSrcTest() {
-        Criterion criterion = Criteria.matchUdpSrc(40000);
+        Criterion criterion = Criteria.matchUdpSrc(tpPort);
         ObjectNode result = criterionCodec.encode(criterion, context);
         assertThat(result, matchesCriterion(criterion));
     }
@@ -249,7 +251,7 @@
      */
     @Test
     public void matchUdpDstTest() {
-        Criterion criterion = Criteria.matchUdpDst(40000);
+        Criterion criterion = Criteria.matchUdpDst(tpPort);
         ObjectNode result = criterionCodec.encode(criterion, context);
         assertThat(result, matchesCriterion(criterion));
     }
@@ -259,7 +261,7 @@
      */
     @Test
     public void matchSctpSrcTest() {
-        Criterion criterion = Criteria.matchSctpSrc(40000);
+        Criterion criterion = Criteria.matchSctpSrc(tpPort);
         ObjectNode result = criterionCodec.encode(criterion, context);
         assertThat(result, matchesCriterion(criterion));
     }
@@ -269,7 +271,7 @@
      */
     @Test
     public void matchSctpDstTest() {
-        Criterion criterion = Criteria.matchSctpDst(40000);
+        Criterion criterion = Criteria.matchSctpDst(tpPort);
         ObjectNode result = criterionCodec.encode(criterion, context);
         assertThat(result, matchesCriterion(criterion));
     }
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 2a4c138..bb3acad 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
@@ -249,7 +249,7 @@
      * @return true if the JSON matches the criterion, false otherwise.
      */
     private boolean matchCriterion(TcpPortCriterion criterion) {
-        final int tcpPort = criterion.tcpPort();
+        final int tcpPort = criterion.tcpPort().toInt();
         final int jsonTcpPort = jsonCriterion.get("tcpPort").intValue();
         if (tcpPort != jsonTcpPort) {
             description.appendText("tcp port was "
@@ -266,7 +266,7 @@
      * @return true if the JSON matches the criterion, false otherwise.
      */
     private boolean matchCriterion(UdpPortCriterion criterion) {
-        final int udpPort = criterion.udpPort();
+        final int udpPort = criterion.udpPort().toInt();
         final int jsonUdpPort = jsonCriterion.get("udpPort").intValue();
         if (udpPort != jsonUdpPort) {
             description.appendText("udp port was "
@@ -283,7 +283,7 @@
      * @return true if the JSON matches the criterion, false otherwise.
      */
     private boolean matchCriterion(SctpPortCriterion criterion) {
-        final int sctpPort = criterion.sctpPort();
+        final int sctpPort = criterion.sctpPort().toInt();
         final int jsonSctpPort = jsonCriterion.get("sctpPort").intValue();
         if (sctpPort != jsonSctpPort) {
             description.appendText("sctp port was "
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
index f2786b6..b18dc3e 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
@@ -419,27 +419,27 @@
                 is((IpPrefix.valueOf("4.2.0.0/32"))));
 
         criterion = getCriterion(Criterion.Type.TCP_SRC);
-        assertThat(((TcpPortCriterion) criterion).tcpPort(),
+        assertThat(((TcpPortCriterion) criterion).tcpPort().toInt(),
                 is(80));
 
         criterion = getCriterion(Criterion.Type.TCP_DST);
-        assertThat(((TcpPortCriterion) criterion).tcpPort(),
+        assertThat(((TcpPortCriterion) criterion).tcpPort().toInt(),
                 is(443));
 
         criterion = getCriterion(Criterion.Type.UDP_SRC);
-        assertThat(((UdpPortCriterion) criterion).udpPort(),
+        assertThat(((UdpPortCriterion) criterion).udpPort().toInt(),
                 is(180));
 
         criterion = getCriterion(Criterion.Type.UDP_DST);
-        assertThat(((UdpPortCriterion) criterion).udpPort(),
+        assertThat(((UdpPortCriterion) criterion).udpPort().toInt(),
                 is(1443));
 
         criterion = getCriterion(Criterion.Type.SCTP_SRC);
-        assertThat(((SctpPortCriterion) criterion).sctpPort(),
+        assertThat(((SctpPortCriterion) criterion).sctpPort().toInt(),
                 is(280));
 
         criterion = getCriterion(Criterion.Type.SCTP_DST);
-        assertThat(((SctpPortCriterion) criterion).sctpPort(),
+        assertThat(((SctpPortCriterion) criterion).sctpPort().toInt(),
                 is(2443));
 
         criterion = getCriterion(Criterion.Type.ICMPV4_TYPE);
