sample app launched
diff --git a/apps/fwd/src/main/java/org/onlab/onos/fwd/ReactiveForwarding.java b/apps/fwd/src/main/java/org/onlab/onos/fwd/ReactiveForwarding.java
new file mode 100644
index 0000000..24cfe6f
--- /dev/null
+++ b/apps/fwd/src/main/java/org/onlab/onos/fwd/ReactiveForwarding.java
@@ -0,0 +1,35 @@
+package org.onlab.onos.fwd;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onlab.onos.net.packet.PacketProcessor;
+import org.onlab.onos.net.packet.PacketService;
+import org.onlab.onos.net.topology.TopologyService;
+
+@Component
+public class ReactiveForwarding {
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected TopologyService topologyService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected PacketService packetService;
+
+    private ReactivePacketProcessor processor;
+
+    @Activate
+    public void activate() {
+        processor = new ReactivePacketProcessor(topologyService);
+        packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 1);
+    }
+
+    @Deactivate
+    public void deactivate() {
+        packetService.removeProcessor(processor);
+        processor = null;
+    }
+}
+
diff --git a/apps/fwd/src/main/java/org/onlab/onos/fwd/ReactivePacketProcessor.java b/apps/fwd/src/main/java/org/onlab/onos/fwd/ReactivePacketProcessor.java
new file mode 100644
index 0000000..f4102ec
--- /dev/null
+++ b/apps/fwd/src/main/java/org/onlab/onos/fwd/ReactivePacketProcessor.java
@@ -0,0 +1,37 @@
+package org.onlab.onos.fwd;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+import org.onlab.onos.net.PortNumber;
+import org.onlab.onos.net.flow.Instructions;
+import org.onlab.onos.net.packet.PacketContext;
+import org.onlab.onos.net.packet.PacketProcessor;
+import org.onlab.onos.net.topology.TopologyService;
+import org.slf4j.Logger;
+
+public class ReactivePacketProcessor implements PacketProcessor {
+
+    private final Logger log = getLogger(getClass());
+    private final TopologyService topologyService;
+
+
+    public ReactivePacketProcessor(TopologyService topologyService) {
+        this.topologyService = topologyService;
+    }
+
+
+    @Override
+    public void process(PacketContext context) {
+        boolean canBcast = topologyService.isBroadcastPoint(topologyService.currentTopology(),
+                context.inPacket().receivedFrom());
+
+        if (canBcast) {
+            context.treatmentBuilder().add(Instructions.createOutput(PortNumber.FLOOD));
+            context.send();
+        } else {
+            context.block();
+        }
+
+    }
+
+}
diff --git a/apps/pom.xml b/apps/pom.xml
index 860c4dd..078a92d 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -18,6 +18,7 @@
 
     <modules>
         <module>tvue</module>
+        <module>fwd</module>
     </modules>
 
     <properties>
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 d206c97..6eaa2c3 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
@@ -6,7 +6,6 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.onlab.onos.net.PortNumber;
 import org.slf4j.Logger;
 
 @SuppressWarnings("rawtypes")
@@ -33,29 +32,33 @@
 
         private final Logger log = getLogger(getClass());
 
-        List<Instruction<PortNumber>> outputs = new LinkedList<>();
+        boolean drop = false;
+
+        List<Instruction> outputs = new LinkedList<>();
 
         // TODO: should be a list of instructions based on group objects
-        List<Instruction<Object>> groups = new LinkedList<>();
+        List<Instruction> groups = new LinkedList<>();
 
         // TODO: should be a list of instructions based on modification objects
