diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
index c8ca86f..5ea398b 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
@@ -82,10 +82,12 @@
             	}
             	
             	if (currLinks.contains(vportDst)) {
-            		// TODO: update linkinfo
             		if (op.equals(DM_OPERATION.INSERT) || op.equals(DM_OPERATION.CREATE)) {
             			log.debug("addOrUpdateLink(): failed link exists {} {} src {} dst {}", 
             					new Object[]{op, lt, vportSrc, vportDst});
+            		} else if (op.equals(DM_OPERATION.UPDATE)) {
+                		// TODO: update linkinfo
+            			// GraphDB seems to have no KeyIndex for LinkInfo data
             		}
             	} else {
             		vportSrc.setLinkPort(vportDst);
@@ -165,24 +167,34 @@
         }
 	}
 
-	// TODO: Fix me
 	@Override
 	public List<Link> getLinks(Long dpid, short port) {
 		GraphDBConnection conn = GraphDBConnection.getInstance(this.conf);
-		IPortObject vportSrc, vportDst;
-    	List<Link> links = null;
-    	Link lt;
+		IPortObject vportSrc;
+		
+		List<Link> links = new ArrayList<Link>();
     	
 		vportSrc = conn.utils().searchPort(conn, HexString.toHexString(dpid), port);
 		if (vportSrc != null) {
-			
-     		for (Edge e : vportSrc.asVertex().getEdges(Direction.OUT)) {
-     			if (e.getLabel().equals("link")) {
-     				break;
-     			}
-     		}
+ 			
+			for (Edge e : vportSrc.asVertex().getEdges(Direction.IN)) {
+				if(e.getLabel().equals("link")) {
+					Vertex v = e.getVertex(Direction.OUT);
+					short dst_port = v.getProperty("number");
+					for(Edge e2 : v.getEdges(Direction.IN)) {
+						if(e2.getLabel().equals("on")) {
+							Vertex v2 = e2.getVertex(Direction.OUT);
+							long dst_dpid = HexString.toLong((String) v2.getProperty("dpid"));
+							
+			         		Link lt = new Link(dpid, port, dst_dpid, dst_port);
+			         		links.add(lt);
+						}
+					}
+				}
+			}
 		}
-     	return null;
+		
+     	return links;
 	}
 	
 	@Override
@@ -195,14 +207,28 @@
 
 	@Override
 	public void deleteLinksOnPort(Long dpid, short port) {
-		// TODO Auto-generated method stub
+		List<Link> linksToDelete = getLinks(dpid,port);
 		
+		for(Link l : linksToDelete) {
+			deleteLink(l);
+		}
 	}
 
 	@Override
 	public List<Link> getLinks(String dpid) {
-		// TODO Auto-generated method stub
-		return null;
+		GraphDBConnection conn = GraphDBConnection.getInstance(this.conf);
+		ISwitchObject vswitch;
+		List<Link> links = new ArrayList<Link>();
+
+		vswitch = conn.utils().searchSwitch(conn, dpid);
+
+		for(IPortObject vportSrc : vswitch.getPorts()) {
+			// TODO array concatenation may be heavy
+			List<Link> sublinks = getLinks(HexString.toLong(dpid), vportSrc.getNumber());
+			links.addAll(sublinks);
+		}
+
+		return links;
 	}
 
 	public List<Link> getActiveLinks() {
