diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
index fe657e6..06c49ba 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
@@ -224,6 +224,7 @@
                 case L0MODIFICATION:
                 case L2MODIFICATION:
                 case L3MODIFICATION:
+                case L4MODIFICATION:
                     current.add(instruction);
                     break;
                 case TABLE:
@@ -390,6 +391,26 @@
         }
 
         @Override
+        public TrafficTreatment.Builder setTcpSrc(short port) {
+            return add(Instructions.modTcpSrc(port));
+        }
+
+        @Override
+        public TrafficTreatment.Builder setTcpDst(short port) {
+            return add(Instructions.modTcpDst(port));
+        }
+
+        @Override
+        public TrafficTreatment.Builder setUdpSrc(short port) {
+            return add(Instructions.modUdpSrc(port));
+        }
+
+        @Override
+        public TrafficTreatment.Builder setUdpDst(short port) {
+            return add(Instructions.modUdpDst(port));
+        }
+
+        @Override
         public TrafficTreatment build() {
             //Don't add DROP instruction by default when instruction
             //set is empty. This will be handled in DefaultSingleTablePipeline
diff --git a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
index 35ef6d3..d125a9f 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
@@ -319,6 +319,38 @@
         Builder setTunnelId(long tunnelId);
 
         /**
+         * Sets the src TCP port.
+         *
+         * @param port a port number
+         * @return a treatment builder
+         */
+        Builder setTcpSrc(short port);
+
+        /**
+         * Sets the dst TCP port.
+         *
+         * @param port a port number
+         * @return a treatment builder
+         */
+        Builder setTcpDst(short port);
+
+        /**
+         * Sets the src UDP port.
+         *
+         * @param port a port number
+         * @return a treatment builder
+         */
+        Builder setUdpSrc(short port);
+
+        /**
+         * Sets the dst UDP port.
+         *
+         * @param port a port number
+         * @return a treatment builder
+         */
+        Builder setUdpDst(short port);
+
+        /**
          * Builds an immutable traffic treatment descriptor.
          * <p>
          * If the treatment is empty when build() is called, it will add a default
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
index 0467a91..3cacfa5 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
@@ -32,6 +32,8 @@
 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction;
 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModTtlInstruction;
+import org.onosproject.net.flow.instructions.L4ModificationInstruction.L4SubType;
+import org.onosproject.net.flow.instructions.L4ModificationInstruction.ModTransportPortInstruction;
 
 import java.util.Objects;
 
@@ -361,6 +363,50 @@
     }
 
     /**
+     * Creates a TCP src modification.
+     *
+     * @param port the TCP port number to modify to
+     * @return a L4 modification
+     */
+    public static L4ModificationInstruction modTcpSrc(short port) {
+       checkNotNull(port, "Src TCP port cannot be null");
+       return new ModTransportPortInstruction(L4SubType.TCP_SRC, port);
+    }
+
+    /**
+     * Creates a TCP dst modification.
+     *
+     * @param port the TCP port number to modify to
+     * @return a L4 modification
+     */
+    public static L4ModificationInstruction modTcpDst(short port) {
+        checkNotNull(port, "Dst TCP port cannot be null");
+        return new ModTransportPortInstruction(L4SubType.TCP_DST, port);
+    }
+
+    /**
+     * Creates a UDP src modification.
+     *
+     * @param port the UDP port number to modify to
+     * @return a L4 modification
+     */
+    public static L4ModificationInstruction modUdpSrc(short port) {
+        checkNotNull(port, "Src UDP port cannot be null");
+        return new ModTransportPortInstruction(L4SubType.UDP_SRC, port);
+    }
+
+    /**
+     * Creates a UDP dst modification.
+     *
+     * @param port the UDP port number to modify to
+     * @return a L4 modification
+     */
+    public static L4ModificationInstruction modUdpDst(short port) {
+        checkNotNull(port, "Dst UDP port cannot be null");
+        return new ModTransportPortInstruction(L4SubType.UDP_DST, port);
+    }
+
+    /**
      *  Drop instruction.
      */
     public static final class DropInstruction implements Instruction {
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/L4ModificationInstruction.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/L4ModificationInstruction.java
index 09f02fb..c78f639 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/L4ModificationInstruction.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/L4ModificationInstruction.java
@@ -66,12 +66,12 @@
     /**
      * Represents a L4 src/dst modification instruction.
      */
-    public static final class ModL4PortInstruction extends L4ModificationInstruction {
+    public static final class ModTransportPortInstruction extends L4ModificationInstruction {
 
         private final L4SubType subtype;
         private final short port;
 
-        public ModL4PortInstruction(L4SubType subtype, short port) {
+        public ModTransportPortInstruction(L4SubType subtype, short port) {
             this.subtype = subtype;
             this.port = port;
         }
@@ -101,8 +101,8 @@
             if (this == obj) {
                 return true;
             }
-            if (obj instanceof ModL4PortInstruction) {
-                ModL4PortInstruction that = (ModL4PortInstruction) obj;
+            if (obj instanceof ModTransportPortInstruction) {
+                ModTransportPortInstruction that = (ModTransportPortInstruction) obj;
                 return  Objects.equals(port, that.port) &&
                         Objects.equals(this.subtype(), that.subtype());
             }
