diff --git a/providers/openflow/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java b/providers/openflow/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
index 78c2e41..cb37b1c 100644
--- a/providers/openflow/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
+++ b/providers/openflow/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
@@ -225,5 +225,10 @@
             return false;
         }
 
+        @Override
+        public boolean isBuffered() {
+            return false;
+        }
+
     }
 }
diff --git a/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java b/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
index 248e17d..e7c4443 100644
--- a/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
+++ b/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
@@ -32,18 +32,19 @@
     public void send() {
         if (!this.block()) {
             if (outPacket() == null) {
-                sendBufferedPacket();
+                sendPacket(null);
             } else {
                 Ethernet eth = new Ethernet();
                 eth.deserialize(outPacket().data().array(), 0,
                         outPacket().data().array().length);
-                ofPktCtx.build(eth, OFPort.FLOOD);
+                sendPacket(eth);
+
             }
 
         }
     }
 
-    private void sendBufferedPacket() {
+    private void sendPacket(Ethernet eth) {
         List<Instruction> ins = treatmentBuilder().build().instructions();
         OFPort p = null;
         //TODO: support arbitrary list of treatments must be supported in ofPacketContext
@@ -53,10 +54,13 @@
                 break; //for now...
             }
         }
-        ofPktCtx.build(p);
+        if (eth == null) {
+            ofPktCtx.build(p);
+        } else {
+            ofPktCtx.build(eth, p);
+        }
         ofPktCtx.send();
     }
-
     private OFPort buildPort(PortNumber port) {
         return OFPort.of((int) port.toLong());
     }
diff --git a/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java b/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
index 8ce94b5..feedd88 100644
--- a/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
+++ b/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
@@ -1,5 +1,6 @@
 package org.onlab.onos.provider.of.packet.impl;
 
+import static org.onlab.onos.openflow.controller.RoleState.SLAVE;
 import static org.slf4j.LoggerFactory.getLogger;
 
 import java.nio.ByteBuffer;
@@ -16,6 +17,7 @@
 import org.onlab.onos.net.flow.instructions.Instruction;
 import org.onlab.onos.net.flow.instructions.Instructions.OutputInstruction;
 import org.onlab.onos.net.packet.DefaultInboundPacket;
+import org.onlab.onos.net.packet.DefaultOutboundPacket;
 import org.onlab.onos.net.packet.OutboundPacket;
 import org.onlab.onos.net.packet.PacketProvider;
 import org.onlab.onos.net.packet.PacketProviderRegistry;
@@ -36,8 +38,6 @@
 import org.projectfloodlight.openflow.types.OFPort;
 import org.slf4j.Logger;
 
-import static org.onlab.onos.openflow.controller.RoleState.*;
-
 
 /**
  * Provider which uses an OpenFlow controller to detect network
@@ -152,9 +152,15 @@
                     new ConnectPoint(id, PortNumber.portNumber(pktCtx.inPort())),
                     pktCtx.parsed(), ByteBuffer.wrap(pktCtx.unparsed()));
 
+            DefaultOutboundPacket outPkt = null;
+            if (!pktCtx.isBuffered()) {
+                outPkt = new DefaultOutboundPacket(id, null,
+                        ByteBuffer.wrap(pktCtx.unparsed()));
+            }
+
             OpenFlowCorePacketContext corePktCtx =
                     new OpenFlowCorePacketContext(System.currentTimeMillis(),
-                            inPkt, null, pktCtx.isHandled(), pktCtx);
+                            inPkt, outPkt, pktCtx.isHandled(), pktCtx);
             providerService.processPacket(corePktCtx);
         }
 
