diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java
index e306871..cb153a8 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java
@@ -233,18 +233,6 @@
      *
      * @param tcpPort TCP source port
      * @return match criterion
-     * @deprecated in Drake release
-     */
-    @Deprecated
-    public static Criterion matchTcpSrc(short tcpPort) {
-        return new TcpPortCriterion(TpPort.tpPort(tcpPort), Type.TCP_SRC);
-    }
-
-    /**
-     * Creates a match on TCP source port field using the specified value.
-     *
-     * @param tcpPort TCP source port
-     * @return match criterion
      */
     public static Criterion matchTcpSrc(TpPort tcpPort) {
         return new TcpPortCriterion(tcpPort, Type.TCP_SRC);
@@ -255,18 +243,6 @@
      *
      * @param tcpPort TCP destination port
      * @return match criterion
-     * @deprecated in Drake release
-     */
-    @Deprecated
-    public static Criterion matchTcpDst(short tcpPort) {
-        return new TcpPortCriterion(TpPort.tpPort(tcpPort), Type.TCP_DST);
-    }
-
-    /**
-     * Creates a match on TCP destination port field using the specified value.
-     *
-     * @param tcpPort TCP destination port
-     * @return match criterion
      */
     public static Criterion matchTcpDst(TpPort tcpPort) {
         return new TcpPortCriterion(tcpPort, Type.TCP_DST);
@@ -287,18 +263,6 @@
      *
      * @param udpPort UDP source port
      * @return match criterion
-     * @deprecated in Drake release
-     */
-    @Deprecated
-    public static Criterion matchUdpSrc(short udpPort) {
-        return new UdpPortCriterion(TpPort.tpPort(udpPort), Type.UDP_SRC);
-    }
-
-    /**
-     * Creates a match on UDP source port field using the specified value.
-     *
-     * @param udpPort UDP source port
-     * @return match criterion
      */
     public static Criterion matchUdpSrc(TpPort udpPort) {
         return new UdpPortCriterion(udpPort, Type.UDP_SRC);
@@ -309,18 +273,6 @@
      *
      * @param udpPort UDP destination port
      * @return match criterion
-     * @deprecated in Drake release
-     */
-    @Deprecated
-    public static Criterion matchUdpDst(short udpPort) {
-        return new UdpPortCriterion(TpPort.tpPort(udpPort), Type.UDP_DST);
-    }
-
-    /**
-     * Creates a match on UDP destination port field using the specified value.
-     *
-     * @param udpPort UDP destination port
-     * @return match criterion
      */
     public static Criterion matchUdpDst(TpPort udpPort) {
         return new UdpPortCriterion(udpPort, Type.UDP_DST);
@@ -331,18 +283,6 @@
      *
      * @param sctpPort SCTP source port
      * @return match criterion
-     * @deprecated in Drake release
-     */
-    @Deprecated
-    public static Criterion matchSctpSrc(short sctpPort) {
-        return new SctpPortCriterion(TpPort.tpPort(sctpPort), Type.SCTP_SRC);
-    }
-
-    /**
-     * Creates a match on SCTP source port field using the specified value.
-     *
-     * @param sctpPort SCTP source port
-     * @return match criterion
      */
     public static Criterion matchSctpSrc(TpPort sctpPort) {
         return new SctpPortCriterion(sctpPort, Type.SCTP_SRC);
@@ -354,19 +294,6 @@
      *
      * @param sctpPort SCTP destination port
      * @return match criterion
-     * @deprecated in Drake release
-     */
-    @Deprecated
-    public static Criterion matchSctpDst(short sctpPort) {
-        return new SctpPortCriterion(TpPort.tpPort(sctpPort), Type.SCTP_DST);
-    }
-
-    /**
-     * Creates a match on SCTP destination port field using the specified
-     * value.
-     *
-     * @param sctpPort SCTP destination port
-     * @return match criterion
      */
     public static Criterion matchSctpDst(TpPort sctpPort) {
         return new SctpPortCriterion(sctpPort, Type.SCTP_DST);
