diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/AbstractOpenFlowSwitch.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/AbstractOpenFlowSwitch.java
index 61359cd..3a19d14 100644
--- a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/AbstractOpenFlowSwitch.java
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/AbstractOpenFlowSwitch.java
@@ -33,6 +33,7 @@
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.protocol.OFPortDesc;
 import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply;
+import org.projectfloodlight.openflow.protocol.OFPortStatus;
 import org.projectfloodlight.openflow.protocol.OFRoleReply;
 import org.projectfloodlight.openflow.protocol.OFVersion;
 import org.slf4j.Logger;
@@ -166,7 +167,7 @@
      */
     @Override
     public final void handleMessage(OFMessage m) {
-        if (this.role == RoleState.MASTER) {
+        if (this.role == RoleState.MASTER || m instanceof OFPortStatus) {
             this.agent.processMessage(dpid, m);
         }
     }
diff --git a/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/OFChannelHandler.java b/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/OFChannelHandler.java
index ca5f4f5..a9c1969 100644
--- a/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/OFChannelHandler.java
+++ b/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/OFChannelHandler.java
@@ -265,7 +265,7 @@
             @Override
             void processOFPortStatus(OFChannelHandler h, OFPortStatus m)
                     throws IOException {
-                unhandledMessageReceived(h, m);
+                h.pendingPortStatusMsg.add(m);
             }
         },
 
@@ -313,7 +313,7 @@
             @Override
             void processOFPortStatus(OFChannelHandler h, OFPortStatus m)
                     throws IOException, SwitchStateException {
-                unhandledMessageReceived(h, m);
+                h.pendingPortStatusMsg.add(m);
 
             }
         },
@@ -438,6 +438,7 @@
                     if (!h.sw.connectSwitch()) {
                         disconnectDuplicate(h);
                     }
+                    handlePendingPortStatusMessages(h);
                     h.setState(ACTIVE);
                 } else {
                     h.setState(WAIT_SWITCH_DRIVER_SUB_HANDSHAKE);
@@ -528,6 +529,7 @@
 
             private void moveToActive(OFChannelHandler h) {
                 boolean success = h.sw.connectSwitch();
+                handlePendingPortStatusMessages(h);
                 h.setState(ACTIVE);
                 if (!success) {
                     disconnectDuplicate(h);
@@ -602,7 +604,7 @@
             void processOFPortStatus(OFChannelHandler h, OFPortStatus m)
                     throws SwitchStateException {
                 handlePortStatusMessage(h, m, true);
-                h.dispatchMessage(m);
+                //h.dispatchMessage(m);
             }
 
             @Override
@@ -765,15 +767,18 @@
                         "happen";
                 throw new SwitchStateException(msg);
             }
+            log.info("Processing {} pending port status messages for {}",
+                     h.pendingPortStatusMsg.size(), h.sw.getStringId());
+
             ArrayList<OFPortStatus> temp  = new ArrayList<OFPortStatus>();
             for (OFPortStatus ps: h.pendingPortStatusMsg) {
                 temp.add(ps);
                 handlePortStatusMessage(h, ps, false);
             }
-            temp.clear();
             // expensive but ok - we don't expect too many port-status messages
             // note that we cannot use clear(), because of the reasons below
             h.pendingPortStatusMsg.removeAll(temp);
+            temp.clear();
             // the iterator above takes a snapshot of the list - so while we were
             // dealing with the pending port-status messages, we could have received
             // newer ones. Handle them recursively, but break the recursion after
