diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instruction.java b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instruction.java
index 5d34fc2..a22d2cd 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instruction.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instruction.java
@@ -5,6 +5,12 @@
  */
 public interface Instruction {
 
+    interface SubType {}
+
+    public enum NoneSubType implements SubType {
+        NONE;
+    }
+
     /**
      * Represents the type of traffic treatment.
      */
@@ -39,4 +45,10 @@
      */
     public Type type();
 
+    /**
+     * Returns the subtype of the modification instruction.
+     * @return type of instruction
+     */
+    public SubType subtype();
+
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java
index 2365bf0..5acac3e 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java
@@ -3,8 +3,12 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import org.onlab.onos.net.PortNumber;
+import org.onlab.onos.net.flow.instructions.L2ModificationInstruction.L2SubType;
 import org.onlab.onos.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
-import org.onlab.onos.net.flow.instructions.L2ModificationInstruction.SubType;
+import org.onlab.onos.net.flow.instructions.L3ModificationInstruction.L3SubType;
+import org.onlab.onos.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
+import org.onlab.onos.net.flow.instructions.L3ModificationInstruction.ModIPProtoInstruction;
+import org.onlab.packet.IPAddress;
 import org.onlab.packet.MACAddress;
 /**
  * Factory class for creating various traffic treatment instructions.
@@ -42,7 +46,7 @@
      */
     public static L2ModificationInstruction modL2Src(MACAddress addr) {
         checkNotNull(addr, "Src l2 address cannot be null");
-        return new ModEtherInstruction(SubType.L2_SRC, addr);
+        return new ModEtherInstruction(L2SubType.L2_SRC, addr);
     }
 
     /**
@@ -52,7 +56,7 @@
      */
     public static L2ModificationInstruction modL2Dst(MACAddress addr) {
         checkNotNull(addr, "Dst l2 address cannot be null");
-        return new L2ModificationInstruction.ModEtherInstruction(SubType.L2_DST, addr);
+        return new L2ModificationInstruction.ModEtherInstruction(L2SubType.L2_DST, addr);
     }
 
     /**
@@ -65,11 +69,56 @@
         return new L2ModificationInstruction.ModEtherTypeInstruction(l2Type);
     }
 
+    /**
+     * Creates a Vlan id modification.
+     * @param vlanId the vlan id to modify to.
+     * @return a L2 modification
+     */
     public static L2ModificationInstruction modVlanId(Short vlanId) {
         checkNotNull(vlanId, "VLAN id cannot be null");
         return new L2ModificationInstruction.ModVlanIdInstruction(vlanId);
     }
 
+    /**
+     * Creates a Vlan pcp modification.
+     * @param vlanPcp the pcp to modify to.
+     * @return a L2 modification
+     */
+    public static L2ModificationInstruction modVlanPcp(Byte vlanPcp) {
+        checkNotNull(vlanPcp, "VLAN Pcp cannot be null");
+        return new L2ModificationInstruction.ModVlanPcpInstruction(vlanPcp);
+    }
+
+    /**
+     * Creates a L3 src modification.
+     * @param addr the ip address to modify to.
+     * @return a L3 modification
+     */
+    public static L3ModificationInstruction modL3Src(IPAddress addr) {
+        checkNotNull(addr, "Src l3 address cannot be null");
+        return new ModIPInstruction(L3SubType.L3_SRC, addr);
+    }
+
+    /**
+     * Creates a L3 dst modification.
+     * @param addr the ip address to modify to.
+     * @return a L3 modification
+     */
+    public static L3ModificationInstruction modL3Dst(IPAddress addr) {
+        checkNotNull(addr, "Dst l3 address cannot be null");
+        return new ModIPInstruction(L3SubType.L3_DST, addr);
+    }
+
+    /**
+     * Creates an L3 protocol modification.
+     * @param proto the protocol to change to
+     * @return a L3 modification
+     */
+    public static L3ModificationInstruction modIPProto(Byte proto) {
+        checkNotNull(proto, "IP protocol cannot be null");
+        return new ModIPProtoInstruction(proto);
+    }
+
     /*
      *  Output instructions
      */
@@ -79,6 +128,11 @@
         public Type type() {
             return Type.DROP;
         }
+
+        @Override
+        public SubType subtype() {
+            return NoneSubType.NONE;
+        }
     }
 
 
