diff --git a/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java b/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
index a3eb830..b16e4a9 100644
--- a/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
+++ b/src/main/java/net/floodlightcontroller/core/INetMapTopologyService.java
@@ -8,6 +8,8 @@
 import net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject;
 import net.floodlightcontroller.routing.Link;
 import net.floodlightcontroller.topology.NodePortTuple;
+import net.floodlightcontroller.util.DataPath;
+import net.floodlightcontroller.util.SwitchPort;
 
 public interface INetMapTopologyService extends INetMapService {
 
@@ -31,8 +33,8 @@
 	}
 	
 	public interface ITopoRouteService extends IFloodlightService {
-		List<NodePortTuple> getShortestPath(NodePortTuple src, NodePortTuple dest);
-		Boolean routeExists(NodePortTuple src, NodePortTuple dest);
+	    DataPath getShortestPath(SwitchPort src, SwitchPort dest);
+	    Boolean routeExists(SwitchPort src, SwitchPort dest);
 	}
 	
 	public interface ITopoFlowService {
diff --git a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
index 6d50602..f979cc7 100644
--- a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
+++ b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
@@ -13,7 +13,11 @@
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.core.INetMapTopologyService.ITopoRouteService;
-import net.floodlightcontroller.topology.NodePortTuple;
+import net.floodlightcontroller.util.DataPath;
+import net.floodlightcontroller.util.Dpid;
+import net.floodlightcontroller.util.FlowEntry;
+import net.floodlightcontroller.util.Port;
+import net.floodlightcontroller.util.SwitchPort;
 
 import org.openflow.util.HexString;
 
@@ -87,14 +91,17 @@
     SwitchStorageImpl swStore = store.get();
 
     @Override
-    public List<NodePortTuple> getShortestPath(NodePortTuple src,
-					       NodePortTuple dest) {
-	List<NodePortTuple> result_list = new ArrayList<NodePortTuple>();
+    public DataPath getShortestPath(SwitchPort src, SwitchPort dest) {
+	DataPath result_data_path = new DataPath();
+
+	// Initialize the source and destination in the data path to return
+	result_data_path.setSrcPort(src);
+	result_data_path.setDstPort(dest);
 
 	TitanGraph titanGraph = swStore.graph;
 
-	String dpid_src = HexString.toHexString(src.getNodeId());
-	String dpid_dest = HexString.toHexString(dest.getNodeId());
+	String dpid_src = src.dpid().toString();
+	String dpid_dest = dest.dpid().toString();
 
 	//
 	// Implement the Shortest Path between two vertices by using
@@ -120,16 +127,18 @@
 
 	//
 	// Test whether we are computing a path from/to the same DPID.
-	// If "yes", then just list the "src" and "dest" in the return
-	// result.
+	// If "yes", then just add a single flow entry in the return result.
 	// NOTE: The return value will change in the future to return
 	// a single hop/entry instead of two. Currently, we need
 	// both entries to capture the source and destination ports.
 	//
 	if (dpid_src.equals(dpid_dest)) {
-	    result_list.add(new NodePortTuple(src));
-	    result_list.add(new NodePortTuple(dest));
-	    return result_list;
+	    FlowEntry flowEntry = new FlowEntry();
+	    flowEntry.setDpid(src.dpid());
+	    flowEntry.setInPort(src.port());
+	    flowEntry.setOutPort(dest.port());
+	    result_data_path.flowEntries().add(flowEntry);
+	    return result_data_path;
 	}
 
 	//
@@ -151,11 +160,13 @@
 	}
 
 	//
-	// Loop through the result and return the list
+	// Loop through the result and collect the list
 	// of <dpid, port> tuples.
 	//
 	long nodeId = 0;
 	short portId = 0;
+	Port inPort = new Port(src.port().value());
+	Port outPort = new Port();
 	for (ArrayList<Vertex> lv : results) {
 	    int idx = 0;
 	    for (Vertex v: lv) {
@@ -181,27 +192,48 @@
 
 		    System.out.println("dpid: " + dpid);
 		}
-		if (idx == 0) {
-		    idx++;
+		idx++;
+		if (idx == 1) {
 		    continue;
 		}
-		int mod = (idx - 1) % 3;
-		if ((mod == 0) || (mod == 2))  {
-		    result_list.add(new NodePortTuple(nodeId, portId));
+		int mod = idx % 3;
+		if (mod == 0) {
+		    // Setup the incoming port
+		    inPort = new Port(portId);
+		    continue;
 		}
-		idx++;
+		if (mod == 2) {
+		    // Setup the outgoing port, and add the Flow Entry
+		    outPort = new Port(portId);
+
+		    FlowEntry flowEntry = new FlowEntry();
+		    flowEntry.setDpid(new Dpid(nodeId));
+		    flowEntry.setInPort(inPort);
+		    flowEntry.setOutPort(outPort);
+		    result_data_path.flowEntries().add(flowEntry);
+		    continue;
+		}
+	    }
+
+	    if (idx > 0) {
+		// Add the last Flow Entry
+		FlowEntry flowEntry = new FlowEntry();
+		flowEntry.setDpid(new Dpid(nodeId));
+		flowEntry.setInPort(inPort);
+		flowEntry.setOutPort(dest.port());
+		result_data_path.flowEntries().add(flowEntry);
 	    }
 	}
-	if (result_list.size() > 0)
-	    return result_list;
+	if (result_data_path.flowEntries().size() > 0)
+	    return result_data_path;
 
 	return null;
     }
 
     @Override
-    public Boolean routeExists(NodePortTuple src, NodePortTuple dest) {
-	List<NodePortTuple> route = getShortestPath(src, dest);
-	if (route != null)
+    public Boolean routeExists(SwitchPort src, SwitchPort dest) {
+	DataPath dataPath = getShortestPath(src, dest);
+	if (dataPath != null)
 	    return true;
 	return false;
     }
diff --git a/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java b/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
index 3fa7510..20f39d4 100644
--- a/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
+++ b/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java
@@ -6,6 +6,10 @@
 import net.floodlightcontroller.routing.IRoutingService;
 import net.floodlightcontroller.routing.Route;
 import net.floodlightcontroller.topology.NodePortTuple;
+import net.floodlightcontroller.util.DataPath;
+import net.floodlightcontroller.util.Dpid;
+import net.floodlightcontroller.util.Port;
+import net.floodlightcontroller.util.SwitchPort;
 
 import org.openflow.util.HexString;
 import org.restlet.resource.Get;
@@ -18,7 +22,7 @@
     protected static Logger log = LoggerFactory.getLogger(RouteResource.class);
 
     @Get("json")
-    public List<NodePortTuple> retrieve() {
+    public DataPath retrieve() {
         ITopoRouteService topoRouteService = 
                 (ITopoRouteService)getContext().getAttributes().
                     get(ITopoRouteService.class.getCanonicalName());
@@ -27,22 +31,22 @@
 	    return null;
 	}
         
-        String srcDpid = (String) getRequestAttributes().get("src-dpid");
-        String srcPort = (String) getRequestAttributes().get("src-port");
-        String dstDpid = (String) getRequestAttributes().get("dst-dpid");
-        String dstPort = (String) getRequestAttributes().get("dst-port");
+        String srcDpidStr = (String) getRequestAttributes().get("src-dpid");
+        String srcPortStr = (String) getRequestAttributes().get("src-port");
+        String dstDpidStr = (String) getRequestAttributes().get("dst-dpid");
+        String dstPortStr = (String) getRequestAttributes().get("dst-port");
 
-        log.debug( srcDpid + "--" + srcPort + "--" + dstDpid + "--" + dstPort);
+        log.debug( srcDpidStr + "--" + srcPortStr + "--" + dstDpidStr + "--" + dstPortStr);
 
-        long longSrcDpid = HexString.toLong(srcDpid);
-        short shortSrcPort = Short.parseShort(srcPort);
-        long longDstDpid = HexString.toLong(dstDpid);
-        short shortDstPort = Short.parseShort(dstPort);
+	Dpid srcDpid = new Dpid(srcDpidStr);
+	Port srcPort = new Port(Short.parseShort(srcPortStr));
+	Dpid dstDpid = new Dpid(dstDpidStr);
+	Port dstPort = new Port(Short.parseShort(dstPortStr));
         
-	List<NodePortTuple> result =
-	    topoRouteService.getShortestPath(new NodePortTuple(longSrcDpid, shortSrcPort),
-					     new NodePortTuple(longDstDpid, shortDstPort));
-	if ((result != null) && (result.size() > 0)) {
+	DataPath result =
+	    topoRouteService.getShortestPath(new SwitchPort(srcDpid, srcPort),
+					     new SwitchPort(dstDpid, dstPort));
+	if (result != null) {
 	    return result;
 	} else {
             log.debug("ERROR! no route found");
diff --git a/src/main/java/net/floodlightcontroller/util/DataPath.java b/src/main/java/net/floodlightcontroller/util/DataPath.java
index 9ec9380..71e0a2f 100644
--- a/src/main/java/net/floodlightcontroller/util/DataPath.java
+++ b/src/main/java/net/floodlightcontroller/util/DataPath.java
@@ -19,6 +19,7 @@
      * Default constructor.
      */
     public DataPath() {
+	flowEntries = new ArrayList<FlowEntry>();
     }
 
     /**
diff --git a/src/main/java/net/floodlightcontroller/util/Port.java b/src/main/java/net/floodlightcontroller/util/Port.java
index 52fdf50..19bbf8f 100644
--- a/src/main/java/net/floodlightcontroller/util/Port.java
+++ b/src/main/java/net/floodlightcontroller/util/Port.java
@@ -16,6 +16,15 @@
     }
 
     /**
+     * Constructor from another entry.
+     *
+     * @param other the other entry to use.
+     */
+    public Port(Port other) {
+	this.value = other.value();
+    }
+
+    /**
      * Constructor from a long value.
      *
      * @param value the value to use.
