diff --git a/build.xml b/build.xml
index e46a36d..99afa03 100644
--- a/build.xml
+++ b/build.xml
@@ -234,12 +234,12 @@
             <fileset dir="${python-src}">
                 <include name="**/*.py"/>
             </fileset>
-            <zipgroupfileset dir="${lib}">
-                <patternset refid="lib"/>
-            </zipgroupfileset>
             <zipgroupfileset dir="${titanlib}">
                 <patternset refid="titanlib"/>
             </zipgroupfileset>
+            <zipgroupfileset dir="${lib}">
+                <patternset refid="lib"/>
+            </zipgroupfileset>
         </jar>
         <jar destfile="${floodlight-test-jar}" filesetmanifest="mergewithoutmain">
             <manifest>
diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index 3592fbc..8a35b54 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -1431,6 +1431,9 @@
         
         updateActiveSwitchInfo(sw);
         swStore.update(sw.getStringId(), SwitchState.ACTIVE, DM_OPERATION.UPDATE);
+        for (OFPhysicalPort port: sw.getPorts()) {
+            swStore.addPort(sw.getStringId(), port);
+        }
         SwitchUpdate update = new SwitchUpdate(sw, SwitchUpdateType.ADDED);
         try {
             this.updates.put(update);
diff --git a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
index 68633b1..3bb6c87 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/SwitchStorageImpl.java
@@ -68,22 +68,26 @@
 		Vertex sw;
 		try {
             if ((sw = graph.getVertices("dpid",dpid).iterator().next()) != null) {
-            	log.info("SwitchStorage:addPort dpid:{} port:{}", dpid, port);
+            	log.info("SwitchStorage:addPort dpid:{} port:{}", dpid, port.getPortNumber());
             	// TODO: Check if port exists
-            	Vertex p = graph.addVertex(null);
-            	p.setProperty("type","port");
-            	p.setProperty("number",port.getPortNumber());
-            	p.setProperty("state",port.getState());
-            	p.setProperty("desc",port.getName());
-            	Edge e = graph.addEdge(null, sw, p, "on");
-            	e.setProperty("state","ACTIVE");
-            	e.setProperty("number", port.getPortNumber());
-            	
-            	graph.stopTransaction(Conclusion.SUCCESS);
+            	if (sw.query().direction(Direction.OUT).labels("on").has("number",port.getPortNumber()).vertices().iterator().hasNext()) {
+            		//TODO: Do nothing for now 
+            	} else {
+            		Vertex p = graph.addVertex(null);
+            		p.setProperty("type","port");
+            		p.setProperty("number",port.getPortNumber());
+            		p.setProperty("state",port.getState());
+            		p.setProperty("desc",port.getName());
+            		Edge e = graph.addEdge(null, sw, p, "on");
+            		e.setProperty("state","ACTIVE");
+            		e.setProperty("number", port.getPortNumber());
+                     	
+            		graph.stopTransaction(Conclusion.SUCCESS);
+            	}
             }
 		} catch (TitanException e) {
              // TODO: handle exceptions
-			log.info("SwitchStorage:addPort dpid:{} port:{}", dpid, port);
+			log.info("SwitchStorage:addPort dpid:{} port:{}", dpid, port.getPortNumber());
 		}	
 
 	}
@@ -186,7 +190,7 @@
 		db.setProperty("storage.hostname","127.0.0.1");
         graph = TitanFactory.open(db);
         
-        // FIXME: 
+        // FIXME: Creation on Indexes should be done only once
         Set<String> s = graph.getIndexedKeys(Vertex.class);
         if (!s.contains("dpid")) {
            graph.createKeyIndex("dpid", Vertex.class);
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index 6f7c9b7..e227b71 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -191,7 +191,7 @@
     int lldpTimeCount = 0;
 
     // Storage
-    protected LinkStorageImplStubs linkStore;
+    protected LinkStorageImpl linkStore;
     
     /**
      * Flag to indicate if automatic port fast is enabled or not.
@@ -1868,7 +1868,7 @@
         }
 
         // Initialize the link storage connector to the network map
-        this.linkStore = new LinkStorageImplStubs();
+        this.linkStore = new LinkStorageImpl();
         this.linkStore.init("");
         
         ScheduledExecutorService ses = threadPool.getScheduledExecutor();
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
index af99506..1fb80e9 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
@@ -86,8 +86,13 @@
             }
             
             if (vportSrc != null && vportDst != null) {
-        		graph.addEdge(null, vportSrc, vportDst, "link");
-        		graph.stopTransaction(Conclusion.SUCCESS);
+            	//TODO: If Edge already exists should we remove and add again?
+            	if (vportSrc.query().direction(Direction.OUT).labels("link").vertices().iterator().equals(vportDst)) {
+            		//FIXME: Succeed silently for now
+            	} else {
+            		graph.addEdge(null, vportSrc, vportDst, "link");
+            		graph.stopTransaction(Conclusion.SUCCESS);
+            	}
         		log.debug("addLink(): link added {} src {} dst {}", new Object[]{lt, vportSrc, vportDst});
             } else {
             	log.error("addLink(): failed {} src {} dst {}", new Object[]{lt, vportSrc, vportDst});
