diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java b/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
index 5f844f5..2dd458b 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
@@ -113,7 +113,7 @@
 
     // Temporary storage for switch-features and port-description
     private OFFeaturesReply featuresReply;
-    private OFPortDescStatsReply portDescReply;
+    private List<OFPortDescStatsReply> portDescReplies;
     // a concurrent ArrayList to temporarily store port status messages
     // before we are ready to deal with them
     private final CopyOnWriteArrayList<OFPortStatus> pendingPortStatusMsg;
@@ -723,12 +723,28 @@
                             h.channel.getRemoteAddress());
                     return;
                 }
-                if (m.getFlags().contains(OFStatsReplyFlags.REPLY_MORE)) {
+                if (h.portDescReplies == null) {
+                    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 "
+                                + "port description - not currently handled",
+                                h.getSwitchInfoString());
+                        return;
+                    }
+
+                }
+                else if (m.getFlags().contains(OFStatsReplyFlags.REPLY_MORE)) {
                     log.warn("Stats reply indicates more stats from sw {} for "
                             + "port description - not currently handled",
                             h.getSwitchInfoString());
+                    h.portDescReplies.add((OFPortDescStatsReply)m);
+                    return;
                 }
-                h.portDescReply = (OFPortDescStatsReply) m; // temp store
+                else {
+                    h.portDescReplies.add((OFPortDescStatsReply)m);
+                }
+                //h.portDescReply = (OFPortDescStatsReply) m; // temp store
                 log.info("Received port desc reply for switch at {}",
                         h.getSwitchInfoString());
                 try {
@@ -863,7 +879,7 @@
                 // set switch information
                 h.sw.setOFVersion(h.ofVersion);
                 ((OFSwitchImplBase) h.sw).setFeaturesReply(h.featuresReply);
-                ((OFSwitchImplBase) h.sw).setPortDescReply(h.portDescReply);
+                ((OFSwitchImplBase) h.sw).setPortDescReplies(h.portDescReplies);
                 h.sw.setConnected(true);
                 h.sw.setChannel(h.channel);
                 h.sw.setFloodlightProvider(h.controller);
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
index a610c0d..501c020 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
@@ -462,6 +462,23 @@
         portManager.updatePorts(pdrep.getEntries());
     }
 
+    /**
+     * Set the port descriptions for this switch from the handshake for an OF1.3
+     * switch.
+     */
+    protected void setPortDescReplies(List<OFPortDescStatsReply> portDescList) {
+        if (ofversion != OFVersion.OF_13)
+            return;
+        if (portDescList == null) {
+            log.error("Error setting ports description for switch: {}", getStringId());
+            return;
+        }
+
+        for (OFPortDescStatsReply portDesc: portDescList) {
+            portManager.updatePorts(portDesc.getEntries());
+        }
+    }
+
     @Override
     public int getNumBuffers() {
         return buffers;
diff --git a/src/main/java/net/onrc/onos/core/drivermanager/DriverManager.java b/src/main/java/net/onrc/onos/core/drivermanager/DriverManager.java
index 213119f..3b9f297 100644
--- a/src/main/java/net/onrc/onos/core/drivermanager/DriverManager.java
+++ b/src/main/java/net/onrc/onos/core/drivermanager/DriverManager.java
@@ -44,7 +44,7 @@
 
         if (vendor.contains("Dell")
                 &&
-                hw.contains("OpenFlow 1.3")) {
+                hw.contains("OpenFlow switch HW ver. 1.0")) {
             return new OFSwitchImplDellOSR(desc, cpqdUsePipeline13);
         }
 
