diff --git a/src/test/cord-api/Tests/BBSim/BBSIMScale.robot b/src/test/cord-api/Tests/BBSim/BBSIMScale.robot
index bb8a540..4fda028 100644
--- a/src/test/cord-api/Tests/BBSim/BBSIMScale.robot
+++ b/src/test/cord-api/Tests/BBSim/BBSIMScale.robot
@@ -89,7 +89,7 @@
 
 *** Keywords ***
 Setup
-    ${server_ip}=    Get Environment Variable    SERVER_IP    localhost
+    ${server_ip}=    Get Environment Variable    SERVER_IP    127.0.0.1
     ${port}=    Get Environment Variable    SERVER_PORT    30001
     ${auth} =    Create List    ${XOS_USER}    ${XOS_PASSWD}
     ${voltha_auth}=    Create List    voltha    admin
diff --git a/src/test/cord-api/Tests/BBSim/bbsim_utils.py b/src/test/cord-api/Tests/BBSim/bbsim_utils.py
index 0c68e5d..40b32e8 100644
--- a/src/test/cord-api/Tests/BBSim/bbsim_utils.py
+++ b/src/test/cord-api/Tests/BBSim/bbsim_utils.py
@@ -14,7 +14,7 @@
 
 class bbsim_utils(object):
 
-    def generate_subscribers(self, num_subs, rcord_service_id, stag=999, ctag_start=900, pon_id=1):
+    def generate_subscribers(self, num_subs, rcord_service_id, stag=999, ctag_start=900, pon_id=0):
         """
         :param num_subs: Number of subscribers to create
         :param rcord_service_id: ID of the rcord service
@@ -25,15 +25,15 @@
         subscribers = []
         for index in xrange(1, int(num_subs) + 1):
             sub = {
-                "name" : "Sub_BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)-1),
+                "name" : "Sub_BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)),
                 "status" : "pre-provisioned",
                 "c_tag" : ctag_start + int(index)-1,
                 "s_tag" : stag,
-                "onu_device" : "BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)-1),
-                "circuit_id" : "circuit" + '{0:02x}'.format(int(index)-1),
-                "remote_id" : "remote" + '{0:02x}'.format(int(index)-1),
-                "nas_port_id" : "PON 2/1/01/1:1.1." + '{0:0x}'.format(int(index)-1),
-		"upstream_bps_id" : 1,
+                "onu_device" : "BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)),
+                "circuit_id" : "circuit" + '{0:02x}'.format(int(index)),
+                "remote_id" : "remote" + '{0:02x}'.format(int(index)),
+                "nas_port_id" : "PON 2/1/01/1:1.1." + '{0:0x}'.format(int(index)),
+		        "upstream_bps_id" : 1,
                 "downstream_bps_id" : 1
             }
             subscribers.append(sub)
@@ -41,21 +41,21 @@
                 break
         for index in range(11, int(num_subs) + 1):
             sub = {
-                "name" : "Sub_BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)-1),
+                "name" : "Sub_BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)),
                 "status" : "pre-provisioned",
-                "c_tag" : ctag_start + int(index)-1,
+                "c_tag" : ctag_start + int(index),
                 "s_tag" : stag,
-                "onu_device" : "BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)-1),
-                "circuit_id" : "circuit" + '{0:02x}'.format(int(index)-1),
-                "remote_id" : "remote" + '{0:02x}'.format(int(index)-1),
-                "nas_port_id" : "PON 2/1/01/1:1.1." + str(pon_id) + '{0:02x}'.format(int(index)-1),
+                "onu_device" : "BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)),
+                "circuit_id" : "circuit" + '{0:02x}'.format(int(index)),
+                "remote_id" : "remote" + '{0:02x}'.format(int(index)),
+                "nas_port_id" : "PON 2/1/01/1:1.1." + str(pon_id) + '{0:02x}'.format(int(index)),
                 "upstream_bps_id" : 1,
                 "downstream_bps_id" : 1
             }
             subscribers.append(sub)
         return subscribers
 
-    def generate_whitelists(self, num_onus, att_service_id, pon_id=1):
+    def generate_whitelists(self, num_onus, att_service_id, pon_id=0):
         """
         :param num_onus: Number of ONUs to be added to the whitelist
         :param att_service_id: ID of the att workflow service
@@ -65,10 +65,10 @@
         whitelists = []
         for index in range(1, int(num_onus) + 1):
             onu = {
-                "serial_number": "BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)-1),
+                "serial_number": "BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)),
                 "device_id" : "of:0000626273696d76",
-                "pon_port_id" : 536870913,
+                "pon_port_id" : 536870912,
                 "owner_id" : att_service_id
             }
             whitelists.append(onu)
-        return whitelists
+        return whitelists
\ No newline at end of file
