diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java b/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
index 2dd458b..9a8f21b 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
@@ -145,6 +145,7 @@
         this.roleChanger = new RoleChanger(DEFAULT_ROLE_TIMEOUT_MS);
         this.state = ChannelState.INIT;
         this.pendingPortStatusMsg = new CopyOnWriteArrayList<OFPortStatus>();
+        this.portDescReplies = new ArrayList<OFPortDescStatsReply>();
         factory13 = controller.getOFMessageFactory_13();
         factory10 = controller.getOFMessageFactory_10();
         controlRequested = Boolean.FALSE;
@@ -723,8 +724,8 @@
                             h.channel.getRemoteAddress());
                     return;
                 }
-                if (h.portDescReplies == null) {
-                    h.portDescReplies = new ArrayList<OFPortDescStatsReply>();
+                if (h.portDescReplies.isEmpty()) {
+                    //h.portDescReplies = new ArrayList<OFPortDescStatsReply>();
                     h.portDescReplies.add((OFPortDescStatsReply) m);
                     if (m.getFlags().contains(OFStatsReplyFlags.REPLY_MORE)) {
                         log.warn("Stats reply indicates more stats from sw {} for "
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
index 501c020..e93f378 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
@@ -474,6 +474,25 @@
             return;
         }
 
+        /*
+
+        for (OFPortDescStatsReply portDesc: portDescList) {
+            for (OFPortDesc port: portDesc.getEntries()) {
+                boolean up = false;
+                for (OFPortConfig state: port.getConfig()) {
+                    if (state != OFPortConfig.PORT_DOWN) {
+                        up = true;
+                        break;
+                    }
+                }
+
+                if (up) {
+                    portManager.updatePorts(portDesc.getEntries());
+                }
+            }
+        }
+        */
+
         for (OFPortDescStatsReply portDesc: portDescList) {
             portManager.updatePorts(portDesc.getEntries());
         }
@@ -1022,14 +1041,31 @@
                 }
 
                 if (doUpdate) {
-                    portsByName = Collections.unmodifiableMap(newPortsByName);
-                    portsByNumber =
-                            Collections.unmodifiableMap(newPortsByNumber);
-                    enabledPortList =
-                            Collections.unmodifiableList(newEnabledPortList);
-                    enabledPortNumbers =
-                            Collections.unmodifiableList(newEnabledPortNumbers);
-                    portList = Collections.unmodifiableList(newPortsList);
+                    if (enabledPortList.isEmpty() ) {
+                        //portsByName = new HashMap<String, OFPortDesc>(newPortsByName);
+                        portsByName = newPortsByName;
+                        portsByNumber = newPortsByNumber;
+                        enabledPortList = newEnabledPortList;
+                        enabledPortNumbers = newEnabledPortNumbers;
+                        portList = newPortsList;
+                        /*
+                        portsByNumber = Collections
+                                Collections.unmodifiableMap(newPortsByNumber);
+                        enabledPortList =
+                                Collections.unmodifiableList(newEnabledPortList);
+                        enabledPortNumbers =
+                                Collections.unmodifiableList(newEnabledPortNumbers);
+                        portList = Collections.unmodifiableList(newPortsList);
+                        */
+                    }
+                    else {
+                        portsByName.putAll(newPortsByName);
+                        portsByNumber.putAll(newPortsByNumber);
+                        enabledPortList.addAll(newEnabledPortList);
+                        enabledPortNumbers.addAll(newEnabledPortNumbers);
+                        portList.addAll(newPortsList);
+
+                    }
                 }
                 return events;
             } finally {
diff --git a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java
index fe9d8e9..59e369a 100644
--- a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java
+++ b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java
@@ -1087,6 +1087,8 @@
             bldr.setActions(actions);
             if (ecmpInfo.groupType == OFGroupType.SELECT)
                 bldr.setWeight(1);
+            bldr.setWatchGroup(OFGroup.ANY);
+            bldr.setWatchPort(OFPort.ANY);
             OFBucket ofb = bldr.build();
             buckets.add(ofb);
         }
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
index 66e1b88..e8be836 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
@@ -412,6 +412,7 @@
             // FIXME should be merging, with existing attrs, etc..
             // TODO define attr name as constant somewhere.
             // TODO populate appropriate attributes.
+            //portData.
             portData.createStringAttribute("name", port.getName());
             portData.createStringAttribute(TopologyElement.TYPE,
                     TopologyElement.TYPE_PACKET_LAYER);
diff --git a/src/test/java/net/floodlightcontroller/core/internal/OFChannelHandlerTest.java b/src/test/java/net/floodlightcontroller/core/internal/OFChannelHandlerTest.java
index 4d6639b..6c52f15 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/OFChannelHandlerTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/OFChannelHandlerTest.java
@@ -484,6 +484,7 @@
         swImplBase.setFeaturesReply(featuresReply);
         expectLastCall().once();
         swImplBase.setPortDescReply((OFPortDescStatsReply)null );
+        swImplBase.setPortDescReplies((List<OFPortDescStatsReply>)null );
         replay(swImplBase);
 
         // send the description stats reply
