diff --git a/providers/of/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java b/providers/of/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
index 9a11a36..44b0792 100644
--- a/providers/of/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
+++ b/providers/of/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/OpenFlowRuleProvider.java
@@ -26,6 +26,7 @@
 import org.onlab.onos.net.flow.criteria.Criteria.VlanPcpCriterion;
 import org.onlab.onos.net.flow.criteria.Criterion;
 import org.onlab.onos.net.flow.instructions.Instruction;
+import org.onlab.onos.net.flow.instructions.Instructions.OutputInstruction;
 import org.onlab.onos.net.flow.instructions.L2ModificationInstruction;
 import org.onlab.onos.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
 import org.onlab.onos.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
@@ -136,6 +137,9 @@
             case L3MODIFICATION:
                 acts.add(buildL3Modification(i, factory));
             case OUTPUT:
+                OutputInstruction out = (OutputInstruction) i;
+                acts.add(factory.actions().buildOutput().setPort(
+                        OFPort.of((int) out.port().toLong())).build());
                 break;
             case GROUP:
             default:
@@ -207,6 +211,7 @@
             case ETH_TYPE:
                 EthTypeCriterion ethType = (EthTypeCriterion) c;
                 mBuilder.setExact(MatchField.ETH_TYPE, EthType.of(ethType.ethType()));
+                break;
             case IPV4_DST:
                 ip = (IPCriterion) c;
                 mBuilder.setExact(MatchField.IPV4_DST, IPv4Address.of(ip.ip().toInt()));
diff --git a/providers/of/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java b/providers/of/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
index 4138111..ea8db19 100644
--- a/providers/of/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
+++ b/providers/of/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
@@ -1,5 +1,11 @@
 package org.onlab.onos.provider.of.host.impl;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.util.Set;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -24,10 +30,6 @@
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.types.OFPort;
 
-import java.util.Set;
-
-import static org.junit.Assert.*;
-
 public class OpenFlowHostProviderTest {
 
     private static final Integer INPORT = 10;
@@ -40,10 +42,10 @@
     private static final MacAddress BCMAC = MacAddress.valueOf("ff:ff:ff:ff:ff:ff");
     private static final byte[] IP = new byte[]{10, 0, 0, 1};
 
-    private OpenFlowHostProvider provider = new OpenFlowHostProvider();
-    private TestHostRegistry hostService = new TestHostRegistry();
-    private TestController controller = new TestController();
-    private TestTopologyService topoService = new TestTopologyService();
+    private final OpenFlowHostProvider provider = new OpenFlowHostProvider();
+    private final TestHostRegistry hostService = new TestHostRegistry();
+    private final TestController controller = new TestController();
+    private final TestTopologyService topoService = new TestTopologyService();
     private TestHostProviderService providerService;
 
     @Before
@@ -103,8 +105,8 @@
     }
 
     private class TestHostProviderService
-            extends AbstractProviderService<HostProvider>
-            implements HostProviderService {
+    extends AbstractProviderService<HostProvider>
+    implements HostProviderService {
 
         Dpid added = null;
         Dpid moved = null;
@@ -150,7 +152,7 @@
     private class TestTopologyService extends TopologyServiceAdapter {
         @Override
         public boolean isInfrastructure(Topology topology,
-                                        ConnectPoint connectPoint) {
+                ConnectPoint connectPoint) {
             //simulate DPID3 as an infrastructure switch
             if (Dpid.dpid(connectPoint.deviceId().uri()).equals(DPID3)) {
                 return true;
@@ -168,7 +170,7 @@
         }
 
         @Override
-        public boolean blocked() {
+        public boolean block() {
             return false;
         }
 
@@ -189,16 +191,16 @@
             // just things we (and serializers) need
             ARP arp = new ARP();
             arp.setSenderProtocolAddress(IP)
-                    .setSenderHardwareAddress(MAC.toBytes())
-                    .setTargetHardwareAddress(BCMAC.toBytes())
-                    .setTargetProtocolAddress(IP);
+            .setSenderHardwareAddress(MAC.toBytes())
+            .setTargetHardwareAddress(BCMAC.toBytes())
+            .setTargetProtocolAddress(IP);
 
             Ethernet eth = new Ethernet();
             eth.setEtherType(Ethernet.TYPE_ARP)
-                    .setVlanID(VLAN.toShort())
-                    .setSourceMACAddress(MAC.toBytes())
-                    .setDestinationMACAddress(BCMAC.getAddress())
-                    .setPayload(arp);
+            .setVlanID(VLAN.toShort())
+            .setSourceMACAddress(MAC.toBytes())
+            .setDestinationMACAddress(BCMAC.getAddress())
+            .setPayload(arp);
 
             return eth;
         }
@@ -218,5 +220,10 @@
             return INPORT;
         }
 
+        @Override
+        public boolean isHandled() {
+            return false;
+        }
+
     }
 }
diff --git a/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java b/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java
index ff9a996..8935d59 100644
--- a/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java
+++ b/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java
@@ -93,7 +93,7 @@
                 return;
             }
             if (ld.handleLLDP(pktCtx.unparsed(), pktCtx.inPort())) {
-                pktCtx.blocked();
+                pktCtx.block();
             }
 
         }
diff --git a/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java b/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
index eb41c18..40b40e4 100644
--- a/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
+++ b/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
@@ -87,7 +87,7 @@
                     pktCtx.parsed(), ByteBuffer.wrap(pktCtx.unparsed()));
 
             OpenFlowCorePacketContext corePktCtx =
-                    new OpenFlowCorePacketContext(0, inPkt, null, false, pktCtx);
+                    new OpenFlowCorePacketContext(0, inPkt, null, pktCtx.isHandled(), pktCtx);
             providerService.processPacket(corePktCtx);
         }
 
