diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index c4f502236253db5c3463ab6ae66be4f66dd26b9e..5f9cbd81d9153ef73ecc302094e10a7f2e513a10 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -1446,6 +1446,7 @@ public class Controller implements IFloodlightProviderService,
 
     @Override
     public Map<Long, IOFSwitch> getSwitches() {
+        if (activeSwitches == null) return null;
         return Collections.unmodifiableMap(this.activeSwitches);
     }
 
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java
index f172f63be26459ce241e0c4400a3e63885b5bed4..17ad46a7a067c827605d64df3a4acb9443349233 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java
@@ -13,13 +13,15 @@ public interface ILinkDiscovery {
         SWITCH_UPDATED("Switch Updated"),
         SWITCH_REMOVED("Switch Removed"),
         PORT_UP("Port Up"),
-        PORT_DOWN("Port Down");
-        
+        PORT_DOWN("Port Down"),
+        TUNNEL_PORT_ADDED("Tunnel Port Added"),
+        TUNNEL_PORT_REMOVED("Tunnel Port Removed");
+
         private String value;
         UpdateOperation(String v) {
             value = v;
         }
-        
+
         @Override
         public String toString() {
             return value;
@@ -64,7 +66,7 @@ public interface ILinkDiscovery {
             this.srcType = stype;
         }
 
-        // For port up or port down.
+        // For port up or port down; and tunnel port added and removed.
         public LDUpdate(long sw, short port, UpdateOperation operation) {
             this.src = sw;
             this.srcPort = port;
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index 9d7e6e1f8744c9e351f200ea339f35890cf6037f..24dd4442584015900fa3adfc991f42851fcd52f8 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -188,7 +188,7 @@ public class LinkDiscoveryManager implements IOFMessageListener,
      * to false -- Initialized in the init method as well.
      */
     public final boolean AUTOPORTFAST_DEFAULT = false;
-    boolean autoPortFastFeature = AUTOPORTFAST_DEFAULT;
+    protected boolean autoPortFastFeature = AUTOPORTFAST_DEFAULT;
 
     /**
      * Map from link to the most recent time it was verified functioning
@@ -349,7 +349,7 @@ public class LinkDiscoveryManager implements IOFMessageListener,
         } while (updates.peek() != null);
     }
 
-    private boolean isLinkDiscoverySuppressed(long sw, short portNumber) {
+    protected boolean isLinkDiscoverySuppressed(long sw, short portNumber) {
         return this.suppressLinkDiscovery.contains(new NodePortTuple(sw,
                                                                      portNumber));
     }
diff --git a/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java b/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java
index 8b498af5c5d11f7b9edc6ab2b816cde076a1ff76..cd0cd36925bea52c881ab497b7f35a93a39b5168 100644
--- a/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java
+++ b/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java
@@ -336,60 +336,6 @@ public abstract class ForwardingBase
                     "packet out to a switch",
             recommendation=LogMessageDoc.CHECK_SWITCH)            
     })
-    public void pushPacket(IPacket packet, 
-                           IOFSwitch sw,
-                           int bufferId,
-                           short inPort,
-                           short outPort, 
-                           FloodlightContext cntx,
-                           boolean flush) {
-        
-        
-        if (log.isTraceEnabled()) {
-            log.trace("PacketOut srcSwitch={} inPort={} outPort={}", 
-                      new Object[] {sw, inPort, outPort});
-        }
-
-        OFPacketOut po =
-                (OFPacketOut) floodlightProvider.getOFMessageFactory()
-                                                .getMessage(OFType.PACKET_OUT);
-
-        // set actions
-        List<OFAction> actions = new ArrayList<OFAction>();
-        actions.add(new OFActionOutput(outPort, (short) 0xffff));
-
-        po.setActions(actions)
-          .setActionsLength((short) OFActionOutput.MINIMUM_LENGTH);
-        short poLength =
-                (short) (po.getActionsLength() + OFPacketOut.MINIMUM_LENGTH);
-
-        // set buffer_id, in_port
-        po.setBufferId(bufferId);
-        po.setInPort(inPort);
-
-        // set data - only if buffer_id == -1
-        if (po.getBufferId() == OFPacketOut.BUFFER_ID_NONE) {
-            if (packet == null) {
-                log.error("BufferId is not set and packet data is null. " +
-                          "Cannot send packetOut. " +
-                        "srcSwitch={} inPort={} outPort={}",
-                        new Object[] {sw, inPort, outPort});
-                return;
-            }
-            byte[] packetData = packet.serialize();
-            poLength += packetData.length;
-            po.setPacketData(packetData);
-        }
-
-        po.setLength(poLength);
-
-        try {
-            counterStore.updatePktOutFMCounterStoreLocal(sw, po);
-            messageDamper.write(sw, po, cntx, flush);
-        } catch (IOException e) {
-            log.error("Failure writing packet out", e);
-        }
-    }
 
     /**
      * Pushes a packet-out to a switch.  The assumption here is that
diff --git a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
index 81a497cde444f0cab42a934a9c62eb61ed702291..5eacd5895d2c194062d26a0de3fbb7d247153de5 100644
--- a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
+++ b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
@@ -89,7 +89,7 @@ public class TopologyManager implements
     /**
      * set of tunnel links
      */
-    protected Map<NodePortTuple, Set<Link>> tunnelLinks; 
+    protected Set<NodePortTuple> tunnelPorts;
 
     protected ILinkDiscoveryService linkDiscovery;
     protected IThreadPoolService threadPool;
@@ -492,10 +492,9 @@ public class TopologyManager implements
 
     @Override
     public Set<NodePortTuple> getTunnelPorts() {
-        return tunnelLinks.keySet();
+        return tunnelPorts;
     }
 
-    @Override
     public Set<NodePortTuple> getBlockedPorts() {
         Set<NodePortTuple> bp;
         Set<NodePortTuple> blockedPorts =
@@ -679,7 +678,7 @@ public class TopologyManager implements
         switchPortLinks = new HashMap<NodePortTuple, Set<Link>>();
         directLinks = new HashMap<NodePortTuple, Set<Link>>();
         portBroadcastDomainLinks = new HashMap<NodePortTuple, Set<Link>>();
-        tunnelLinks = new HashMap<NodePortTuple, Set<Link>>();
+        tunnelPorts = new HashSet<NodePortTuple>();
         topologyAware = new ArrayList<ITopologyListener>();
         ldUpdates = new LinkedBlockingQueue<LDUpdate>();
         appliedUpdates = new ArrayList<LDUpdate>();
@@ -800,6 +799,27 @@ public class TopologyManager implements
         }
     }
 
+    /**
+     * Get the set of ports to eliminate for sending out BDDP.  The method
+     * returns all the ports that are suppressed for link discovery on the
+     * switch.
+     * packets.
+     * @param sid
+     * @return
+     */
+    protected Set<Short> getPortsToEliminateForBDDP(long sid) {
+        Set<NodePortTuple> suppressedNptList = linkDiscovery.getSuppressLLDPsInfo();
+        if (suppressedNptList == null) return null;
+
+        Set<Short> resultPorts = new HashSet<Short>();
+        for(NodePortTuple npt: suppressedNptList) {
+            if (npt.getNodeId() == sid) {
+                resultPorts.add(npt.getPortId());
+            }
+        }
+
+        return resultPorts;
+    }
 
     /**
      * The BDDP packets are forwarded out of all the ports out of an
@@ -848,6 +868,11 @@ public class TopologyManager implements
                 }
             }
 
+            Set<Short> portsToEliminate = getPortsToEliminateForBDDP(sid);
+            if (portsToEliminate != null) {
+                ports.removeAll(portsToEliminate);
+            }
+
             // remove the incoming switch port
             if (pinSwitch == sid) {
                 ports.remove(pi.getInPort());
@@ -914,12 +939,26 @@ public class TopologyManager implements
             } else if (update.getOperation() == UpdateOperation.LINK_REMOVED){
                 removeLink(update.getSrc(), update.getSrcPort(), 
                            update.getDst(), update.getDstPort());
+            } else if (update.getOperation() == UpdateOperation.TUNNEL_PORT_ADDED) {
+                addTunnelPort(update.getSrc(), update.getSrcPort());
+            } else if (update.getOperation() == UpdateOperation.TUNNEL_PORT_REMOVED) {
+                removeTunnelPort(update.getSrc(), update.getSrcPort());
             }
             // Add to the list of applied updates.
             appliedUpdates.add(update);
         }
     }
 
+    public void addTunnelPort(long sw, short port) {
+        NodePortTuple npt = new NodePortTuple(sw, port);
+        tunnelPorts.add(npt);
+    }
+
+    public void removeTunnelPort(long sw, short port) {
+        NodePortTuple npt = new NodePortTuple(sw, port);
+        tunnelPorts.remove(npt);
+    }
+
     /**
      * This function computes a new topology.
      */
@@ -962,7 +1001,7 @@ public class TopologyManager implements
         }
 
         // Remove all tunnel links.
-        for(NodePortTuple npt: tunnelLinks.keySet()) {
+        for(NodePortTuple npt: tunnelPorts) {
             if (switchPortLinks.get(npt) == null) continue;
             for(Link link: switchPortLinks.get(npt)) {
                 removeLinkFromStructure(openflowLinks, link);
@@ -973,7 +1012,7 @@ public class TopologyManager implements
                                                    blockedPorts,
                                                    openflowLinks, 
                                                    broadcastDomainPorts,
-                                                   tunnelLinks.keySet());
+                                                   tunnelPorts);
         nt.compute();
         // We set the instances with and without tunnels to be identical.
         // If needed, we may compute them differently.
@@ -1146,8 +1185,6 @@ public class TopologyManager implements
 
     public void addOrUpdateLink(long srcId, short srcPort, long dstId, 
                                 short dstPort, LinkType type) {
-        boolean flag1 = false, flag2 = false;
-
         Link link = new Link(srcId, srcPort, dstId, dstPort);
         addPortToSwitch(srcId, srcPort);
         addPortToSwitch(dstId, dstPort);
@@ -1156,17 +1193,9 @@ public class TopologyManager implements
 
         if (type.equals(LinkType.MULTIHOP_LINK)) {
             addLinkToStructure(portBroadcastDomainLinks, link);
-            flag1 = removeLinkFromStructure(tunnelLinks, link);
-            flag2 = removeLinkFromStructure(directLinks, link);
-            dtLinksUpdated = flag1 || flag2;
-        } else if (type.equals(LinkType.TUNNEL)) {
-            addLinkToStructure(tunnelLinks, link);
-            removeLinkFromStructure(portBroadcastDomainLinks, link);
-            removeLinkFromStructure(directLinks, link);
-            dtLinksUpdated = true;
+            dtLinksUpdated = removeLinkFromStructure(directLinks, link);
         } else if (type.equals(LinkType.DIRECT_LINK)) {
             addLinkToStructure(directLinks, link);
-            removeLinkFromStructure(tunnelLinks, link);
             removeLinkFromStructure(portBroadcastDomainLinks, link);
             dtLinksUpdated = true;
         }
@@ -1174,14 +1203,8 @@ public class TopologyManager implements
     }
 
     public void removeLink(Link link)  {
-        boolean flag1 = false, flag2 = false;
-
-        flag1 = removeLinkFromStructure(directLinks, link);
-        flag2 = removeLinkFromStructure(tunnelLinks, link);
-
         linksUpdated = true;
-        dtLinksUpdated = flag1 || flag2;
-
+        dtLinksUpdated = removeLinkFromStructure(directLinks, link);
         removeLinkFromStructure(portBroadcastDomainLinks, link);
         removeLinkFromStructure(switchPortLinks, link);
 
@@ -1219,9 +1242,9 @@ public class TopologyManager implements
 
     public void clear() {
         switchPorts.clear();
+        tunnelPorts.clear();
         switchPortLinks.clear();
         portBroadcastDomainLinks.clear();
-        tunnelLinks.clear();
         directLinks.clear();
         appliedUpdates.clear();
     }
diff --git a/src/test/java/net/floodlightcontroller/topology/TopologyInstanceTest.java b/src/test/java/net/floodlightcontroller/topology/TopologyInstanceTest.java
index aaeea904f0b9fff519e9a60fd7920c0400d528a9..59f3090457561b8e51eea89ce0006801eed43e73 100644
--- a/src/test/java/net/floodlightcontroller/topology/TopologyInstanceTest.java
+++ b/src/test/java/net/floodlightcontroller/topology/TopologyInstanceTest.java
@@ -108,6 +108,7 @@ public class TopologyInstanceTest {
             }
             TopologyInstance ti = topologyManager.getCurrentInstance(tunnelsEnabled);
             Set<NodePortTuple> computed = ti.getBroadcastNodePortsInCluster(npt.nodeId);
+            log.info("computed: {}", computed);
             if (computed != null)
                 assertTrue(computed.equals(expected));
             else if (computed == null)
@@ -295,120 +296,6 @@ public class TopologyInstanceTest {
         verifyExpectedBroadcastPortsInClusters(expectedBroadcastPorts);
     }
 
-    @Test
-    public void testTunnelLinkDeletion() throws Exception {
-
-        //      +-------+             +-------+
-        //      |       |             |       |
-        //      |   1  1|-------------|1  2   |
-        //      |   2   |             |   2   |
-        //      +-------+             +-------+
-        //          |                     |
-        //          |                     |
-        //      +-------+                 |
-        //      |   1   |                 |
-        //      |   3  2|-----------------+
-        //      |   3   |
-        //      +-------+
-        //
-        //
-        //      +-------+
-        //      |   1   |
-        //      |   4  2|----------------+
-        //      |   3   |                |
-        //      +-------+                |
-        //          |                    |
-        //          |                    |
-        //      +-------+             +-------+
-        //      |   1   |             |   2   |
-        //      |   5  2|-------------|1  6   |
-        //      |       |             |       |
-        //      +-------+             +-------+
-        {
-            int [][] linkArray = {
-                                  {1, 1, 2, 1, DIRECT_LINK},
-                                  {2, 1, 1, 1, DIRECT_LINK},
-                                  {1, 2, 3, 1, TUNNEL_LINK},
-                                  {3, 1, 1, 2, TUNNEL_LINK},
-                                  {2, 2, 3, 2, TUNNEL_LINK},
-                                  {3, 2, 2, 2, TUNNEL_LINK},
-
-                                  {4, 2, 6, 2, DIRECT_LINK},
-                                  {6, 2, 4, 2, DIRECT_LINK},
-                                  {4, 3, 5, 1, TUNNEL_LINK},
-                                  {5, 1, 4, 3, TUNNEL_LINK},
-                                  {5, 2, 6, 1, TUNNEL_LINK},
-                                  {6, 1, 5, 2, TUNNEL_LINK},
-
-            };
-
-            int [][] expectedClusters = {
-                                         {1, 2},
-                                         {4, 6},
-            };
-            int [][][] expectedBroadcastPorts = {
-                                                 {{1,1}, {2,1}},
-                                                 {{4,2}, {6,2}}
-            };
-
-            createTopologyFromLinks(linkArray);
-            topologyManager.createNewInstance();
-            verifyClusters(expectedClusters, false);
-            verifyExpectedBroadcastPortsInClusters(expectedBroadcastPorts, false);
-        }
-
-        //      +-------+             +-------+
-        //      |       |    TUNNEL   |       |
-        //      |   1  1|-------------|1  2   |
-        //      |   2   |             |   2   |
-        //      +-------+             +-------+
-        //          |                     |
-        //          |                     |
-        //      +-------+                 |
-        //      |   1   |                 |
-        //      |   3  2|-----------------+
-        //      |   3   |
-        //      +-------+
-        //          | 
-        //          |   TUNNEL
-        //          |
-        //      +-------+
-        //      |   1   |    TUNNEL
-        //      |   4  2|----------------+
-        //      |   3   |                |
-        //      +-------+                |
-        //          |                    |
-        //          |                    |
-        //      +-------+             +-------+
-        //      |   1   |             |   2   |
-        //      |   5  2|-------------|1  6   |
-        //      |       |             |       |
-        //      +-------+             +-------+
-
-        {
-            int [][] linkArray = {
-                                  {3, 3, 4, 1, TUNNEL_LINK},
-                                  {4, 1, 3, 3, TUNNEL_LINK},
-
-            };
-            int [][] expectedClusters = {
-                                         {1, 2},
-                                         {4, 6},
-                                         {3},
-                                         {5},
-            };
-            int [][][] expectedBroadcastPorts = {
-                                                 {{1,1}, {2,1}},
-                                                 {{4,2}, {6,2}}
-            };
-
-            createTopologyFromLinks(linkArray);
-            topologyManager.createNewInstance();
-            verifyClusters(expectedClusters, false);
-            verifyExpectedBroadcastPortsInClusters(expectedBroadcastPorts, false);
-        }
-    }
-
     @Test
     public void testLoopDetectionWithIslands() throws Exception {
 
@@ -440,15 +327,15 @@ public class TopologyInstanceTest {
         //      +-------+             +-------+
         {
             int [][] linkArray = {
-                                  {1, 1, 2, 1, TUNNEL_LINK},
-                                  {2, 1, 1, 1, TUNNEL_LINK},
+                                  {1, 1, 2, 1, DIRECT_LINK},
+                                  {2, 1, 1, 1, DIRECT_LINK},
                                   {1, 2, 3, 1, DIRECT_LINK},
                                   {3, 1, 1, 2, DIRECT_LINK},
                                   {2, 2, 3, 2, DIRECT_LINK},
                                   {3, 2, 2, 2, DIRECT_LINK},
 
-                                  {4, 2, 6, 2, TUNNEL_LINK},
-                                  {6, 2, 4, 2, TUNNEL_LINK},
+                                  {4, 2, 6, 2, DIRECT_LINK},
+                                  {6, 2, 4, 2, DIRECT_LINK},
                                   {4, 3, 5, 1, DIRECT_LINK},
                                   {5, 1, 4, 3, DIRECT_LINK},
                                   {5, 2, 6, 1, DIRECT_LINK},
@@ -461,8 +348,8 @@ public class TopologyInstanceTest {
                                          {4, 5, 6}
             };
             int [][][] expectedBroadcastPorts = {
-                                                 {{1,2}, {3,1}, {2,2}, {3,2}},
-                                                 {{4,3}, {5,1}, {5,2}, {6,1}},
+                                                 {{1,1}, {2,1}, {1,2}, {3,1}},
+                                                 {{4,3}, {5,1}, {4,2}, {6,2}},
             };
 
             createTopologyFromLinks(linkArray);
@@ -501,17 +388,17 @@ public class TopologyInstanceTest {
 
         {
             int [][] linkArray = {
-                                  {3, 3, 4, 1, TUNNEL_LINK},
-                                  {4, 1, 3, 3, TUNNEL_LINK},
+                                  {3, 3, 4, 1, DIRECT_LINK},
+                                  {4, 1, 3, 3, DIRECT_LINK},
 
             };
             int [][] expectedClusters = {
-                                         {1, 2, 3}, 
-                                         {4, 5, 6}
+                                         {1, 2, 3, 4, 5, 6}
             };
             int [][][] expectedBroadcastPorts = {
-                                                 {{1,2}, {3,1}, {2,2}, {3,2}},
-                                                 {{4,3}, {5,1}, {5,2}, {6,1}},
+                                                 {{1,1}, {2,1}, {1,2}, {3,1},
+                                                  {3,3}, {4,1}, {4,3}, {5,1},
+                                                  {4,2}, {6,2}},
             };
 
             createTopologyFromLinks(linkArray);
diff --git a/src/test/java/net/floodlightcontroller/topology/TopologyManagerTest.java b/src/test/java/net/floodlightcontroller/topology/TopologyManagerTest.java
index 113cecbaea0492d36831d1221ad9c1e904c59891..913bf83a96fa0c6a8613572624da2a8ec1a55fec 100644
--- a/src/test/java/net/floodlightcontroller/topology/TopologyManagerTest.java
+++ b/src/test/java/net/floodlightcontroller/topology/TopologyManagerTest.java
@@ -50,78 +50,54 @@ public class TopologyManagerTest extends FloodlightTestCase {
         assertTrue(tm.getPortBroadcastDomainLinks().size()==2);
         assertTrue(tm.getTunnelPorts().size()==0);
 
-        tm.addOrUpdateLink((long)1, (short)3, (long)2, (short)3, ILinkDiscovery.LinkType.TUNNEL);
-        assertTrue(tm.getSwitchPorts().size() == 2);  // for two nodes.
-        assertTrue(tm.getSwitchPorts().get((long)1).size()==3);
-        assertTrue(tm.getSwitchPorts().get((long)2).size()==3);
-        assertTrue(tm.getSwitchPortLinks().size()==6);
-        assertTrue(tm.getPortBroadcastDomainLinks().size()==2);
-        assertTrue(tm.getTunnelPorts().size()==2);
-
         tm.removeLink((long)1, (short)2, (long)2, (short)2);
-        log.info("# of switchports. {}", tm.getSwitchPorts().get((long)1).size());
-        assertTrue(tm.getSwitchPorts().get((long)1).size()==2);
-        assertTrue(tm.getSwitchPorts().get((long)2).size()==2);
-        assertTrue(tm.getSwitchPorts().size() == 2);  // for two nodes.
-        assertTrue(tm.getSwitchPortLinks().size()==4);
-        assertTrue(tm.getPortBroadcastDomainLinks().size()==0);
-        assertTrue(tm.getTunnelPorts().size()==2);
-
-        tm.removeLink((long)1, (short)1, (long)2, (short)1);
-        assertTrue(tm.getSwitchPorts().size() == 2);  // for two nodes.
         assertTrue(tm.getSwitchPorts().get((long)1).size()==1);
         assertTrue(tm.getSwitchPorts().get((long)2).size()==1);
+        assertTrue(tm.getSwitchPorts().size() == 2);
         assertTrue(tm.getSwitchPortLinks().size()==2);
         assertTrue(tm.getPortBroadcastDomainLinks().size()==0);
-        assertTrue(tm.getTunnelPorts().size()==2);
 
-        tm.removeLink((long)1, (short)3, (long)2, (short)3);
+        tm.removeLink((long)1, (short)1, (long)2, (short)1);
         assertTrue(tm.getSwitchPorts().size() == 0); 
         assertTrue(tm.getSwitchPortLinks().size()==0);
         assertTrue(tm.getPortBroadcastDomainLinks().size()==0);
-        assertTrue(tm.getTunnelPorts().size()==0);
     }
 
     @Test
     public void testBasic2() throws Exception {
         tm.addOrUpdateLink((long)1, (short)1, (long)2, (short)1, ILinkDiscovery.LinkType.DIRECT_LINK);
         tm.addOrUpdateLink((long)2, (short)2, (long)3, (short)1, ILinkDiscovery.LinkType.MULTIHOP_LINK);
-        tm.addOrUpdateLink((long)3, (short)2, (long)1, (short)2, ILinkDiscovery.LinkType.TUNNEL);
         assertTrue(tm.getSwitchPorts().size() == 3);  // for two nodes.
-        assertTrue(tm.getSwitchPorts().get((long)1).size()==2);
+        assertTrue(tm.getSwitchPorts().get((long)1).size()==1);
         assertTrue(tm.getSwitchPorts().get((long)2).size()==2);
-        assertTrue(tm.getSwitchPorts().get((long)3).size()==2);
-        assertTrue(tm.getSwitchPortLinks().size()==6);
+        assertTrue(tm.getSwitchPorts().get((long)3).size()==1);
+        assertTrue(tm.getSwitchPortLinks().size()==4);
         assertTrue(tm.getPortBroadcastDomainLinks().size()==2);
-        assertTrue(tm.getTunnelPorts().size()==2);
 
         tm.removeLink((long)1, (short)1, (long)2, (short)1);
-        assertTrue(tm.getSwitchPorts().size() == 3);  // for two nodes.
-        assertTrue(tm.getSwitchPorts().get((long)1).size()==1);
+        assertTrue(tm.getSwitchPorts().size() == 2);
+        assertTrue(tm.getSwitchPorts().get((long)1) == null);
         assertTrue(tm.getSwitchPorts().get((long)2).size()==1);
-        assertTrue(tm.getSwitchPorts().get((long)3).size()==2);
-        assertTrue(tm.getSwitchPortLinks().size()==4);
+        assertTrue(tm.getSwitchPorts().get((long)3).size()==1);
+        assertTrue(tm.getSwitchPortLinks().size()==2);
         assertTrue(tm.getPortBroadcastDomainLinks().size()==2);
-        assertTrue(tm.getTunnelPorts().size()==2);
 
         // nonexistent link // no null pointer exceptions.
         tm.removeLink((long)3, (short)1, (long)2, (short)2);
-        assertTrue(tm.getSwitchPorts().size() == 3);  // for two nodes.
-        assertTrue(tm.getSwitchPorts().get((long)1).size()==1);
+        assertTrue(tm.getSwitchPorts().size() == 2);
+        assertTrue(tm.getSwitchPorts().get((long)1) == null);
         assertTrue(tm.getSwitchPorts().get((long)2).size()==1);
-        assertTrue(tm.getSwitchPorts().get((long)3).size()==2);
-        assertTrue(tm.getSwitchPortLinks().size()==4);
+        assertTrue(tm.getSwitchPorts().get((long)3).size()==1);
+        assertTrue(tm.getSwitchPortLinks().size()==2);
         assertTrue(tm.getPortBroadcastDomainLinks().size()==2);
-        assertTrue(tm.getTunnelPorts().size()==2);
 
         tm.removeLink((long)3, (short)2, (long)1, (short)2);
-        assertTrue(tm.getSwitchPorts().size() == 2);  // for two nodes.
+        assertTrue(tm.getSwitchPorts().size() == 2);
         assertTrue(tm.getSwitchPorts().get((long)1)==null);
         assertTrue(tm.getSwitchPorts().get((long)2).size()==1);
         assertTrue(tm.getSwitchPorts().get((long)3).size()==1);
         assertTrue(tm.getSwitchPortLinks().size()==2);
         assertTrue(tm.getPortBroadcastDomainLinks().size()==2);
-        assertTrue(tm.getTunnelPorts().size()==0);
 
         tm.removeLink((long)2, (short)2, (long)3, (short)1);
         assertTrue(tm.getSwitchPorts().size() == 0);  // for two nodes.
@@ -137,6 +113,6 @@ public class TopologyManagerTest extends FloodlightTestCase {
         assert(tm.switchPorts.isEmpty());
         assert(tm.switchPortLinks.isEmpty());
         assert(tm.portBroadcastDomainLinks.isEmpty());
-        assert(tm.tunnelLinks.isEmpty());
+        assert(tm.tunnelPorts.isEmpty());
     }
 }