diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index 10621e4..8f7bc48 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -388,10 +388,11 @@
             for (Link link: sw.getOutgoingLinks()) {
                 Port dstPort = link.getDstPort();
                 IOF13Switch dstSw = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                        getSwId(dstPort.getDpid().toString()));
+                        dstPort.getDpid().value());
                 if (dstSw != null) {
                     dstSw.removePortFromGroups(dstPort.getNumber());
-                    log.debug("MasterSwitch {} is gone: remove port {}", sw.getDpid(), dstPort);
+                    log.debug("MasterSwitch {} is gone: remove port {}",
+                            sw.getDpid(), dstPort);
                 }
             }
             // Flush the groupId table for adjacencySid;
@@ -423,7 +424,7 @@
             Dpid dpid = port.getDpid();
 
             IOF13Switch sw = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                    getSwId(port.getDpid().toString()));
+                    port.getDpid().value());
             if (sw != null) {
                 sw.addPortToGroups(port.getPortNumber());
                 //log.debug("Add port {} to switch {}", port, dpid);
@@ -468,9 +469,9 @@
             }
 
             IOF13Switch srcSw = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                    getSwId(srcPort.getDpid().toString()));
+                    srcPort.getDpid().value());
             IOF13Switch dstSw = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                    getSwId(dstPort.getDpid().toString()));
+                    dstPort.getDpid().value());
 
             if ((srcSw == null) || (dstSw == null))
                 continue;
@@ -502,9 +503,9 @@
             SwitchPort dstPort = link.getDst();
 
             IOF13Switch srcSw = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                    getSwId(srcPort.getDpid().toString()));
+                    srcPort.getDpid().value());
             IOF13Switch dstSw = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                    getSwId(dstPort.getDpid().toString()));
+                    dstPort.getDpid().value());
             if ((srcSw == null) || (dstSw == null))
                 /* If this link is not between two switches, ignore it */
                 continue;
@@ -550,7 +551,7 @@
             Dpid dpid = port.getDpid();
 
             IOF13Switch sw = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                    getSwId(port.getDpid().toString()));
