diff --git a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java
index ad84268..968fb6f 100644
--- a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java
+++ b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java
@@ -4,7 +4,9 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -133,6 +135,7 @@
     private SegmentRouterConfig srConfig;
     private ConcurrentMap<Dpid, Set<PortNumber>> neighbors;
     private ConcurrentMap<NeighborSet, EcmpInfo> ecmpGroups;
+    private HashMap<PortNumber, ArrayList<NeighborSet>> portNeighborSetMap;
 
 
 
@@ -204,6 +207,37 @@
         return driverState.toString();
     }
 
+    public void removePortFromGroups(PortNumber port) {
+        ArrayList<NeighborSet> portNSSet = portNeighborSetMap.get(port);
+        for (NeighborSet ns : portNSSet) {
+            /* Delete the first matched bucket */
+            Iterator<BucketInfo> it = ecmpGroups.get(ns).buckets.iterator();
+            while (it.hasNext()) {
+                BucketInfo bucket = it.next();
+                if (bucket.outport.equals(port)) {
+                    it.remove();
+                    /* Assuming port appears under only one bucket for
+                     * a neighbor set
+                     */
+                    break;
+                }
+            }
+        }
+        /* Delete entry from portNeighborSetMap */
+        portNeighborSetMap.remove(port);
+        /* TODO: Update switches using GroupMod */
+    }
+
+    public void addPortToGroups(PortNumber port) {
+        ArrayList<NeighborSet> portNSSet = portNeighborSetMap.get(port);
+        if (portNSSet != null) {
+            /* Port is already part of ECMP groups */
+            return;
+        }
+        /* TODO: Not yet finished */
+        return;
+    }
+
     // *****************************
     // Driver handshake state-machine
     // *****************************
@@ -669,6 +703,21 @@
                     buckets.add(b);
                 }
             }
+
+            for (Dpid d : combo) {
+                for (PortNumber sp : neighbors.get(d)) {
+                    ArrayList<NeighborSet> portNeighborSets =
+                            portNeighborSetMap.get(sp);
+                    if (portNeighborSets == null) {
+                        portNeighborSets = new ArrayList<NeighborSet>();
+                        portNeighborSets.add(ns);
+                        portNeighborSetMap.put(sp, portNeighborSets);
+                    }
+                    else
+                        portNeighborSets.add(ns);
+                }
+            }
+
             EcmpInfo ecmpInfo = new EcmpInfo(groupid++, buckets);
             setEcmpGroup(ecmpInfo);
             ecmpGroups.put(ns, ecmpInfo);
