diff --git a/apps/test/route-scale/src/main/java/org/onosproject/routescale/CreateFlows.java b/apps/test/route-scale/src/main/java/org/onosproject/routescale/CreateFlows.java
index 8ab8e8f..9e5baf9 100644
--- a/apps/test/route-scale/src/main/java/org/onosproject/routescale/CreateFlows.java
+++ b/apps/test/route-scale/src/main/java/org/onosproject/routescale/CreateFlows.java
@@ -34,7 +34,7 @@
     @Override
     protected void execute() {
         ComponentConfigService service = get(ComponentConfigService.class);
-        service.setProperty("org.onosproject.routescale.ScaleManager",
+        service.setProperty("org.onosproject.routescale.ScaleTestManager",
                             "flowCount", String.valueOf(flowCount));
     }
 
diff --git a/apps/test/route-scale/src/main/java/org/onosproject/routescale/CreateRoutes.java b/apps/test/route-scale/src/main/java/org/onosproject/routescale/CreateRoutes.java
index d738b74..608fc53 100644
--- a/apps/test/route-scale/src/main/java/org/onosproject/routescale/CreateRoutes.java
+++ b/apps/test/route-scale/src/main/java/org/onosproject/routescale/CreateRoutes.java
@@ -34,7 +34,7 @@
     @Override
     protected void execute() {
         ComponentConfigService service = get(ComponentConfigService.class);
-        service.setProperty("org.onosproject.routescale.ScaleManager",
+        service.setProperty("org.onosproject.routescale.ScaleTestManager",
                             "routeCount", String.valueOf(routeCount));
 
     }
diff --git a/apps/test/route-scale/src/main/java/org/onosproject/routescale/ScaleTestManager.java b/apps/test/route-scale/src/main/java/org/onosproject/routescale/ScaleTestManager.java
index 25550f8..cfc7ad6 100644
--- a/apps/test/route-scale/src/main/java/org/onosproject/routescale/ScaleTestManager.java
+++ b/apps/test/route-scale/src/main/java/org/onosproject/routescale/ScaleTestManager.java
@@ -103,6 +103,8 @@
 
     private ApplicationId appId;
 
+    private long macBase = System.currentTimeMillis();
+
     @Activate
     protected void activate() {
         appId = applicationService.getId("org.onosproject.routescale");
@@ -172,11 +174,12 @@
         FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
         for (int i = 0; i < c; i++) {
             FlowRule.Builder frb = DefaultFlowRule.builder();
-            frb.fromApp(appId).makePermanent().withPriority(1000 + i);
+            frb.fromApp(appId).makePermanent().withPriority((currentFlowCount + i) % FlowRule.MAX_PRIORITY);
             TrafficSelector.Builder tsb = DefaultTrafficSelector.builder();
             TrafficTreatment.Builder ttb = DefaultTrafficTreatment.builder();
 
             tsb.matchEthType(Ethernet.TYPE_IPV4);
+            tsb.matchEthDst(randomMac());
             ttb.setEthDst(randomMac()).setEthSrc(randomMac());
             ttb.setOutput(randomPort(ports));
             frb.withSelector(tsb.build()).withTreatment(ttb.build());
@@ -188,12 +191,14 @@
     private void removeExcessFlows(int flowsPerDevice, DeviceId id,
                                    int currentFlowCount) {
         FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
-        int c = flowsPerDevice - currentFlowCount;
+        int c = currentFlowCount - flowsPerDevice;
         log.info("Removing {} flows from device {}", c, id);
         for (FlowEntry e : flowRuleService.getFlowEntries(id)) {
             if (Objects.equals(e.appId(), appId.id()) && c > 0) {
                 ops.remove(e);
                 c--;
+            } else if (c == 0) {
+                break;
             }
         }
         flowRuleService.apply(ops.build());
@@ -252,9 +257,7 @@
 
     // Generates a random MAC address.
     private MacAddress randomMac() {
-        byte[] bytes = new byte[6];
-        random.nextBytes(bytes);
-        return MacAddress.valueOf(bytes);
+        return MacAddress.valueOf(macBase++);
     }
 
     // Returns IP address of a host randomly chosen from the specified list.
