diff --git a/trellis/README.md b/trellis/README.md
index d59b649..3600075 100644
--- a/trellis/README.md
+++ b/trellis/README.md
@@ -56,25 +56,6 @@
 ## ONOS - Network Config
 `onos-netcfg <onos-ip> routing/trellis/trellis.json`
 
-
-## Update Controller IP
-The location of ONOS controller needs to be updated in several places, including
-Mininet script and zebra config.
-
-In `routing/trellis/trellis.py`
-```
-net.addController(RemoteController('c0', ip='192.168.56.11'))
-net.addController(RemoteController('c1', ip='192.168.56.12'))
-net.addController(RemoteController('c2', ip='192.168.56.13'))
-```
-
-In `routing/trellis/zebradbgp1.conf`
-Note: This ONOS IP need to be reachable from Mininet emulated Quagga host.
-127.0.0.1 is invalid.
-```
-fpm connection ip 192.168.56.11 port 2620
-```
-
 ## Disable/Modify AppArmor
 The apparmor will set dhcpd in enforce mode. We will need to disable the profile.
 ```
@@ -93,7 +74,7 @@
 ## Start Mininet Emulation
 ```
 cd routing/trellis
-sudo ./trellis.py
+sudo ./trellis.py --controllers ONOS_CONTROLLER_IP1, ONOS_CONTROLLER_IP2,...,ONOS_CONTROLLER_IPN
 ```
 
 ## Verify Network Connectivity
@@ -122,13 +103,10 @@
 vagrant ssh
 ```
 
-Now. Follow above instructions to modify the IP address of `trellis.py` and `zebradbgp*.conf.
-and then start the mininet to test
+Now start mininet to test
 ```
 cd routing/trellis
