diff --git a/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowRuleBuilder.java b/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowRuleBuilder.java
index 39540d7..6d773de 100644
--- a/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowRuleBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowRuleBuilder.java
@@ -13,8 +13,6 @@
 import org.onlab.onos.net.flow.FlowRule.FlowRuleState;
 import org.onlab.onos.net.flow.TrafficSelector;
 import org.onlab.onos.net.flow.TrafficTreatment;
-import org.onlab.onos.net.flow.criteria.Criteria;
-import org.onlab.onos.net.flow.instructions.Instructions;
 import org.onlab.onos.openflow.controller.Dpid;
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
@@ -88,53 +86,53 @@
         TrafficTreatment.Builder builder = new DefaultTrafficTreatment.Builder();
         // If this is a drop rule
         if (actions.size() == 0) {
-            builder.add(Instructions.createDrop());
+            builder.drop();
             return builder.build();
         }
         for (OFAction act : actions) {
             switch (act.getType()) {
             case OUTPUT:
                 OFActionOutput out = (OFActionOutput) act;
-                builder.add(Instructions.createOutput(
-                        PortNumber.portNumber(out.getPort().getPortNumber())));
-                break;
-            case SET_VLAN_PCP:
-                OFActionSetVlanVid vlan = (OFActionSetVlanVid) act;
-                builder.add(Instructions.modVlanId(VlanId.vlanId(vlan.getVlanVid().getVlan())));
+                builder.setOutput(
+                        PortNumber.portNumber(out.getPort().getPortNumber()));
                 break;
             case SET_VLAN_VID:
+                OFActionSetVlanVid vlan = (OFActionSetVlanVid) act;
+                builder.setVlanId(VlanId.vlanId(vlan.getVlanVid().getVlan()));
+                break;
+            case SET_VLAN_PCP:
                 OFActionSetVlanPcp pcp = (OFActionSetVlanPcp) act;
-                builder.add(Instructions.modVlanId(VlanId.vlanId(pcp.getVlanPcp().getValue())));
+                builder.setVlanId(VlanId.vlanId(pcp.getVlanPcp().getValue()));
                 break;
             case SET_DL_DST:
                 OFActionSetDlDst dldst = (OFActionSetDlDst) act;
-                builder.add(Instructions.modL2Dst(
-                        MacAddress.valueOf(dldst.getDlAddr().getLong())));
+                builder.setEthDst(
+                        MacAddress.valueOf(dldst.getDlAddr().getLong()));
                 break;
             case SET_DL_SRC:
                 OFActionSetDlSrc dlsrc = (OFActionSetDlSrc) act;
-                builder.add(Instructions.modL2Src(
-                        MacAddress.valueOf(dlsrc.getDlAddr().getLong())));
+                builder.setEthSrc(
+                        MacAddress.valueOf(dlsrc.getDlAddr().getLong()));
 
                 break;
             case SET_NW_DST:
                 OFActionSetNwDst nwdst = (OFActionSetNwDst) act;
                 IPv4Address di = nwdst.getNwAddr();
                 if (di.isCidrMask()) {
-                    builder.add(Instructions.modL3Dst(IpPrefix.valueOf(di.getInt(),
-                            di.asCidrMaskLength())));
+                    builder.setIpDst(IpPrefix.valueOf(di.getInt(),
+                            di.asCidrMaskLength()));
                 } else {
-                    builder.add(Instructions.modL3Dst(IpPrefix.valueOf(di.getInt())));
+                    builder.setIpDst(IpPrefix.valueOf(di.getInt()));
                 }
                 break;
             case SET_NW_SRC:
                 OFActionSetNwSrc nwsrc = (OFActionSetNwSrc) act;
                 IPv4Address si = nwsrc.getNwAddr();
                 if (si.isCidrMask()) {
-                    builder.add(Instructions.modL3Dst(IpPrefix.valueOf(si.getInt(),
-                            si.asCidrMaskLength())));
+                    builder.setIpSrc(IpPrefix.valueOf(si.getInt(),
+                            si.asCidrMaskLength()));
                 } else {
-                    builder.add(Instructions.modL3Dst(IpPrefix.valueOf(si.getInt())));
+                    builder.setIpSrc(IpPrefix.valueOf(si.getInt()));
                 }
                 break;
             case SET_TP_DST:
@@ -174,20 +172,20 @@
         for (MatchField<?> field : match.getMatchFields()) {
             switch (field.id) {
             case IN_PORT:
-                builder.add(Criteria.matchInPort(PortNumber
-                        .portNumber(match.get(MatchField.IN_PORT).getPortNumber())));
+                builder.matchInport(PortNumber
+                        .portNumber(match.get(MatchField.IN_PORT).getPortNumber()));
                 break;
             case ETH_SRC:
                 MacAddress sMac = MacAddress.valueOf(match.get(MatchField.ETH_SRC).getLong());
-                builder.add(Criteria.matchEthSrc(sMac));
+                builder.matchEthSrc(sMac);
                 break;
             case ETH_DST:
                 MacAddress dMac = MacAddress.valueOf(match.get(MatchField.ETH_DST).getLong());
-                builder.add(Criteria.matchEthDst(dMac));
+                builder.matchEthDst(dMac);
                 break;
             case ETH_TYPE:
                 int ethType = match.get(MatchField.ETH_TYPE).getValue();
-                builder.add(Criteria.matchEthType((short) ethType));
+                builder.matchEthType((short) ethType);
                 break;
             case IPV4_DST:
                 IPv4Address di = match.get(MatchField.IPV4_DST);
@@ -197,7 +195,7 @@
                 } else {
                     dip = IpPrefix.valueOf(di.getInt());
                 }
-                builder.add(Criteria.matchIPDst(dip));
+                builder.matchIPDst(dip);
                 break;
             case IPV4_SRC:
                 IPv4Address si = match.get(MatchField.IPV4_SRC);
@@ -207,19 +205,19 @@
                 } else {
                     sip = IpPrefix.valueOf(si.getInt());
                 }
-                builder.add(Criteria.matchIPSrc(sip));
+                builder.matchIPSrc(sip);
                 break;
             case IP_PROTO:
                 short proto = match.get(MatchField.IP_PROTO).getIpProtocolNumber();
-                builder.add(Criteria.matchIPProtocol((byte) proto));
+                builder.matchIPProtocol((byte) proto);
                 break;
             case VLAN_PCP:
                 byte vlanPcp = match.get(MatchField.VLAN_PCP).getValue();
-                builder.add(Criteria.matchVlanPcp(vlanPcp));
+                builder.matchVlanPcp(vlanPcp);
                 break;
             case VLAN_VID:
                 VlanId vlanId = VlanId.vlanId(match.get(MatchField.VLAN_VID).getVlan());
-                builder.add(Criteria.matchVlanId(vlanId));
+                builder.matchVlanId(vlanId);
                 break;
             case ARP_OP:
             case ARP_SHA:
