diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/LinearTopologySimulator.java b/providers/null/src/main/java/org/onosproject/provider/nil/LinearTopologySimulator.java
index 8e8c759..beb06c3 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/LinearTopologySimulator.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/LinearTopologySimulator.java
@@ -42,8 +42,10 @@
 
     @Override
     protected void createLinks() {
+        int portOffset = 1;
         for (int i = 0, n = deviceCount - 1; i < n; i++) {
-            createLink(i, i + 1);
+            createLink(i, i + 1, portOffset, 1);
+            portOffset = 2;
         }
     }
 
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/RerouteTopologySimulator.java b/providers/null/src/main/java/org/onosproject/provider/nil/RerouteTopologySimulator.java
index 11dc130..d17466b 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/RerouteTopologySimulator.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/RerouteTopologySimulator.java
@@ -25,7 +25,7 @@
     @Override
     protected void processTopoShape(String shape) {
         super.processTopoShape(shape);
-        infrastructurePorts = 3;
+        infrastructurePorts = 5;
         deviceCount = (topoShape.length == 1) ? deviceCount : Integer.parseInt(topoShape[1]);
     }
 
@@ -37,13 +37,15 @@
 
     @Override
     protected void createLinks() {
+        int portOffset = 1;
         for (int i = 0, n = deviceCount - 2; i < n; i++) {
-            createLink(i, i + 1);
+            createLink(i, i + 1, portOffset, 1);
+            portOffset = 2;
         }
         int middle = (deviceCount - 1) / 2;
         int alternate = deviceCount - 1;
-        createLink(middle - 1, alternate);
-        createLink(middle, alternate);
+        createLink(middle - 1, alternate, 3, 1);
+        createLink(middle, alternate, 3, 2);
     }
 
     @Override
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java b/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
index 6e7a9ce..76ad8b4 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
@@ -187,15 +187,27 @@
         deviceIds.add(id);
     }
 
+//    /**
+//     * Creates simulated link between two devices on port 1 and port 2.
+//     *
+//     * @param i  index of one simulated device
+//     * @param j  index of another simulated device
+//     */
+//    protected void createLink(int i, int j) {
+//        createLink(i, j, 1, 2);
+//    }
+
     /**
      * Creates simulated link between two devices.
      *
-     * @param i index of one simulated device
-     * @param j index of another simulated device
+     * @param i  index of one simulated device
+     * @param j  index of another simulated device
+     * @param pi port number of i-th device
+     * @param pj port number of j-th device
      */
-    protected void createLink(int i, int j) {
-        ConnectPoint one = new ConnectPoint(deviceIds.get(i), PortNumber.portNumber(1));
-        ConnectPoint two = new ConnectPoint(deviceIds.get(j), PortNumber.portNumber(2));
+    protected void createLink(int i, int j, int pi, int pj) {
+        ConnectPoint one = new ConnectPoint(deviceIds.get(i), PortNumber.portNumber(pi));
+        ConnectPoint two = new ConnectPoint(deviceIds.get(j), PortNumber.portNumber(pj));
         linkProviderService.linkDetected(new DefaultLinkDescription(one, two, DIRECT));
         linkProviderService.linkDetected(new DefaultLinkDescription(two, one, DIRECT));
     }
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/TreeTopologySimulator.java b/providers/null/src/main/java/org/onosproject/provider/nil/TreeTopologySimulator.java
index bed1390..2c04933 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/TreeTopologySimulator.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/TreeTopologySimulator.java
@@ -55,14 +55,16 @@
 
     @Override
     protected void createLinks() {
+        int portOffset = 1;
         for (int t = 1; t < tierOffset.length; t++) {
             int child = tierOffset[t];
             for (int parent = tierOffset[t - 1]; parent < tierOffset[t]; parent++) {
                 for (int i = 0; i < tierMultiplier[t]; i++) {
-                    createLink(parent, child);
+                    createLink(parent, child, i + portOffset, 1);
                     child++;
                 }
             }
+            portOffset = 2; // beyond first tier, allow for up-links
         }
     }
 