+                    port.getDpid().value());
             if (sw != null) {
                 sw.removePortFromGroups(port.getPortNumber());
                 log.debug("Remove port {} from switch {}", port, dpid);
@@ -644,10 +645,11 @@
      * @param adjId Adjacency ID
      * @param ports List of ports assigned to the Adjacency ID
      */
-    private void setAdjacencyRuleOfGroup(Switch sw, Integer adjId, List<Integer> ports) {
+    private void setAdjacencyRuleOfGroup(Switch sw, Integer adjId,
+            List<Integer> ports) {
 
         IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                getSwId(sw.getDpid().toString()));
+                sw.getDpid().value());
 
         Integer groupId = -1;
         if (sw13 != null) {
@@ -787,7 +789,7 @@
                 new MatchActionOperationEntry(operator, matchAction);
 
         IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                getSwId(sw.getDpid().toString()));
+                sw.getDpid().value());
 
         if (sw13 != null) {
             try {
@@ -935,7 +937,7 @@
 
         if (!entries.isEmpty()) {
             IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                    getSwId(targetSw.getDpid().toString()));
+                    targetSw.getDpid().value());
 
             if (sw13 != null) {
                 try {
@@ -1018,8 +1020,8 @@
         MatchActionOperationEntry maEntry =
                 new MatchActionOperationEntry(operator, matchAction);
 
-        IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                getSwId(sw.getDpid().toString()));
+        IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(sw.getDpid().value());
+        //        getSwId(sw.getDpid().toString()));
 
         if (sw13 != null) {
             try {
@@ -1071,7 +1073,7 @@
             maEntries.add(buildMAEntry(sw, mplsLabel, fwdSws, false, false));
         }
         IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                getSwId(sw.getDpid().toString()));
+                sw.getDpid().value());
 
         if (sw13 != null) {
             try {
@@ -1393,7 +1395,7 @@
      */
     private OFBarrierReplyFuture sendBarrier(Switch sw) {
         IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                getSwId(sw.getDpid().toString()));
+                sw.getDpid().value());
         OFBarrierReplyFuture replyFuture = null;
         if (sw13 != null) {
             try {
@@ -1502,7 +1504,7 @@
         }
 
         IOF13Switch sw13 = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                getSwId(sw.getDpid().toString()));
+                sw.getDpid().value());
         if ((sw13 instanceof OFSwitchImplDellOSR) && isTransitRouter(sw) && !php) {
             PortNumber port = pickOnePort(sw, fwdSws);
             if (port == null) {
@@ -1611,7 +1613,7 @@
                             Dpid firstVia = via.get(via.size()-1);
                             fwdSws.add(firstVia);
                             IOF13Switch targetSw13 = (IOF13Switch)floodlightProvider.getMasterSwitch(
-                                    getSwId(targetSw.getDpid().toString()));
+                                    targetSw.getDpid().value());
                             if (targetSw13 instanceof OFSwitchImplDellOSR &&
                                 isTransitRouter(targetSw) &&
                                 isTransitRouter(mutableTopology.getSwitch(firstVia))) {
@@ -1645,23 +1647,6 @@
     }
 
     /**
-     * Convert a string DPID to its Switch Id (integer)
-     *
-     * @param dpid
-     * @return
-     */
-    private long getSwId(String dpid) {
-
-        long swId = 0;
-
-        String swIdHexStr = "0x"+dpid.substring(dpid.lastIndexOf(":") + 1);
-        if (swIdHexStr != null)
-            swId = Integer.decode(swIdHexStr);
-
-        return swId;
-    }
-
-    /**
      * Check if the switch is the edge router or not.
      *
      * @param dpid Dpid of the switch to check
@@ -1859,10 +1844,11 @@
      * @param dpid Switch DPID
      * @return IOF13Switch object
      */
-    public IOF13Switch getIOF13Switch(String dpid) {
+    public IOF13Switch getIOF13Switch(String dpidStr) {
 
+        Dpid dpid = new Dpid(dpidStr);
         IOF13Switch targetSw = (IOF13Switch) floodlightProvider.getMasterSwitch(
-                getSwId(dpid));
+                dpid.value());
 
         return targetSw;
     }
diff --git a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplDellOSR.java b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplDellOSR.java
index 13afbeb..18b3e59 100644
--- a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplDellOSR.java
+++ b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplDellOSR.java
@@ -1,5 +1,7 @@
 package net.onrc.onos.core.drivermanager;
 
+import java.io.IOException;
+
 import net.onrc.onos.core.matchaction.match.Ipv4Match;
 import net.onrc.onos.core.matchaction.match.Match;
 import net.onrc.onos.core.util.IPv4Net;
@@ -57,4 +59,16 @@
         return oxmList;
     }
 
+    @Override
+    protected void setTableMissEntries() throws IOException {
+        // set all table-miss-entries
+        populateTableMissEntry(vlanTableId, true, false, false, -1);
+        populateTableMissEntry(tmacTableId, true, false, false, -1);
+        populateTableMissEntry(ipv4UnicastTableId, false, true, true,
+                aclTableId);
+        populateTableMissEntry(mplsTableId, false, true, true,
+                aclTableId);
+        populateTableMissEntry(aclTableId, true, false, false, -1);
+    }
+
 }
\ No newline at end of file
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 e625144..8a81fab 100644
--- a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java
+++ b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java
@@ -156,11 +156,11 @@
     /* Set the default values. These variables will get
      * overwritten based on the switch vendor type
      */
-    private int vlanTableId = TABLE_VLAN;
-    private int tmacTableId = TABLE_TMAC;
-    private int ipv4UnicastTableId = TABLE_IPv4_UNICAST;
-    private int mplsTableId = TABLE_MPLS;
-    private int aclTableId = TABLE_ACL;
+    protected int vlanTableId = TABLE_VLAN;
+    protected int tmacTableId = TABLE_TMAC;
+    protected int ipv4UnicastTableId = TABLE_IPv4_UNICAST;
+    protected int mplsTableId = TABLE_MPLS;
+    protected int aclTableId = TABLE_ACL;
 
     public OFSwitchImplSpringOpenTTP(OFDescStatsReply desc, boolean usePipeline13) {
         super();
@@ -549,7 +549,7 @@
     // Utility methods
     // *****************************
 
-    void setTableMissEntries() throws IOException {
+    protected void setTableMissEntries() throws IOException {
         // set all table-miss-entries
         populateTableMissEntry(vlanTableId, true, false, false, -1);
         populateTableMissEntry(tmacTableId, true, false, false, -1);
@@ -590,7 +590,7 @@
      * @throws IOException
      */
     @SuppressWarnings("unchecked")
-    private void populateTableMissEntry(int tableToAdd, boolean toControllerNow,
+    protected void populateTableMissEntry(int tableToAdd, boolean toControllerNow,
             boolean toControllerWrite,
             boolean toTable, int tableToSend) throws IOException {
         OFOxmList oxmList = OFOxmList.EMPTY;