-vim trellis.py
-vim zebradbgp1.conf
-sudo ./trellis.py
+sudo ./trellis.py --controllers ONOS_CONTROLLER_IP1, ONOS_CONTROLLER_IP2,...,ONOS_CONTROLLER_IPN
 ```
 
 # Troubleshooting
diff --git a/trellis/trellis.py b/trellis/trellis.py
index 2e9d8bc..7208aa4 100755
--- a/trellis/trellis.py
+++ b/trellis/trellis.py
@@ -12,6 +12,7 @@
 from routinglib import BgpRouter
 from routinglib import RoutedHost, RoutedHost6
 from trellislib import DhcpClient, Dhcp6Client, DhcpRelay, DhcpServer, Dhcp6Server
+from trellislib import get_mininet, parse_trellis_args, set_up_zebra_config
 from functools import partial
 
 class Trellis( Topo ):
@@ -109,12 +110,10 @@
 if __name__ == "__main__":
     setLogLevel('debug')
     topo = Trellis()
-
     switch = partial(OVSSwitch, protocols='OpenFlow13')
-    net = Mininet(topo=topo, controller=None, switch=switch)
-    net.addController(RemoteController('c0', ip='192.168.56.11'))
-    net.addController(RemoteController('c1', ip='192.168.56.12'))
-    net.addController(RemoteController('c2', ip='192.168.56.13'))
+    arguments = parse_trellis_args()
+    set_up_zebra_config(arguments.controllers)
+    net = get_mininet(arguments, topo, switch)
 
     net.start()
     CLI(net)
diff --git a/trellis/trellis_dualhome.py b/trellis/trellis_dualhome.py
index 4d2b744..56c4599 100755
--- a/trellis/trellis_dualhome.py
+++ b/trellis/trellis_dualhome.py
@@ -14,6 +14,7 @@
 from routinglib import RoutedHost, RoutedHost6
 from trellislib import DhcpClient, Dhcp6Client, DhcpRelay, DhcpServer, Dhcp6Server
 from trellislib import DualHomedDhcpClient
+from trellislib import get_mininet, parse_trellis_args, set_up_zebra_config
 from functools import partial
 
 class Trellis( Topo ):
@@ -177,12 +178,10 @@
 if __name__ == "__main__":
     setLogLevel('debug')
     topo = Trellis()
-
     switch = partial(OVSSwitch, protocols='OpenFlow13')
-    net = Mininet(topo=topo, controller=None, switch=switch)
-    #net.addController(RemoteController('c0', ip='192.168.56.11'))
-    #net.addController(RemoteController('c1', ip='192.168.56.12'))
-    #net.addController(RemoteController('c2', ip='192.168.56.13'))
+    arguments = parse_trellis_args()
+    set_up_zebra_config(arguments.controllers)
+    net = get_mininet(arguments, topo, switch)
 
     net.start()
     CLI(net)
diff --git a/trellis/trellis_duallink.py b/trellis/trellis_duallink.py
index df0243c..da6b399 100755
--- a/trellis/trellis_duallink.py
+++ b/trellis/trellis_duallink.py
@@ -12,6 +12,7 @@
 from routinglib import BgpRouter
 from routinglib import RoutedHost, RoutedHost6
 from trellislib import DhcpClient, Dhcp6Client, DhcpRelay, DhcpServer, Dhcp6Server
+from trellislib import get_mininet, parse_trellis_args, set_up_zebra_config
 from functools import partial
 
 class Trellis( Topo ):
@@ -116,12 +117,10 @@
 if __name__ == "__main__":
     setLogLevel('debug')
     topo = Trellis()
-
     switch = partial(OVSSwitch, protocols='OpenFlow13')
-    net = Mininet(topo=topo, controller=None, switch=switch)
-    net.addController(RemoteController('c0', ip='192.168.56.11'))
-    net.addController(RemoteController('c1', ip='192.168.56.12'))
-    net.addController(RemoteController('c2', ip='192.168.56.13'))
+    arguments = parse_trellis_args()
+    set_up_zebra_config(arguments.controllers)
+    net = get_mininet(arguments, topo, switch)
 
     net.start()
     CLI(net)
diff --git a/trellis/trellis_hag.py b/trellis/trellis_hag.py
index b981f00..d78bd9d 100755
--- a/trellis/trellis_hag.py
+++ b/trellis/trellis_hag.py
@@ -3,7 +3,6 @@
 import sys
 sys.path.append('..')
 from mininet.topo import Topo
-from mininet.net import Mininet
 from mininet.cli import CLI
 from mininet.log import setLogLevel
 from mininet.node import RemoteController, OVSBridge, Host, OVSSwitch
@@ -14,10 +13,12 @@
 from routinglib import RoutedHost, RoutedHost6
 from trellislib import DhcpClient, Dhcp6Client, DhcpRelay, DhcpServer, Dhcp6Server
 from trellislib import DualHomedDhcpClient
+from trellislib import get_mininet, parse_trellis_args, set_up_zebra_config
 from functools import partial
 
+
 class Trellis( Topo ):
-    "Trellis basic topology"
+    """Trellis HAG topology"""
 
     def __init__( self, *args, **kwargs ):
         Topo.__init__( self, *args, **kwargs )
@@ -210,28 +211,27 @@
         rpd6 = self.addHost('rpd6', cls=DhcpClient, mac='00:dd:00:00:00:02')
         self.addLink(rpd5, s207)
         self.addLink(rpd6, s208)
-        
+
         # IPv6 Hosts - RPDs
         rpd5v6 = self.addHost('rpd5v6', cls=Dhcp6Client, mac='00:ee:00:00:00:01')
         rpd6v6 = self.addHost('rpd6v6', cls=Dhcp6Client, mac='00:ee:00:00:00:02')
         self.addLink(rpd5v6, s207)
         self.addLink(rpd6v6, s208)
-        
 
 
-        
+
+
 
 topos = { 'trellis' : Trellis }
 
 if __name__ == "__main__":
     setLogLevel('debug')
-    topo = Trellis()
 
+    topo = Trellis()
     switch = partial(OVSSwitch, protocols='OpenFlow13')
-    net = Mininet(topo=topo, controller=None, switch=switch)
-    #net.addController(RemoteController('c0', ip='10.192.19.161'))
-    #net.addController(RemoteController('c1', ip='10.192.19.162'))
-    #net.addController(RemoteController('c2', ip='10.192.19.163'))
+    arguments = parse_trellis_args()
+    set_up_zebra_config(arguments.controllers)
+    net = get_mininet(arguments, topo, switch)
 
     net.start()
     CLI(net)
diff --git a/trellis/trellis_remote_dhcp.py b/trellis/trellis_remote_dhcp.py
index 1942dd2..fbc1c7f 100755
--- a/trellis/trellis_remote_dhcp.py
+++ b/trellis/trellis_remote_dhcp.py
@@ -12,6 +12,7 @@
 from routinglib import BgpRouter
 from routinglib import RoutedHost
 from trellislib import DhcpClient, DhcpServer, DhcpRelay
+from trellislib import get_mininet, parse_trellis_args, set_up_zebra_config
 from functools import partial
 
 class Trellis( Topo ):
@@ -117,12 +118,10 @@
 if __name__ == "__main__":
     setLogLevel('debug')
     topo = Trellis()
-
     switch = partial(OVSSwitch, protocols='OpenFlow13')
-    net = Mininet(topo=topo, controller=None, switch=switch)
-    net.addController(RemoteController('c0', ip='192.168.56.11'))
-    net.addController(RemoteController('c1', ip='192.168.56.12'))
-    net.addController(RemoteController('c2', ip='192.168.56.13'))
+    arguments = parse_trellis_args()
+    set_up_zebra_config(arguments.controllers)
+    net = get_mininet(arguments, topo, switch)
 
     net.start()
     CLI(net)
diff --git a/trellis/trellis_vlan.py b/trellis/trellis_vlan.py
index 0000f62..89b3a3d 100755
--- a/trellis/trellis_vlan.py
+++ b/trellis/trellis_vlan.py
@@ -13,6 +13,7 @@
 from routinglib import RoutedHost
 from trellislib import DhcpClient, DhcpServer
 from trellislib import TaggedDhcpClient, TaggedDhcpServer
+from trellislib import get_mininet, parse_trellis_args, set_up_zebra_config
 from functools import partial
 
 class Trellis( Topo ):
@@ -105,12 +106,10 @@
 if __name__ == "__main__":
     setLogLevel('debug')
     topo = Trellis()
-
     switch = partial(OVSSwitch, protocols='OpenFlow13')
-    net = Mininet(topo=topo, controller=None, switch=switch)
-    net.addController(RemoteController('c0', ip='192.168.56.11'))
-    net.addController(RemoteController('c1', ip='192.168.56.12'))
-    net.addController(RemoteController('c2', ip='192.168.56.13'))
+    arguments = parse_trellis_args()
+    set_up_zebra_config(arguments.controllers)
+    net = get_mininet(arguments, topo, switch)
 
     net.start()
     CLI(net)
diff --git a/trellis/trellislib.py b/trellis/trellislib.py
index 8cf3c6c..23bc5c3 100644
--- a/trellis/trellislib.py
+++ b/trellis/trellislib.py
@@ -6,8 +6,10 @@
 
 import sys
 sys.path.append('..')
-from mininet.node import Host
+from mininet.node import Host, RemoteController
 from routinglib import RoutedHost, RoutedHost6, Router
+import argparse
+from mininet.net import Mininet
 
 class TaggedRoutedHost(RoutedHost):
     """Host that can be configured with multiple IP addresses."""
@@ -204,3 +206,52 @@
     low2 = mac_value & 0xffff
 
     return 'fe80::{:04x}:{:02x}ff:fe{:02x}:{:04x}'.format(high2, high1, low1, low2)
+
+# Parses Trellis parameters
+def parse_trellis_args():
+    parser = argparse.ArgumentParser(description="Trellis Arguments")
+    parser.add_argument("-c", "--controllers", help = "Comma Separated List of ONOS controllers",
+                        required = True, default = "")
+    return parser.parse_args()
+
+# Gets a mininet instance
+def get_mininet(arguments, topo, switch):
+    net = Mininet(topo=topo, controller=None, switch=switch)
+
+    if arguments.controllers:
+        controllers = arguments.controllers.split(',')
+        controller_number = 0
+        for controller in controllers:
+            net.addController(RemoteController('c' + str(controller_number), ip=controller))
+            controller_number += 1
+    return net
+
+# Generates the Zebra config files
+def set_up_zebra_config(controllers_string):
+    zebra_config = "log file /var/log/quagga/zebradbgp{}.log\n" \
+                   "hostname zebra-bgp{}\n" \
+                   "password quagga\n" \
+                    "!\n" \
+                    "! Default route via virtual management switch\n" \
+                    "!\n" \
+                    "ip route 0.0.0.0/0 172.16.0.1\n" \
+                    "!\n" \
+                    "fpm connection ip {} port 2620\n"
+    controllers = controllers_string.split(',')
+
+    controller1 = controllers[0]
+    if (len(controllers) > 1):
+        controller2 = controllers[1]
+    else:
+        controller2 = controller1
+
+
+    zebra1 = zebra_config.format("1", "1", controller1)
+    zebra2 = zebra_config.format("2", "2", controller2)
+
+    with open("zebradbgp1.conf", "w") as config_file_1:
+        config_file_1.write(zebra1)
+
+    with open("zebradbgp2.conf", "w") as config_file_2:
+        config_file_2.write(zebra2)
+
diff --git a/trellis/zebradbgp1.conf b/trellis/zebradbgp1.conf
deleted file mode 100644
index 51991a4..0000000
--- a/trellis/zebradbgp1.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-log file /var/log/quagga/zebradbgp1.log
-hostname zebra-bgp1
-password quagga
-!
-! Default route via virtual management switch
-!
-ip route 0.0.0.0/0 172.16.0.1
-!
-fpm connection ip 192.168.56.11 port 2620
diff --git a/trellis/zebradbgp2.conf b/trellis/zebradbgp2.conf
deleted file mode 100644
index dce218d..0000000
--- a/trellis/zebradbgp2.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-log file /var/log/quagga/zebradbgp2.log
-hostname zebra-bgp2
-password quagga
-!
-! Default route via virtual management switch
-!
-ip route 0.0.0.0/0 172.16.0.1
-!
-fpm connection ip 192.168.56.11 port 2620
