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
new file mode 100644
index 0000000..d206c97
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
@@ -0,0 +1,77 @@
+package org.onlab.onos.net.flow;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.onlab.onos.net.PortNumber;
+import org.slf4j.Logger;
+
+@SuppressWarnings("rawtypes")
+public class DefaultTrafficTreatment implements TrafficTreatment {
+
+    private final List<Instruction> instructions;
+
+    public DefaultTrafficTreatment(List<Instruction> instructions) {
+        this.instructions = Collections.unmodifiableList(instructions);
+    }
+
+    @Override
+    public List<Instruction> instructions() {
+        return instructions;
+    }
+
+    /**
+     * Builds a list of treatments following the following order.
+     * Modifications -> Group -> Output (including drop)
+     *
+     */
+
+    public static class Builder implements TrafficTreatment.Builder {
+
+        private final Logger log = getLogger(getClass());
+
+        List<Instruction<PortNumber>> outputs = new LinkedList<>();
+
+        // TODO: should be a list of instructions based on group objects
+        List<Instruction<Object>> groups = new LinkedList<>();
+
+        // TODO: should be a list of instructions based on modification objects
+        List<Instruction<Object>> 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.
+                outputs.add(instruction);
+                break;
+            case MODIFICATION:
+                // TODO: enforce modification order if any
+                modifications.add(instruction);
+            case GROUP:
+                groups.add(instruction);
+            default:
+                log.warn("Unknown instruction type {}", instruction.type());
+            }
+            return this;
+        }
+
+        @Override
+        public TrafficTreatment build() {
+            List<Instruction> instructions = new LinkedList<Instruction>();
+            instructions.addAll(modifications);
+            instructions.addAll(groups);
+            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 9fc1489..e9ea35b 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
@@ -2,8 +2,9 @@
 
 /**
  * Abstraction of a single traffic treatment step.
+ * @param <T> the type parameter for the instruction
  */
-public interface Instruction {
+public interface Instruction<T> {
 
     /**
      * Represents the type of traffic treatment.
@@ -33,4 +34,17 @@
     // TODO: Create factory class 'Instructions' that will have various factory
     // to create specific instructions.
 
+    /**
+     * Returns the type of instruction not to be confused
+     * with the instruction's java type.
+     * @return type of instruction
+     */
+    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 13114c3..f72b07e 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
@@ -8,8 +8,7 @@
 public final class Instructions {
 
     // Ban construction
-    private Instructions() {
-    }
+    private Instructions() {}
 
     /**
      * Creates an output instruction using the specified port number. This can
@@ -18,8 +17,20 @@
      * @param number port number
      * @return output instruction
      */
-    public static Instruction createOutput(PortNumber number) {
-        return null;
+    public static Instruction<PortNumber> createOutput(final PortNumber number) {
+        return new Instruction<PortNumber>() {
+
+            @Override
+            public Instruction.Type type() {
+                return Type.OUTPUT;
+            }
+
+            @Override
+            public PortNumber instruction() {
+                return number;
+            }
+
+        };
     }
 
     // TODO: add create methods
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/DefaultOutboundPacket.java b/core/api/src/main/java/org/onlab/onos/net/packet/DefaultOutboundPacket.java
index 8c2495c..8f49602 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/DefaultOutboundPacket.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/DefaultOutboundPacket.java
@@ -1,10 +1,11 @@
 package org.onlab.onos.net.packet;
 
-import com.google.common.base.MoreObjects;
+import java.nio.ByteBuffer;
+
 import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.flow.TrafficTreatment;
 
-import java.nio.ByteBuffer;
+import com.google.common.base.MoreObjects;
 
 /**
  * Default implementation of an immutable outbound packet.
@@ -22,7 +23,7 @@
      * @param data        raw packet data
      */
     public DefaultOutboundPacket(DeviceId sendThrough,
-                                 TrafficTreatment treatment, ByteBuffer data) {
+            TrafficTreatment treatment, ByteBuffer data) {
         this.sendThrough = sendThrough;
         this.treatment = treatment;
         this.data = data;
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 6b77225..923f168 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
@@ -1,13 +1,20 @@
 package org.onlab.onos.net.packet;
 
+import org.onlab.onos.net.flow.DefaultTrafficTreatment;
+import org.onlab.onos.net.flow.TrafficTreatment;
+import org.onlab.onos.net.flow.TrafficTreatment.Builder;
+
 
 public abstract class DefaultPacketContext implements PacketContext {
 
     private final long time;
     private final InboundPacket inPkt;
     private final OutboundPacket outPkt;
+    private final TrafficTreatment.Builder builder;
+
     private boolean block = false;
 
+
     protected DefaultPacketContext(long time, InboundPacket inPkt,
             OutboundPacket outPkt, boolean block) {
         super();
@@ -15,6 +22,7 @@
         this.inPkt = inPkt;
         this.outPkt = outPkt;
         this.block = block;
+        this.builder = new DefaultTrafficTreatment.Builder();
     }
 
     @Override
@@ -33,6 +41,11 @@
     }
 
     @Override
+    public Builder treatmentBuilder() {
+        return builder;
+    }
+
+    @Override
     public abstract void send();
 
     @Override
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
index 5e0a39b..bc5d30a 100644
--- 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
@@ -2,6 +2,8 @@
 
 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;
@@ -12,7 +14,8 @@
 
     @Override
     public void process(PacketContext context) {
-        log.info("Packet reveived {}", context.inPacket());
+        context.treatmentBuilder().add(Instructions.createOutput(PortNumber.FLOOD));
+        context.send();
     }
 
 }
