diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
new file mode 100644
index 0000000..5f42ef2
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
@@ -0,0 +1,84 @@
+package net.onrc.onos.ofcontroller.networkgraph;
+
+import java.net.InetAddress;
+
+import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.datastore.topology.RCPort;
+import net.onrc.onos.datastore.topology.RCSwitch;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import edu.stanford.ramcloud.JRamCloud.ObjectDoesntExistException;
+
+public class NetworkGraphImpl implements NetworkGraph {
+
+	private static final Logger log = LoggerFactory.getLogger(NetworkGraphImpl.class);
+	
+	@Override
+	public Switch getSwitch(long dpid) {
+		SwitchImpl sw = new SwitchImpl(this);
+		
+		RCSwitch rcSwitch = new RCSwitch(dpid);
+		try {
+			rcSwitch.read();
+		} catch (ObjectDoesntExistException e) {
+			log.warn("Tried to get a switch that doesn't exist {}", dpid);
+			return null;
+		}
+		
+		sw.setDpid(rcSwitch.getDpid());
+		
+		for (byte[] portId : rcSwitch.getAllPortIds()) {
+			RCPort rcPort = RCPort.createFromKey(portId);
+			try {
+				rcPort.read();
+				
+				PortImpl port = new PortImpl(this);
+				//port.setDpid(dpid);
+				
+				// TODO why are port numbers long?
+				//port.setPortNumber((short)rcPort.getNumber());
+				
+				port.setSwitch(sw);
+				sw.addPort(port);
+				
+			} catch (ObjectDoesntExistException e) {
+				log.warn("Tried to read port that doesn't exist", rcPort);
+			}
+		}
+		
+		return sw;
+	}
+
+	@Override
+	public Iterable<Switch> getSwitches() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public Iterable<Link> getLinks() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public Iterable<Link> getLinksFromSwitch(long dpid) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public Iterable<Device> getDeviceByIp(InetAddress ipAddress) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public Iterable<Device> getDeviceByMac(MACAddress address) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}
