diff --git a/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/DriverManager.java b/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/DriverManager.java
index f7a5f1a..f7c547c 100644
--- a/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/DriverManager.java
+++ b/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/DriverManager.java
@@ -39,10 +39,6 @@
 
     private static final Logger log = LoggerFactory.getLogger(DriverManager.class);
 
-    // Whether to use an OF 1.3 configured TTP, or to use an OF 1.0-style
-    // single table with packet-ins.
-    private static boolean cpqdUsePipeline13 = false;
-
     /**
      * Return an IOFSwitch object based on switch's manufacturer description
      * from OFDescStatsReply.
@@ -59,7 +55,7 @@
         if (vendor.startsWith("Stanford University, Ericsson Research and CPqD Research")
                 &&
                 hw.startsWith("OpenFlow 1.3 Reference Userspace Switch")) {
-            return new OFSwitchImplCPqD13(dpid, desc, cpqdUsePipeline13);
+            return new OFSwitchImplCPqD13(dpid, desc);
         }
 
         if (hw.startsWith("Open vSwitch")) {
@@ -129,18 +125,6 @@
     private DriverManager() {
     }
 
-    /**
-     * Sets the configuration parameter which determines how the CPqD switch
-     * is set up. If usePipeline13 is true, a 1.3 pipeline will be set up on
-     * the switch. Otherwise, the switch will be set up in a 1.0 style with
-     * a single table where missed packets are sent to the controller.
-     *
-     * @param usePipeline13 whether to use a 1.3 pipeline or not
-     */
-    public static void setConfigForCpqd(boolean usePipeline13) {
-        cpqdUsePipeline13 = usePipeline13;
-    }
-
     public static OpenFlowSwitchDriver getSwitch(Dpid dpid,
             OFDescStatsReply desc, OFVersion ofv) {
         return new DriverManager().getOFSwitchImpl(dpid, desc, ofv);
diff --git a/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFSwitchImplCPqD13.java b/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFSwitchImplCPqD13.java
index 276395a..b804cd9 100644
--- a/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFSwitchImplCPqD13.java
+++ b/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFSwitchImplCPqD13.java
@@ -15,6 +15,14 @@
  */
 package org.onosproject.openflow.drivers;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
+
 import org.onosproject.openflow.controller.Dpid;
 import org.onosproject.openflow.controller.RoleState;
 import org.onosproject.openflow.controller.driver.AbstractOpenFlowSwitch;
@@ -57,14 +65,6 @@
 import org.projectfloodlight.openflow.types.U64;
 import org.projectfloodlight.openflow.util.HexString;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
-
 /**
  * OFDescriptionStatistics Vendor (Manufacturer Desc.): Stanford University,
  * Ericsson Research and CPqD Research. Make (Hardware Desc.) : OpenFlow 1.3
@@ -107,15 +107,11 @@
 
     private final Map<Integer, OFGroup> l2groups;
 
-    private final boolean usePipeline13;
-
-    public OFSwitchImplCPqD13(Dpid dpid, OFDescStatsReply desc, boolean usePipeline13) {
+    public OFSwitchImplCPqD13(Dpid dpid, OFDescStatsReply desc) {
         super(dpid);
         driverHandshakeComplete = new AtomicBoolean(false);
         l2groups = new ConcurrentHashMap<Integer, OFGroup>();
         setSwitchDescription(desc);
-
-        this.usePipeline13 = usePipeline13;
     }
 
     /* (non-Javadoc)
@@ -136,12 +132,7 @@
         }
         startDriverHandshakeCalled = true;
         factory = this.factory();
-        if (!usePipeline13) {
-            // Send packet-in to controller if a packet misses the first table
-            populateTableMissEntry(0, true, false, false, 0);
-        } //else {
-        // configureSwitch();
-        //}
+
         sendBarrier(true);
     }
 
diff --git a/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFSwitchImplOVS13.java b/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFSwitchImplOVS13.java
index c7f45db..1b267d3 100644
--- a/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFSwitchImplOVS13.java
+++ b/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFSwitchImplOVS13.java
@@ -15,6 +15,11 @@
  */
 package org.onosproject.openflow.drivers;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
 import org.onosproject.openflow.controller.Dpid;
 import org.onosproject.openflow.controller.driver.AbstractOpenFlowSwitch;
 import org.onosproject.openflow.controller.driver.SwitchDriverSubHandshakeAlreadyStarted;
@@ -32,11 +37,6 @@
 import org.projectfloodlight.openflow.types.OFPort;
 import org.projectfloodlight.openflow.types.TableId;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
 /**
  * OFDescriptionStatistics Vendor (Manufacturer Desc.): Nicira, Inc. Make
  * (Hardware Desc.) : Open vSwitch Model (Datapath Desc.) : None Software :
@@ -132,13 +132,10 @@
         }
     }
 
-
     private void configureSwitch() {
-        populateTableMissEntry(0, true, false, false, 0);
         sendBarrier(true);
     }
 
-
     private void sendBarrier(boolean finalBarrier) {
         int xid = getNextTransactionId();
         if (finalBarrier) {
