diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/FloodlightToOnosMappers.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/FloodlightToOnosMappers.java
index 0619087..9bd8051 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/FloodlightToOnosMappers.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/FloodlightToOnosMappers.java
@@ -9,29 +9,32 @@
 	public static Switch map(NetworkGraph graph, IOFSwitch sw) {
 		SwitchImpl onosSwitch = new SwitchImpl(graph);
 		onosSwitch.setDpid(sw.getId());
-		
+
 		for (OFPhysicalPort port : sw.getPorts()) {
 			onosSwitch.addPort(map(graph, port));
 		}
-		
+
 		return onosSwitch;
 	}
-	
+
 	public static Port map(NetworkGraph graph, OFPhysicalPort port) {
 		PortImpl onosPort = new PortImpl(graph);
 		onosPort.setPortNumber(port.getPortNumber());
 		return onosPort;
 	}
-	
+
 	public static Link map(NetworkGraph graph, net.floodlightcontroller.routing.Link link) {
 		LinkImpl onosLink = new LinkImpl(graph);
-		
-		onosLink.setSrcSwitch(link.getSrc());
-		onosLink.setSrcPort(link.getSrcPort());
-		onosLink.setDstSwitch(link.getDst());
-		onosLink.setDstPort(link.getDstPort());
-		
+
+		Switch srcSw = graph.getSwitch(link.getSrc());
+		onosLink.setSrcSwitch(srcSw);
+		onosLink.setSrcPort(srcSw.getPort(link.getSrcPort()));
+
+		Switch dstSw = graph.getSwitch(link.getDst());
+		onosLink.setDstSwitch(dstSw);
+		onosLink.setDstPort(dstSw.getPort(link.getDstPort()));
+
 		return onosLink;
-		
+
 	}
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
index 59af6d0..c566eea 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
@@ -8,10 +8,10 @@
  */
 public class LinkImpl extends NetworkGraphObject implements Link {
 
-	private long srcSwitch;
-	private short srcPort;
-	private long dstSwitch;
-	private short dstPort;
+	private Switch srcSwitch;
+	private Port srcPort;
+	private Switch dstSwitch;
+	private Port dstPort;
 
 	private static final int DEFAULT_COST = 1;
 	private int cost = DEFAULT_COST;
@@ -61,37 +61,41 @@
 
 	@Override
 	public long getSourceSwitchDpid() {
-		return srcSwitch;
+		return srcSwitch.getDpid();
 	}
 
-	public void setSrcSwitch(long srcSwitch) {
+	public void setSrcSwitch(Switch srcSwitch) {
+	    // TODO null check
 		this.srcSwitch = srcSwitch;
 	}
 
 	@Override
 	public short getSourcePortNumber() {
-		return srcPort;
+		return srcPort.getNumber();
 	}
 
-	public void setSrcPort(short srcPort) {
+	public void setSrcPort(Port srcPort) {
+	    // TODO null check
 		this.srcPort = srcPort;
 	}
 
 	@Override
 	public long getDestinationSwitchDpid() {
-		return dstSwitch;
+		return dstSwitch.getDpid();
 	}
 
-	public void setDstSwitch(long dstSwitch) {
+	public void setDstSwitch(Switch dstSwitch) {
+	    // TODO null check
 		this.dstSwitch = dstSwitch;
 	}
 
 	@Override
 	public short getDestinationPortNumber() {
-		return dstPort;
+		return dstPort.getNumber();
 	}
 
-	public void setDstPort(short dstPort) {
+	public void setDstPort(Port dstPort) {
+	    // TODO null check
 		this.dstPort = dstPort;
 	}
 
