diff --git a/src/main/java/net/floodlightcontroller/routing/RoutingDecision.java b/src/main/java/net/floodlightcontroller/routing/RoutingDecision.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b32b2332eb263aea330a1114bd64ebe811da3bd
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/routing/RoutingDecision.java
@@ -0,0 +1,97 @@
+package net.floodlightcontroller.routing;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import net.floodlightcontroller.core.FloodlightContext;
+import net.floodlightcontroller.devicemanager.IDevice;
+import net.floodlightcontroller.devicemanager.SwitchPort;
+
+
+public class RoutingDecision implements IRoutingDecision {
+
+    protected RoutingAction action;
+    protected Integer wildcards;
+    protected SwitchPort srcPort;
+    protected IDevice srcDevice;
+    protected List<IDevice> destDevices;
+    protected List<SwitchPort> broadcastIntertfaces;
+
+    public RoutingDecision(long swDipd,
+                                  short inPort,
+                                  IDevice srcDevice,
+                                  RoutingAction action) {
+        this.srcPort = new SwitchPort(swDipd, inPort);
+        this.srcDevice = srcDevice;
+        this.destDevices = 
+                Collections.synchronizedList(new ArrayList<IDevice>());
+        this.broadcastIntertfaces = 
+                Collections.synchronizedList(new ArrayList<SwitchPort>());
+        this.action = action;
+        this.wildcards = null;
+    }
+    
+    @Override
+    public RoutingAction getRoutingAction() {
+        return this.action;
+    }
+    
+    @Override
+    public void setRoutingAction(RoutingAction action) {
+        this.action = action;
+    }
+    
+    @Override
+    public SwitchPort getSourcePort() {
+        return this.srcPort;
+    }
+    
+    @Override
+    public IDevice getSourceDevice() {
+        return this.srcDevice;
+    }
+    
+    @Override
+    public List<IDevice> getDestinationDevices() {
+        return this.destDevices;
+    }
+    
+    @Override
+    public void addDestinationDevice(IDevice d) {
+        if (!destDevices.contains(d)) {
+            destDevices.add(d);
+        }
+    }
+    
+    @Override
+    public void setMulticastInterfaces(List<SwitchPort> lspt) {
+        this.broadcastIntertfaces = lspt;
+    }
+    
+    @Override
+    public List<SwitchPort> getMulticastInterfaces() {
+        return this.broadcastIntertfaces;
+    }
+    
+    @Override
+    public Integer getWildcards() {
+        return this.wildcards;
+    }
+    
+    @Override
+    public void setWildcards(Integer wildcards) {
+        this.wildcards = wildcards;
+    }
+   
+    @Override
+    public void addToContext(FloodlightContext cntx) {
+        rtStore.put(cntx, IRoutingDecision.CONTEXT_DECISION, this);
+    }
+    
+    public String toString() {
+        return "action " + action +
+               " wildcard " +
+               ((wildcards == null) ? null : "0x"+Integer.toHexString(wildcards.intValue()));
+    }
+}