-        List<Instruction<Object>> modifications = new LinkedList<>();
+        List<Instruction> modifications = new LinkedList<>();
 
 
-        @SuppressWarnings("unchecked")
         @Override
         public Builder add(Instruction instruction) {
             switch (instruction.type()) {
-            case OUTPUT:
             case DROP:
-                // TODO: should check that there is only one drop instruction.
+                drop = true;
+                break;
+            case OUTPUT:
                 outputs.add(instruction);
                 break;
             case MODIFICATION:
                 // TODO: enforce modification order if any
                 modifications.add(instruction);
+                break;
             case GROUP:
                 groups.add(instruction);
+                break;
             default:
                 log.warn("Unknown instruction type {}", instruction.type());
             }
@@ -64,10 +67,14 @@
 
         @Override
         public TrafficTreatment build() {
+
+            //If we are dropping should we just return an emptry list?
             List<Instruction> instructions = new LinkedList<Instruction>();
             instructions.addAll(modifications);
             instructions.addAll(groups);
-            instructions.addAll(outputs);
+            if (!drop) {
+                instructions.addAll(outputs);
+            }
 
             return new DefaultTrafficTreatment(instructions);
         }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/Instruction.java b/core/api/src/main/java/org/onlab/onos/net/flow/Instruction.java
index e9ea35b..0888d9b 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/Instruction.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/Instruction.java
@@ -4,7 +4,7 @@
  * Abstraction of a single traffic treatment step.
  * @param <T> the type parameter for the instruction
  */
-public interface Instruction<T> {
+public interface Instruction {
 
     /**
      * Represents the type of traffic treatment.
@@ -41,10 +41,4 @@
      */
     public Type type();
 
-    /**
-     * Returns the actual value of the instruction.
-     * @return the value for this instruction
-     */
-    public T instruction();
-
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/Instructions.java b/core/api/src/main/java/org/onlab/onos/net/flow/Instructions.java
index f72b07e..9681076 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/Instructions.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/Instructions.java
@@ -1,7 +1,8 @@
 package org.onlab.onos.net.flow;
 
-import org.onlab.onos.net.PortNumber;
+import static com.google.common.base.Preconditions.checkNotNull;
 
+import org.onlab.onos.net.PortNumber;
 /**
  * Factory class for creating various traffic treatment instructions.
  */
@@ -17,22 +18,44 @@
      * @param number port number
      * @return output instruction
      */
-    public static Instruction<PortNumber> createOutput(final PortNumber number) {
-        return new Instruction<PortNumber>() {
+    public static OutputInstruction createOutput(final PortNumber number) {
+        checkNotNull(number, "PortNumber cannot be null");
+        return new OutputInstruction(number);
+    }
 
-            @Override
-            public Instruction.Type type() {
-                return Type.OUTPUT;
-            }
-
-            @Override
-            public PortNumber instruction() {
-                return number;
-            }
-
-        };
+    public static DropInstruction createDrop() {
+        return new DropInstruction();
     }
 
     // TODO: add create methods
 
+    public static final class DropInstruction implements Instruction {
+
+        @Override
+        public Type type() {
+            return Type.DROP;
+        }
+    }
+
+
+    public static final class OutputInstruction implements Instruction {
+
+        private final PortNumber port;
+
+        private OutputInstruction(PortNumber port) {
+            this.port = port;
+        }
+
+        public PortNumber port() {
+            return port;
+        }
+
+        @Override
+        public Type type() {
+            return Type.OUTPUT;
+        }
+
+
+    }
+
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/DefaultPacketContext.java b/core/api/src/main/java/org/onlab/onos/net/packet/DefaultPacketContext.java
index 3c2b0ea..6f1b708 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/DefaultPacketContext.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/DefaultPacketContext.java
@@ -51,7 +51,7 @@
     public abstract void send();
 
     @Override
-    public boolean blocked() {
+    public boolean block() {
         return this.block.getAndSet(true);
     }
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java b/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java
index ce08fde..48cb084 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java
@@ -45,7 +45,7 @@
      * Blocks the outbound packet from being sent from this point onward.
      * @return whether the outbound packet is blocked.
      */
-    boolean blocked();
+    boolean block();
 
     /**
      * Check whether the outbound packet is blocked.
diff --git a/core/api/src/test/java/org/onlab/onos/event/AbstractEventAccumulatorTest.java b/core/api/src/test/java/org/onlab/onos/event/AbstractEventAccumulatorTest.java
index c0cce92..9e561bf 100644
--- a/core/api/src/test/java/org/onlab/onos/event/AbstractEventAccumulatorTest.java
+++ b/core/api/src/test/java/org/onlab/onos/event/AbstractEventAccumulatorTest.java
@@ -1,13 +1,15 @@
 package org.onlab.onos.event;
 
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.onlab.junit.TestTools.delay;
+import static org.onlab.onos.event.TestEvent.Type.FOO;
 
 import java.util.List;
 import java.util.Timer;
 
-import static org.junit.Assert.*;
-import static org.onlab.junit.TestTools.delay;
-import static org.onlab.onos.event.TestEvent.Type.FOO;
+import org.junit.Test;
 
 /**
  * Tests the operation of the accumulator.
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java
deleted file mode 100644
index bc5d30a..0000000
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.onlab.onos.net.trivial.packet.impl;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-import org.onlab.onos.net.PortNumber;
-import org.onlab.onos.net.flow.Instructions;
-import org.onlab.onos.net.packet.PacketContext;
-import org.onlab.onos.net.packet.PacketProcessor;
-import org.slf4j.Logger;
-
-public class ReactivePacketProcessor implements PacketProcessor {
-
-    private final Logger log = getLogger(getClass());
-
-    @Override
-    public void process(PacketContext context) {
-        context.treatmentBuilder().add(Instructions.createOutput(PortNumber.FLOOD));
-        context.send();
-    }
-
-}
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java
index 95d3664..637ada8 100644
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java
@@ -1,5 +1,6 @@
 package org.onlab.onos.net.trivial.packet.impl;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static org.slf4j.LoggerFactory.getLogger;
 
 import java.util.Map;
@@ -42,22 +43,20 @@
 
     private final Map<Integer, PacketProcessor> processors = new TreeMap<>();
 
-    private final PacketProcessor reactiveProcessor = new ReactivePacketProcessor();
 
     @Activate
     public void activate() {
-        addProcessor(reactiveProcessor, PacketProcessor.ADVISOR_MAX + 1);
         log.info("Started");
     }
 
     @Deactivate
     public void deactivate() {
-        removeProcessor(reactiveProcessor);
         log.info("Stopped");
     }
 
     @Override
     public void addProcessor(PacketProcessor processor, int priority) {
+        checkNotNull(processor, "Processor cannot be null");
         processors.put(priority, processor);
     }
 
diff --git a/features/features.xml b/features/features.xml
index 72493c0..10f63bd 100644
--- a/features/features.xml
+++ b/features/features.xml
@@ -78,5 +78,12 @@
         <feature>onos-thirdparty-web</feature>
         <bundle>mvn:org.onlab.onos/onos-app-tvue/1.0.0-SNAPSHOT</bundle>
     </feature>
+    
+    <feature name="onos-app-fwd" version="1.0.0"
+             description="ONOS sample forwarding application">
+        <feature>onos-core</feature>
+        <bundle>mvn:org.onlab.onos/onos-app-fwd/1.0.0-SNAPSHOT</bundle>
+    </feature>
+
 
 </features>
diff --git a/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java b/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
index 55476d0..0330bc6 100644
--- a/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
+++ b/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
@@ -7,6 +7,7 @@
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.flow.Instruction;
 import org.onlab.onos.net.flow.Instruction.Type;
+import org.onlab.onos.net.flow.Instructions.OutputInstruction;
 import org.onlab.onos.net.packet.DefaultPacketContext;
 import org.onlab.onos.net.packet.InboundPacket;
 import org.onlab.onos.net.packet.OutboundPacket;
@@ -29,7 +30,7 @@
 
     @Override
     public void send() {
-        if (!this.blocked()) {
+        if (!this.block()) {
             if (outPacket() == null) {
                 sendBufferedPacket();
             } else {
@@ -42,14 +43,13 @@
         }
     }
 
-    @SuppressWarnings({ "rawtypes", "unchecked" })
     private void sendBufferedPacket() {
         List<Instruction> ins = treatmentBuilder().build().instructions();
         OFPort p = null;
         //TODO: support arbitrary list of treatments
         for (Instruction i : ins) {
             if (i.type() == Type.OUTPUT) {
-                p = buildPort(((Instruction<PortNumber>) i).instruction());
+                p = buildPort(((OutputInstruction) i).port());
                 break; //for now...
             }
         }