building flowmods
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;
-        }
-
-    }
 }