diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
index 4c4a071dadabde095d0b38a719f7c652f8a681bb..ff2aaf3bee7d7a948c0760760dc7c780400bde32 100755
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
@@ -1244,15 +1244,15 @@ public class DeviceManagerImpl implements IDeviceManagerService, IOFMessageListe
     }
 
     @Override
-    public void addedLink(IOFSwitch srcSw, short srcPort, int srcPortState,
-            IOFSwitch dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type)
+    public void addedLink(long srcSw, short srcPort, int srcPortState,
+            long dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type)
     {
         updatedLink(srcSw, srcPort, srcPortState, dstSw, dstPort, dstPortState, type);
     }
 
     @Override
-    public void updatedLink(IOFSwitch srcSw, short srcPort, int srcPortState,
-            IOFSwitch dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type)
+    public void updatedLink(long srcSw, short srcPort, int srcPortState,
+            long dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type)
     {
         if (((srcPortState & OFPortState.OFPPS_STP_MASK.getValue()) != 
                     OFPortState.OFPPS_STP_BLOCK.getValue()) &&
@@ -1260,7 +1260,7 @@ public class DeviceManagerImpl implements IDeviceManagerService, IOFMessageListe
                     OFPortState.OFPPS_STP_BLOCK.getValue())) {
             // Remove all devices living on this switch:port now that it is 
             // internal
-            SwitchPortTuple switchPort = new SwitchPortTuple(dstSw, dstPort);
+            SwitchPortTuple switchPort = new SwitchPortTuple(floodlightProvider.getSwitches().get(dstSw), dstPort);
             lock.writeLock().lock();
             try {
                 devMgrMaps.removeSwPort(switchPort);
@@ -1271,7 +1271,7 @@ public class DeviceManagerImpl implements IDeviceManagerService, IOFMessageListe
     }
 
     @Override
-    public void removedLink(IOFSwitch src, short srcPort, IOFSwitch dst, 
+    public void removedLink(long src, short srcPort, long dst, 
                                                                 short dstPort)
     {
         // no-op
@@ -2018,7 +2018,8 @@ public class DeviceManagerImpl implements IDeviceManagerService, IOFMessageListe
     }
 
     @Override
-    public void updatedSwitch(IOFSwitch sw) {
+    public void updatedSwitch(long swId) {
+        IOFSwitch sw = floodlightProvider.getSwitches().get(swId);
         if (sw.hasAttribute(IOFSwitch.SWITCH_IS_CORE_SWITCH)) {
             removedSwitch(sw);
         }
diff --git a/src/main/java/net/floodlightcontroller/routing/dijkstra/RoutingImpl.java b/src/main/java/net/floodlightcontroller/routing/dijkstra/RoutingImpl.java
index 3082ab5c9a30debc97be712067ca8a08e2d5523c..3b5b0da3b0c34dba9bc1421282790f6bfe8b6f07 100644
--- a/src/main/java/net/floodlightcontroller/routing/dijkstra/RoutingImpl.java
+++ b/src/main/java/net/floodlightcontroller/routing/dijkstra/RoutingImpl.java
@@ -33,7 +33,6 @@ import org.openflow.util.HexString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import net.floodlightcontroller.core.IOFSwitch;
 import net.floodlightcontroller.core.module.FloodlightModuleContext;
 import net.floodlightcontroller.core.module.FloodlightModuleException;
 import net.floodlightcontroller.core.module.IFloodlightModule;
@@ -157,25 +156,25 @@ public class RoutingImpl
     }
 
     @Override
-    public void addedLink(IOFSwitch srcSw, short srcPort, int srcPortState,
-            IOFSwitch dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type)
+    public void addedLink(long srcSw, short srcPort, int srcPortState,
+            long dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type)
     {
         updatedLink(srcSw, srcPort, srcPortState, dstSw, dstPort, dstPortState, type);
     }
     
     @Override
-    public void updatedLink(IOFSwitch src, short srcPort, int srcPortState,
-            IOFSwitch dst, short dstPort, int dstPortState, ILinkDiscovery.LinkType type)
+    public void updatedLink(long src, short srcPort, int srcPortState,
+            long dst, short dstPort, int dstPortState, ILinkDiscovery.LinkType type)
     {
         boolean added = (((srcPortState & OFPortState.OFPPS_STP_MASK.getValue()) != OFPortState.OFPPS_STP_BLOCK.getValue()) &&
             ((dstPortState & OFPortState.OFPPS_STP_MASK.getValue()) != OFPortState.OFPPS_STP_BLOCK.getValue()));
-        update(src.getId(), srcPort, dst.getId(), dstPort, added);
+        update(src, srcPort, dst, dstPort, added);
     }
     
     @Override
-    public void removedLink(IOFSwitch src, short srcPort, IOFSwitch dst, short dstPort)
+    public void removedLink(long src, short srcPort, long dst, short dstPort)
     {
-        update(src.getId(), srcPort, dst.getId(), dstPort, false);
+        update(src, srcPort, dst, dstPort, false);
     }    
     
     @Override
@@ -328,7 +327,7 @@ public class RoutingImpl
     }
 
     @Override
-    public void updatedSwitch(IOFSwitch sw) {
+    public void updatedSwitch(long sw) {
         // Ignored by RoutingImpl
     }
 
diff --git a/src/main/java/net/floodlightcontroller/topology/ILinkDiscoveryListener.java b/src/main/java/net/floodlightcontroller/topology/ILinkDiscoveryListener.java
index ad78beb534c5a5afb180c5ad6403be41b57ca89f..bc3bb3664fbc5a1e5f0a39769dd8e2299c1a06e3 100644
--- a/src/main/java/net/floodlightcontroller/topology/ILinkDiscoveryListener.java
+++ b/src/main/java/net/floodlightcontroller/topology/ILinkDiscoveryListener.java
@@ -17,13 +17,6 @@
 
 package net.floodlightcontroller.topology;
 
-import net.floodlightcontroller.core.IOFSwitch;
-
-/**
- *
- *
- * @author David Erickson (daviderickson@cs.stanford.edu)
- */
 public interface ILinkDiscoveryListener {
     /**
      * @param srcSw the source switch
@@ -32,8 +25,8 @@ public interface ILinkDiscoveryListener {
      * @param dstSw
      * @param dstPort
      */
-    public void addedLink(IOFSwitch srcSw, short srcPort, int srcPortState,
-            IOFSwitch dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type);
+    public void addedLink(long srcSw, short srcPort, int srcPortState,
+            long dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type);
     
     /**
      * @param srcSw the source switch
@@ -43,8 +36,8 @@ public interface ILinkDiscoveryListener {
      * @param dstPort
      * @param dstPortState
      */
-    public void updatedLink(IOFSwitch srcSw, short srcPort, int srcPortState,
-            IOFSwitch dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type);
+    public void updatedLink(long srcSw, short srcPort, int srcPortState,
+            long dstSw, short dstPort, int dstPortState, ILinkDiscovery.LinkType type);
 
     /**
      * @param srcSw
@@ -52,11 +45,11 @@ public interface ILinkDiscoveryListener {
      * @param dstSw
      * @param dstPort
      */
-    public void removedLink(IOFSwitch srcSw, short srcPort,
-            IOFSwitch dstSw, short dstPort);
+    public void removedLink(long srcSw, short srcPort,
+            long dstSw, short dstPort);
     
     /**
      * @param sw The IOFSwitch that has been updated
      */
-    public void updatedSwitch(IOFSwitch sw);
+    public void updatedSwitch(long sw);
 }
diff --git a/src/main/java/net/floodlightcontroller/topology/internal/TopologyImpl.java b/src/main/java/net/floodlightcontroller/topology/internal/TopologyImpl.java
index 47e5e5ba15b9ce6c0a411e658da38760a32b788a..be2353cb41536a30dfce43830f9b52e6536391d8 100644
--- a/src/main/java/net/floodlightcontroller/topology/internal/TopologyImpl.java
+++ b/src/main/java/net/floodlightcontroller/topology/internal/TopologyImpl.java
@@ -220,17 +220,17 @@ public class TopologyImpl
     }
 
     protected class Update {
-        public IOFSwitch src;
+        public long src;
         public short srcPort;
         public int srcPortState;
-        public IOFSwitch dst;
+        public long dst;
         public short dstPort;
         public int dstPortState;
         public ILinkDiscovery.LinkType type;
         public UpdateOperation operation;
 
-        public Update(IOFSwitch src, short srcPort, int srcPortState,
-                      IOFSwitch dst, short dstPort, int dstPortState,
+        public Update(long src, short srcPort, int srcPortState,
+                      long dst, short dstPort, int dstPortState,
                       ILinkDiscovery.LinkType type,
                       UpdateOperation operation) {
             this.src = src;
@@ -244,15 +244,15 @@ public class TopologyImpl
 
         public Update(LinkTuple lt, int srcPortState,
                       int dstPortState, ILinkDiscovery.LinkType type, UpdateOperation operation) {
-            this(lt.getSrc().getSw(), lt.getSrc().getPort(),
-                 srcPortState, lt.getDst().getSw(), lt.getDst().getPort(),
+            this(lt.getSrc().getSw().getId(), lt.getSrc().getPort(),
+                 srcPortState, lt.getDst().getSw().getId(), lt.getDst().getPort(),
                  dstPortState, type, operation);
         }
 
         // For updtedSwitch(sw)
         public Update(IOFSwitch sw) {
             this.operation = UpdateOperation.SWITCH_UPDATED;
-            this.src = sw;
+            this.src = sw.getId();
         }
 
         // Should only be used for CLUSTER_MERGED operations