diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java
deleted file mode 100644
index 9c81d7e..0000000
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package net.floodlightcontroller.linkdiscovery.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.floodlightcontroller.linkdiscovery.internal.LinkStorageImpl.ExtractLink;
-import net.floodlightcontroller.routing.Link;
-import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
-import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoLinkService;
-import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBConnection.Transaction;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.tinkerpop.blueprints.Vertex;
-import com.tinkerpop.gremlin.java.GremlinPipeline;
-
-public class TopoLinkServiceImpl implements ITopoLinkService {
-	
-	public GraphDBConnection conn;
-	protected static Logger log = LoggerFactory.getLogger(TopoLinkServiceImpl.class);
-
-
-	public void finalize() {
-		close();
-	}
-	
-	@Override
-	public void close() {
-		conn.close();
-	}
- 
-	@Override
-	public List<Link> getActiveLinks() {
-		// TODO Auto-generated method stub
-		conn = GraphDBConnection.getInstance("");
-		conn.close(); //Commit to ensure we see latest data
-		Iterable<ISwitchObject> switches = conn.utils().getActiveSwitches(conn);
-		List<Link> links = new ArrayList<Link>(); 
-		for (ISwitchObject sw : switches) {
-			GremlinPipeline<Vertex, Link> pipe = new GremlinPipeline<Vertex, Link>();
-			ExtractLink extractor = new ExtractLink();
-
-			pipe.start(sw.asVertex());
-			pipe.enablePath(true);
-			pipe.out("on").out("link").in("on").path().step(extractor);
-					
-			while (pipe.hasNext() ) {
-				Link l = pipe.next();
-				links.add(l);
-			}
-						
-		}
-		conn.endTx(Transaction.COMMIT);
-		return links;
-	}
-
-	@Override
-	public List<Link> getLinksOnSwitch(String dpid) {
-		// TODO Auto-generated method stub
-		List<Link> links = new ArrayList<Link>(); 
-		ISwitchObject sw = conn.utils().searchSwitch(conn, dpid);
-		GremlinPipeline<Vertex, Link> pipe = new GremlinPipeline<Vertex, Link>();
-		ExtractLink extractor = new ExtractLink();
-
-		pipe.start(sw.asVertex());
-		pipe.enablePath(true);
-		pipe.out("on").out("link").in("on").path().step(extractor);
-			
-		while (pipe.hasNext() ) {
-			Link l = pipe.next();
-			links.add(l);
-		}
-		return links;
-
-	}
-	
-}
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/web/TopoLinksResource.java b/src/main/java/net/floodlightcontroller/linkdiscovery/web/TopoLinksResource.java
index 25b68fb..47a09f3 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/web/TopoLinksResource.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/web/TopoLinksResource.java
@@ -1,8 +1,8 @@
 package net.floodlightcontroller.linkdiscovery.web;
 
 import java.util.List;
-import net.floodlightcontroller.linkdiscovery.internal.TopoLinkServiceImpl;
 import net.floodlightcontroller.routing.Link;
+import net.onrc.onos.ofcontroller.linkdiscovery.internal.TopoLinkServiceImpl;
 
 import org.restlet.resource.Get;
 import org.restlet.resource.ServerResource;
