diff --git a/src/test/utils/OltConfig.py b/src/test/utils/OltConfig.py
index 69aa8d8..958e0bd 100644
--- a/src/test/utils/OltConfig.py
+++ b/src/test/utils/OltConfig.py
@@ -21,11 +21,20 @@
         return self.olt_conf['olt'] is True
 
     def olt_port_map(self):
-        if self.on_olt() and self.olt_conf.has_key('ports'):
+        if self.on_olt() and self.olt_conf.has_key('port_map'):
             port_map = {}
+            port_map['ports'] = self.olt_conf['port_map']['ports']
+            port_map['start_vlan'] = 0
+            if self.olt_conf['port_map'].has_key('host'):
+                port_map['host'] = self.olt_conf['port_map']['host']
+            else:
+                port_map['host'] = 'ovsbr0'
+            if self.olt_conf['port_map'].has_key('start_vlan'):
+                port_map['start_vlan'] = int(self.olt_conf['port_map']['start_vlan'])
+                
             ##Build a rx/tx port number to interface map
-            port_map[1] = self.olt_conf['ports']['rx']
-            port_map[2] = self.olt_conf['ports']['tx']
+            port_map[1] = self.olt_conf['port_map']['rx']
+            port_map[2] = self.olt_conf['port_map']['tx']
             port_map[port_map[1]] = 1
             port_map[port_map[2]] = 2
             return port_map
diff --git a/src/test/utils/OnosCtrl.py b/src/test/utils/OnosCtrl.py
index 86954f8..f41bd6a 100644
--- a/src/test/utils/OnosCtrl.py
+++ b/src/test/utils/OnosCtrl.py
@@ -71,11 +71,12 @@
         return cls.config(config)
 
     @classmethod
-    def install_app(cls, app_file):
+    def install_app(cls, app_file, onos_ip = None):
         params = {'activate':'true'}
         headers = {'content-type':'application/octet-stream'}
+        url = cls.applications_url if onos_ip is None else 'http://{0}:8181/onos/v1/applications'.format(onos_ip)
         with open(app_file, 'rb') as payload:
-            result = requests.post(cls.applications_url, auth = cls.auth,
+            result = requests.post(url, auth = cls.auth,
                                    params = params, headers = headers,
                                    data = payload)
         return result.ok, result.status_code
