flowrules are pushed: we still have an intermittent hang though
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);
         }