@@ -97,6 +151,11 @@
         public Type type() {
             return Type.OUTPUT;
         }
+
+        @Override
+        public SubType subtype() {
+            return NoneSubType.NONE;
+        }
     }
 
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java
index f71ad2e..348c30f 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java
@@ -11,7 +11,7 @@
     /**
      * Represents the type of traffic treatment.
      */
-    public enum SubType {
+    public enum L2SubType implements SubType {
         /**
          * Ether src modification.
          */
@@ -41,10 +41,7 @@
     // TODO: Create factory class 'Instructions' that will have various factory
     // to create specific instructions.
 
-    /**
-     * Returns the subtype of the modification instruction.
-     * @return type of instruction
-     */
+    @Override
     public abstract SubType subtype();
 
     @Override
@@ -89,7 +86,7 @@
 
         @Override
         public SubType subtype() {
-            return SubType.L2_TYPE;
+            return L2SubType.L2_TYPE;
         }
 
         public short l2Type() {
@@ -111,7 +108,7 @@
 
         @Override
         public SubType subtype() {
-            return SubType.VLAN_ID;
+            return L2SubType.VLAN_ID;
         }
 
         public Short vlanId() {
@@ -120,5 +117,27 @@
 
     }
 
+    /**
+     * Represents a VLAN PCP modification instruction.
+     */
+    public static final class ModVlanPcpInstruction extends L2ModificationInstruction {
+
+        public final Byte vlanPcp;
+
+        public ModVlanPcpInstruction(Byte vlanPcp) {
+            this.vlanPcp = vlanPcp;
+        }
+
+        @Override
+        public SubType subtype() {
+            return L2SubType.VLAN_PCP;
+        }
+
+        public Byte vlanPcp() {
+            return this.vlanPcp;
+        }
+
+    }
+
 
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L3ModificationInstruction.java b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L3ModificationInstruction.java
new file mode 100644
index 0000000..eb4d3b6
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/instructions/L3ModificationInstruction.java
@@ -0,0 +1,89 @@
+package org.onlab.onos.net.flow.instructions;
+
+import org.onlab.packet.IPAddress;
+
+/**
+ * Abstraction of a single traffic treatment step.
+ * @param <T> the type parameter for the instruction
+ */
+public abstract class L3ModificationInstruction implements Instruction {
+
+    /**
+     * Represents the type of traffic treatment.
+     */
+    public enum L3SubType implements SubType {
+        /**
+         * Ether src modification.
+         */
+        L3_SRC,
+
+        /**
+         * Ether dst modification.
+         */
+        L3_DST,
+
+        /**
+         * Ethertype modification.
+         */
+        L3_PROTO,
+
+        //TODO: remaining types
+    }
+
+    /**
+     * Returns the subtype of the modification instruction.
+     * @return type of instruction
+     */
+    public abstract SubType subtype();
+
+    @Override
+    public Type type() {
+        return Type.MODIFICATION;
+    }
+
+    /**
+     * Represents a L3 src/dst modification instruction.
+     */
+    public static final class ModIPInstruction extends L3ModificationInstruction {
+
+        private final SubType subtype;
+        private final IPAddress ip;
+
+        public ModIPInstruction(SubType subType, IPAddress addr) {
+            this.subtype = subType;
+            this.ip = addr;
+        }
+
+        @Override
+        public SubType subtype() {
+            return this.subtype;
+        }
+
+        public IPAddress ip() {
+            return this.ip;
+        }
+
+    }
+
+    /**
+     * Represents a L3 proto modification instruction.
+     */
+    public static final class ModIPProtoInstruction extends L3ModificationInstruction {
+
+        public final Byte proto;
+
+        public ModIPProtoInstruction(Byte proto) {
+            this.proto = proto;
+        }
+
+        @Override
+        public SubType subtype() {
+            return L3SubType.L3_PROTO;
+        }
+
+        public short proto() {
+            return this.proto;
+        }
+
+    }
+}
