diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
index 6064263..0bf4ea8 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
@@ -53,7 +53,8 @@
             case OUTPUT:
                 outputs.add(instruction);
                 break;
-            case MODIFICATION:
+            case L2MODIFICATION:
+            case L3MODIFICATION:
                 // TODO: enforce modification order if any
                 modifications.add(instruction);
                 break;
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java b/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
index 24c49bb..41fcd74 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
@@ -227,7 +227,7 @@
             return Type.VLAN_PCP;
         }
 
-        public Byte protocol() {
+        public Byte priority() {
             return vlanPcp;
         }
 
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 8c41a04..f05d238 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,12 +5,6 @@
  */
 public interface Instruction {
 
-    interface SubType { }
-
-    public enum NoneSubType implements SubType {
-        NONE;
-    }
-
     /**
      * Represents the type of traffic treatment.
      */
@@ -31,9 +25,14 @@
         GROUP,
 
         /**
-         * Signifies that the traffic should be modified in some way.
+         * Signifies that the traffic should be modified in L2 way.
          */
-        MODIFICATION
+        L2MODIFICATION,
+
+        /**
+         * Signifies that the traffic should be modified in L3 way.
+         */
+        L3MODIFICATION
     }
 
     // TODO: Create factory class 'Instructions' that will have various factory
@@ -45,10 +44,4 @@
      */
     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 270704e..894942c 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
@@ -7,7 +7,6 @@
 import org.onlab.onos.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
 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;
 import org.onlab.packet.VLANID;
@@ -61,16 +60,6 @@
     }
 
     /**
-     * Creates a L2 type modification.
-     * @param l2Type the type to change to
-     * @return a L2 modifications
-     */
-    public static L2ModificationInstruction modL2Type(Short l2Type) {
-        checkNotNull(l2Type, "L2 type cannot be null");
-        return new L2ModificationInstruction.ModEtherTypeInstruction(l2Type);
-    }
-
-    /**
      * Creates a Vlan id modification.
      * @param vlanId the vlan id to modify to.
      * @return a L2 modification
@@ -110,15 +99,6 @@
         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
@@ -129,11 +109,6 @@
         public Type type() {
             return Type.DROP;
         }
-
-        @Override
-        public SubType subtype() {
-            return NoneSubType.NONE;
-        }
     }
 
 
@@ -152,11 +127,6 @@
         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 da86e13..9019efb 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
@@ -12,7 +12,7 @@
     /**
      * Represents the type of traffic treatment.
      */
-    public enum L2SubType implements SubType {
+    public enum L2SubType {
         /**
          * Ether src modification.
          */
@@ -24,11 +24,6 @@
         L2_DST,
 
         /**
-         * Ethertype modification.
-         */
-        L2_TYPE,
-
-        /**
          * VLAN id modification.
          */
         VLAN_ID,
@@ -42,12 +37,11 @@
     // TODO: Create factory class 'Instructions' that will have various factory
     // to create specific instructions.
 
-    @Override
-    public abstract SubType subtype();
+    public abstract L2SubType subtype();
 
     @Override
     public Type type() {
-        return Type.MODIFICATION;
+        return Type.L2MODIFICATION;
     }
 
     /**
@@ -55,16 +49,16 @@
      */
     public static final class ModEtherInstruction extends L2ModificationInstruction {
 
-        private final SubType subtype;
+        private final L2SubType subtype;
         private final MACAddress mac;
 
-        public ModEtherInstruction(SubType subType, MACAddress addr) {
+        public ModEtherInstruction(L2SubType subType, MACAddress addr) {
             this.subtype = subType;
             this.mac = addr;
         }
 
         @Override
-        public SubType subtype() {
+        public L2SubType subtype() {
             return this.subtype;
         }
 
@@ -75,28 +69,6 @@
     }
 
     /**
-     * Represents a L2 type modification instruction.
-     */
-    public static final class ModEtherTypeInstruction extends L2ModificationInstruction {
-
-        public final short l2Type;
-
-        public ModEtherTypeInstruction(short l2Type) {
-            this.l2Type = l2Type;
-        }
-
-        @Override
-        public SubType subtype() {
-            return L2SubType.L2_TYPE;
-        }
-
-        public short l2Type() {
-            return this.l2Type;
-        }
-
-    }
-
-    /**
      * Represents a VLAN id modification instruction.
      */
     public static final class ModVlanIdInstruction extends L2ModificationInstruction {
@@ -108,7 +80,7 @@
         }
 
         @Override
-        public SubType subtype() {
+        public L2SubType subtype() {
             return L2SubType.VLAN_ID;
         }
 
@@ -130,7 +102,7 @@
         }
 
         @Override
-        public SubType subtype() {
+        public L2SubType subtype() {
             return L2SubType.VLAN_PCP;
         }
 
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
index eb4d3b6..c5cb7a6 100644
--- 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
@@ -11,7 +11,7 @@
     /**
      * Represents the type of traffic treatment.
      */
-    public enum L3SubType implements SubType {
+    public enum L3SubType {
         /**
          * Ether src modification.
          */
@@ -20,12 +20,7 @@
         /**
          * Ether dst modification.
          */
-        L3_DST,
-
-        /**
-         * Ethertype modification.
-         */
-        L3_PROTO,
+        L3_DST
 
         //TODO: remaining types
     }
@@ -34,11 +29,11 @@
      * Returns the subtype of the modification instruction.
      * @return type of instruction
      */
-    public abstract SubType subtype();
+    public abstract L3SubType subtype();
 
     @Override
     public Type type() {
-        return Type.MODIFICATION;
+        return Type.L3MODIFICATION;
     }
 
     /**
@@ -46,16 +41,16 @@
      */
     public static final class ModIPInstruction extends L3ModificationInstruction {
 
-        private final SubType subtype;
+        private final L3SubType subtype;
         private final IPAddress ip;
 
-        public ModIPInstruction(SubType subType, IPAddress addr) {
+        public ModIPInstruction(L3SubType subType, IPAddress addr) {
             this.subtype = subType;
             this.ip = addr;
         }
 
         @Override
-        public SubType subtype() {
+        public L3SubType subtype() {
             return this.subtype;
         }
 
@@ -64,26 +59,4 @@
         }
 
     }
-
-    /**
-     * 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;
-        }
-
-    }
 }
