diff --git a/bin/minindn b/bin/minindn
index eda63de..3d981bc 100755
--- a/bin/minindn
+++ b/bin/minindn
@@ -60,7 +60,7 @@
 
 from mininet.topo import Topo
 from mininet.net import Mininet
-from mininet.log import setLogLevel, output, info
+from mininet.log import setLogLevel, output, info, error, warn
 from mininet.link import TCLink
 from mininet.util import ipStr, ipParse
 
@@ -68,14 +68,13 @@
 from mininet.examples.clustercli import ClusterCLI
 
 from ndn import ExperimentManager
+from ndn.experiments.experiment import Experiment
 from ndn.ndn_host import NdnHost, CpuLimitedNdnHost, RemoteNdnHost
 from ndn.conf_parser import parse_hosts, parse_switches, parse_links
 from ndn.remote_ndn_link import RemoteNdnLink, RemoteGRENdnLink
 from ndn.placer import GuidedPlacer, PopulatePlacement
-from ndn.util import ssh, scp, MiniNDNCLI
-from ndn.nlsr import Nlsr, NlsrConfigGenerator
 from ndn.nfd import Nfd
-from ndn.apps.nfdc import Nfdc
+from ndn.util import ssh, scp, MiniNDNCLI, ProgramOptions
 
 import os.path, time
 import shutil
@@ -110,30 +109,6 @@
 
         sys.exit(0)
 
-class ProgramOptions:
-    def __init__(self):
-        self.ctime = 60
-        self.experimentName = None
-        self.nFaces = 3
-        self.templateFile = "minindn.conf"
-        self.routingType = "link-state"
-        self.isNlsrEnabled = True
-        self.isCliEnabled = True
-        self.nlsrSecurity = False
-        self.nPings = 300
-        self.testbed = False
-        self.workDir = "/tmp/minindn"
-        self.resultDir = None
-        self.pctTraffic = 1.0
-        self.cluster = None
-        self.servers = None
-        self.guided = None
-        self.placer = None
-        self.tunnelType = None
-        self.faceType = "udp"
-        self.arguments = None
-        self.csSize = 65536
-
 def createResultsDir(resultDir, faces, rType):
     if faces == 0:
         faces = "all"
@@ -146,10 +121,10 @@
     if not os.path.isdir(resultDir):
         os.makedirs(resultDir)
     else:
-        print("Results directory (%s) already exists!" % resultDir)
+        warn("Results directory ({}) already exists!".format(resultDir))
         sys.exit(1)
 
-    print("Results will be stored at: %s" % resultDir)
+    info("Results will be stored at: {}".format(resultDir))
     return resultDir
 
 def parse_args():
@@ -252,11 +227,11 @@
     options.arguments = args
 
     if options.experimentName is not None and options.experimentName not in ExperimentManager.getExperimentNames():
-        print("No experiment named %s" % options.experimentName)
+        error("No experiment named {}".format(options.experimentName))
         sys.exit(1)
 
     if options.experimentName is not None and options.resultDir is None:
-        print("No results folder specified; experiment results will remain in the working directory")
+        warn("No results folder specified; experiment results will remain in the working directory")
 
     if options.cluster is not None:
         servers = options.cluster.split(',')
@@ -268,13 +243,13 @@
             options.placement = RoundRobinPlacer
         elif options.placement == "guided":
             if options.placeList is None or not re.match("^[0-9,]+$", options.placeList):
-                print("Please specify correctly how many nodes you want to place on each node!")
+                error("Please specify correctly how many nodes you want to place on each node!")
                 sys.exit(1)
             else:
                 try:
                     options.placeList = map(int, options.placeList.split(","))
                 except ValueError:
-                    print("Please specify the nodes correctly, no comma at the beginning/end!")
+                    error("Please specify the nodes correctly, no comma at the beginning/end!")
                     sys.exit(1)
 
                 PopulatePlacement(options.placeList)
@@ -291,30 +266,23 @@
     def __init__(self, conf_arq, workDir, **opts):
         Topo.__init__(self, **opts)
 
-        global hosts_conf
-        global links_conf
-        hosts_conf = parse_hosts(conf_arq)
-        switches_conf = parse_switches(conf_arq)
-        links_conf = parse_links(conf_arq)
+        self.hosts_conf = parse_hosts(conf_arq)
+        self.switches_conf = parse_switches(conf_arq)
+        self.links_conf = parse_links(conf_arq)
 
         self.isTCLink = False
         self.isLimited = False
 
-        for host in hosts_conf:
+        for host in self.hosts_conf:
             if host.cpu != None and self.isLimited != True:
                 self.isLimited = True
-            self.addHost(host.name, app=host.app, params=host.uri_tuples, cpu=host.cpu,
+            self.addHost(host.name, app=host.app, params=host.params, cpu=host.cpu,
                          cores=host.cores,cache=host.cache, workdir=workDir)
-            if (options.routingType != 'link-state' and (host.params.get('radius') is None
-                or host.params.get('angle') is None)):
-                info('Hyperbolic coordinates in topology file are either missing or misconfigured.\n' \
-                     'Check that each node has one radius value and one or two angle value(s).\n')
-                sys.exit(1)
 
-        for switch in switches_conf:
+        for switch in self.switches_conf:
             self.addSwitch(switch.name)
 
-        for link in links_conf:
+        for link in self.links_conf:
             if len(link.linkDict) == 0:
                 self.addLink(link.h1, link.h2)
             else:
@@ -330,7 +298,7 @@
         options.templateFile = INSTALL_DIR + 'minindn.testbed.conf'
 
     if os.path.exists(options.templateFile) == False:
-        info('Template file cannot be found. Exiting...\n')
+        error('Template file cannot be found. Exiting...\n')
         sys.exit(1)
 
     if options.cluster is not None and options.placement == GuidedPlacer:
@@ -341,7 +309,7 @@
                     num_nodes += 1
 
         if sum(options.placeList) != num_nodes:
-            print("Placement list sum is not equal to number of nodes!")
+            error("Placement list sum is not equal to number of nodes!")
             sys.exit(1)
 
     # Copy nfd.conf to remote hosts - this assumes that NDN versions across
@@ -349,19 +317,17 @@
     if options.cluster is not None:
         for server in options.servers:
             if server != "localhost":
-                login = "mininet@%s" % server
+                login = "mininet@{}".format(server)
                 src = nfdConfFile
-                dst = "%s:/tmp/nfd.conf" % (login)
+                dst = "{}:/tmp/nfd.conf".format(login)
                 scp(src, dst)
-                ssh(login, "sudo cp /tmp/nfd.conf %s" % src)
+                ssh(login, "sudo cp /tmp/nfd.conf {}".format(src))
 
     if options.resultDir is not None:
         options.resultDir = createResultsDir(options.resultDir, options.nFaces, options.routingType)
 
     topo = NdnTopo(options.templateFile, options.workDir)
 
-    t = datetime.datetime.now()
-
     if topo.isTCLink == True and topo.isLimited == True:
         net = Mininet(topo,host=CpuLimitedNdnHost,link=TCLink)
     elif topo.isTCLink == True and topo.isLimited == False:
@@ -375,12 +341,6 @@
     else:
         net = Mininet(topo, host=NdnHost)
 
-    t2 = datetime.datetime.now()
-
-    delta = t2 - t
-
-    info('Setup time: ' + str(delta.seconds) + '\n')
-
     net.start()
 
     # Giving proper IPs to intf so neighbor nodes can communicate
@@ -404,86 +364,50 @@
                 ndnNetBase = ipStr(ipParse(ndnNetBase) + 4)
 
     time.sleep(2)
+
     info('Starting NFD on nodes\n')
     for host in net.hosts:
         host.nfd = Nfd(host, options.csSize)
         host.nfd.start()
 
-    if options.isNlsrEnabled is True:
-
-        # NLSR Security
-        if options.nlsrSecurity is True:
-            Nlsr.createKeysAndCertificates(net, options.workDir)
-
-        # NLSR initialization
-        info('Starting NLSR on nodes\n')
-        for host in net.hosts:
-            conf = next(x for x in hosts_conf if x.name == host.name)
-            host.nlsrParameters = conf.nlsrParameters
-
-            if options.nFaces is not None:
-                host.nlsrParameters["max-faces-per-prefix"] = options.nFaces
-
-            if options.routingType == 'dry':
-                host.nlsrParameters["hyperbolic-state"] = "dry-run"
-
-            elif options.routingType == 'hr':
-                host.nlsrParameters["hyperbolic-state"] = "on"
-
-            # Generate NLSR configuration file
-            configGenerator = NlsrConfigGenerator(host, options.nlsrSecurity, options.faceType)
-            configGenerator.createConfigFile()
-
-            # Start NLSR
-            host.nlsr = Nlsr(host, configGenerator.neighborIPs, options.faceType)
-            host.nlsr.start()
-
     for host in net.hosts:
         if 'app' in host.params:
             if host.params['app'] != '':
                 app = host.params['app']
-                print("Starting " + app + " on node " + host.name)
-                print(host.cmd(app))
+                info("Starting {} on node {}".format(app, host.name))
+                info(host.cmd(app))
 
-    # Determine if each host is running NFD and NLSR
+    # Determine if each host is running NFD
     for host in net.hosts:
         nfdStatus = host.cmd("ps -g -U root | grep 'nfd --config {}/[n]fd.conf'".format(host.homeFolder))
-        nlsrStatus = host.cmd("ps -g | grep 'nlsr -f {}/[n]lsr.conf'".format(host.homeFolder))
         if not host.nfd.isRunning or not nfdStatus:
-            print("NFD on host {} is not running. Printing log file and exiting...".format(host.name))
-            print(host.cmd("cat {}/nfd.log".format(host.homeFolder)))
-            net.stop()
-            sys.exit(1)
-        if options.isNlsrEnabled and (not host.nlsr.isRunning or not nlsrStatus):
-            print("NLSR on host {} is not running. Printing log file and exiting...".format(host.name))
-            print(host.cmd("cat {}/log/nlsr.log".format(host.homeFolder)))
+            error("NFD on host {} is not running. Printing log file and exiting...".format(host.name))
+            info(host.cmd("tail {}/nfd.log".format(host.homeFolder)))
             net.stop()
             sys.exit(1)
 
     # Load experiment
     experimentName = options.experimentName
 
-    if experimentName is not None:
-        print("Loading experiment: %s" % experimentName)
+    experimentArgs = {
+        "net": net,
+        "options": options
+    }
 
-        experimentArgs = {
-            "net": net,
-            "ctime": options.ctime,
-            "nPings": options.nPings,
-            "strategy": Nfdc.STRATEGY_BEST_ROUTE,
-            "pctTraffic": options.pctTraffic,
-            "nlsrSecurity": options.nlsrSecurity,
-            "workDir": options.workDir,
-            "arguments" : options.arguments
-        }
+    if experimentName is not None:
+        info("Loading experiment: {}".format(experimentName))
 
         experiment = ExperimentManager.create(experimentName, experimentArgs)
 
         if experiment is not None:
             experiment.start()
         else:
-            print("ERROR: Experiment '%s' does not exist" % experimentName)
+            error("Experiment '{}' does not exist".format(experimentName))
             return
+    else:
+        experiment = Experiment(experimentArgs)
+        if options.isNlsrEnabled:
+            experiment.startNlsr(checkConvergence = False)
 
     if options.isCliEnabled is True:
         MiniNDNCLI(net)
@@ -491,20 +415,20 @@
     net.stop()
 
     if options.resultDir is not None:
-        print("Moving results to %s" % options.resultDir)
-        for file in glob.glob('%s/*' % options.workDir):
+        info("Moving results to {}".format(options.resultDir))
+        for file in glob.glob('{}/*'.format(options.workDir)):
             shutil.move(file, options.resultDir)
         if options.cluster is not None:
             for server in options.servers:
                 if server != "localhost":
-                    login = "mininet@%s" % server
-                    src = "%s:%s/*" % (login, options.workDir)
+                    login = "mininet@{}".format(server)
+                    src = "{}:{}/*".format(login, options.workDir)
                     dst = options.resultDir
                     scp(src, dst)
-            print("Please clean work directories of other machines before running the cluster again")
+            info("Please clean work directories of other machines before running the cluster again")
 
 def signal_handler(signal, frame):
-    print('Cleaning up...')
+    info('Cleaning up...')
     call(["nfd-stop"])
     call(["sudo", "mn", "--clean"])
     sys.exit(1)
@@ -516,15 +440,12 @@
     # Checks that each program is in the system path
     for program in dependencies:
         if call(["which", program], stdout=devnull):
-            print("{} is missing from the system path! Exiting...".format(program))
+            error("{} is missing from the system path! Exiting...".format(program))
             sys.exit(1)
     devnull.close()
 
 if __name__ == '__main__':
 
-    hosts_conf = []
-    links_conf = []
-
     signal.signal(signal.SIGQUIT, signal_handler)
 
     options = parse_args()
@@ -535,7 +456,7 @@
     try:
         execute(options)
     except Exception as e:
-        print("Error: {}".format(e))
+        error("{}".format(e))
         call(["nfd-stop"])
         call(["sudo", "mn", "--clean"])
         sys.exit(1)
diff --git a/docs/CONFIG.md b/docs/CONFIG.md
index ebf14cd..d2a5bf1 100644
--- a/docs/CONFIG.md
+++ b/docs/CONFIG.md
@@ -25,11 +25,15 @@
 
 * cache : Amount of cache memory available to a node in KB
 
+* nfd-log-level: Set the log level of the NFD running on the node (ex: DEBUG). For finer control,
+nfd.conf or nfd.conf.sample needs to be modified in /usr/local/etc/ndn/
+
+* nlsr-log-level: Set the log level of the NLSR running on the node (ex: DEBUG).
 
     e.g.)
 
     [nodes]
-    a: _ cpu=0.3
+    a: _ cpu=0.3 nfd-log-level=TRACE nlsr-log-level=NONE
     b: app="sample app 1; sampleapp2.sh" cpu=0.3
 
 ### The [links] section:
@@ -61,4 +65,4 @@
 Note that `sampleApp1` and `sampleApp2` must be either installed in the system (ex: /usr/bin)
 or an absolute path needs to be given.
 
-See `ndn_utils/topologies` for more sample files
+See `topologies` for more sample files
diff --git a/docs/EXPERIMENTS.md b/docs/EXPERIMENTS.md
index 24ed27b..a2191ac 100644
--- a/docs/EXPERIMENTS.md
+++ b/docs/EXPERIMENTS.md
@@ -101,7 +101,7 @@
 
 **Scenario**: This is exactly like the failure experiment but instead of failing the node named "csu" it fails the most connected node (MCN) i.e the node with the most links.
 
-Experiment ID: `--failure-mcn`
+Experiment ID: `--mcn-failure`
 
 ### Experiment data
 
@@ -131,7 +131,10 @@
             def __init__(self, args):
                 Experiment.__init__(self, args)
 
-3. Override the `setup()` method to define how the experiment should be initialized
+3. Override `start()` if the experiments want to override NLSR setup and skip `setup()` and `run()`
+as described below. `start()` is the entry point for an experiment.
+
+4. Override the `setup()` method to define how the experiment should be initialized
 
    e.g.) Run an ndnping server in the background on each node
 
@@ -140,7 +143,7 @@
                host.cmd("ndnpingserver host.name &")
 
 
-4. Override the `run()` method to define how the experiment should behave
+5. Override the `run()` method to define how the experiment should behave
 
     e.g.) Obtain the NFD status of each node and save it to file
 
@@ -148,7 +151,7 @@
             for host in self.net.hosts:
                 host.cmd("nfdc status report > status.txt")
 
-5. Register the experiment with the `ExperimentManager` to make the experiment runnable from the
+6. Register the experiment with the `ExperimentManager` to make the experiment runnable from the
 command line.
 
         Experiment.register("example-name", ExampleExperiment)
diff --git a/install.sh b/install.sh
index d75a796..e2b0e3b 100755
--- a/install.sh
+++ b/install.sh
@@ -208,6 +208,7 @@
     sudo cp topologies/minindn.caida.conf "$install_dir"
     sudo cp topologies/minindn.ucla.conf "$install_dir"
     sudo cp topologies/minindn.testbed.conf "$install_dir"
+    sudo cp topologies/current-testbed.conf "$install_dir"
     sudo python setup.py clean --all install
 }
 
diff --git a/ndn/nlsr.py b/ndn/apps/nlsr.py
similarity index 87%
rename from ndn/nlsr.py
rename to ndn/apps/nlsr.py
index 98efc78..7d55a21 100644
--- a/ndn/nlsr.py
+++ b/ndn/apps/nlsr.py
@@ -23,10 +23,11 @@
 
 from mininet.clean import sh
 from mininet.examples.cluster import RemoteMixin
+from mininet.log import info
 
 from ndn.ndn_application import NdnApplication
 from ndn.util import ssh, scp, copyExistentFile
-from apps.nfdc import Nfdc
+from ndn.apps.nfdc import Nfdc
 
 import shutil
 import os
@@ -37,11 +38,11 @@
 NETWORK="/ndn/"
 
 class Nlsr(NdnApplication):
-    def __init__(self, node, neighbors, faceType):
+    def __init__(self, node, options):
         NdnApplication.__init__(self, node)
+        self.config = NlsrConfigGenerator(node, options)
+
         self.node = node
-        self.neighbors = neighbors
-        self.faceType = faceType
         self.routerName = "/{}C1.Router/cs/{}".format('%', node.name)
         self.confFile = "{}/nlsr.conf".format(node.homeFolder)
 
@@ -49,17 +50,14 @@
         self.logDir = "{}/log".format(node.homeFolder)
         self.node.cmd("mkdir {}".format(self.logDir))
 
-        # Create faces in NFD
-        self.createFaces()
-
-    def start(self):
-        self.node.cmd("export NDN_LOG=nlsr.*={}".format(self.node.nlsrParameters.get("nlsr-log-level", "DEBUG")))
+    def start(self, sleepTime = 1):
+        self.node.cmd("export NDN_LOG=nlsr.*={}".format(self.node.params["params"].get("nlsr-log-level", "DEBUG")))
         NdnApplication.start(self, "nlsr -f {} > log/nlsr.log 2>&1 &".format(self.confFile))
-        time.sleep(1)
+        time.sleep(sleepTime)
 
     def createFaces(self):
-        for ip in self.neighbors:
-            Nfdc.createFace(self.node, ip, self.faceType, isPermanent=True)
+        for ip in self.config.neighborIPs:
+            Nfdc.createFace(self.node, ip, self.config.faceType, isPermanent=True)
 
     @staticmethod
     def createKey(host, name, outputFile):
@@ -142,22 +140,36 @@
     ROUTING_LINK_STATE = "ls"
     ROUTING_HYPERBOLIC = "hr"
 
-    def __init__(self, node, isSecurityEnabled, faceType):
+    def __init__(self, node, options):
         self.node = node
-        self.isSecurityEnabled = isSecurityEnabled
-        self.faceType = faceType
+        self.isSecurityEnabled = options.nlsrSecurity
+        self.faceType = options.faceType
         self.infocmd = "infoedit -f nlsr.conf"
 
-        parameters = node.nlsrParameters
+        parameters = node.params["params"]
 
-        self.nFaces = parameters.get("max-faces-per-prefix", 3)
-        self.hyperbolicState = parameters.get("hyperbolic-state", "off")
+        self.nFaces = options.nFaces
+        if options.routingType == "hr":
+            self.hyperbolicState = "on"
+        elif options.routingType == "dry":
+            self.hyperbolicState = "dry-run"
+        else:
+            self.hyperbolicState = "off"
         self.hyperRadius = parameters.get("radius", 0.0)
         self.hyperAngle = parameters.get("angle", 0.0)
+
+        if ((self.hyperbolicState == "on" or self.hyperbolicState == "dry-run") and
+            (self.hyperRadius == 0.0 or self.hyperAngle == 0.0)):
+                info('Hyperbolic coordinates in topology file are either missing or misconfigured.')
+                info('Check that each node has one radius value and one or two angle value(s).')
+                sys.exit(1)
+
         self.neighborIPs = []
         possibleConfPaths = ["/usr/local/etc/ndn/nlsr.conf.sample", "/etc/ndn/nlsr.conf.sample"]
         copyExistentFile(node, possibleConfPaths, "{}/nlsr.conf".format(self.node.homeFolder))
 
+        self.createConfigFile()
+
     def createConfigFile(self):
 
         self.__editGeneralSection()
@@ -192,7 +204,7 @@
 
                 linkCost = intf.params.get("delay", "10ms").replace("ms", "")
 
-                # To be used later to create faces
+                Nfdc.createFace(self.node, ip, self.faceType, isPermanent=True)
                 self.neighborIPs.append(ip)
 
                 self.node.cmd("{} -a neighbors.neighbor \
diff --git a/ndn/conf_parser.py b/ndn/conf_parser.py
index 85fda2b..a2f63a1 100644
--- a/ndn/conf_parser.py
+++ b/ndn/conf_parser.py
@@ -66,25 +66,14 @@
     def __init__(self, name, app='', params='', cpu=None, cores=None, cache=None):
         self.name = name
         self.app = app
-        self.uri_tuples = params
         self.params = params
         self.cpu = cpu
         self.cores = cores
         self.cache = cache
 
-        # For now assume leftovers are NLSR configuration parameters
-        self.nlsrParameters = params
-
     def __repr__(self):
-        return 'Name: '    + self.name + \
-               ' App: '    + self.app + \
-               ' URIS: '   + str(self.uri_tuples) + \
-               ' CPU: '    + str(self.cpu) + \
-               ' Cores: '  + str(self.cores) + \
-               ' Cache: '  + str(self.cache) + \
-               ' Radius: ' + str(self.radius) + \
-               ' Angle: '  + str(self.angle) + \
-               ' NLSR Parameters: ' + self.nlsrParameters
+        return " Name: {} App: {} Params: {} CPU: {} Cores: {} Cores: {} Cache: {}" \
+               .format(self.name, self.app, self.params, self.cpu, self.cores, self.cache)
 
 class confNdnSwitch:
     def __init__(self, name):
@@ -98,7 +87,7 @@
         self.linkDict = linkDict
 
     def __repr__(self):
-        return 'h1: ' + self.h1 + ' h2: ' + self.h2 + ' params: ' + str(self.linkDict)
+        return "h1: {} h2: {} params: {}".format(self.h1, self.h2, self.linkDict)
 
 def parse_hosts(conf_arq):
     'Parse hosts section from the conf file.'
@@ -109,16 +98,16 @@
 
     items = config.items('nodes')
 
-        #makes a first-pass read to hosts section to find empty host sections
+    # makes a first-pass read to hosts section to find empty host sections
     for item in items:
         name = item[0]
         rest = item[1].split()
         if len(rest) == 0:
             config.set('nodes', name, '_')
-        #updates 'items' list
+    # updates 'items' list
     items = config.items('nodes')
 
-        #makes a second-pass read to hosts section to properly add hosts
+    # makes a second-pass read to hosts section to properly add hosts
     for item in items:
 
         name = item[0]
@@ -203,4 +192,4 @@
         elif line == "[links]\n":
             linkSectionFlag = True
 
-    return links
\ No newline at end of file
+    return links
diff --git a/ndn/experiment_manager.py b/ndn/experiment_manager.py
index 1275a96..0be9f92 100644
--- a/ndn/experiment_manager.py
+++ b/ndn/experiment_manager.py
@@ -38,7 +38,7 @@
 
     def loadModules(self):
         currentDir = os.path.dirname(__file__)
-        experimentDir = "%s/%s" % (currentDir, "experiments")
+        experimentDir = "{}/{}".format(currentDir, "experiments")
         experimentModule = "ndn.experiments"
 
         # Import and register experiments
@@ -46,13 +46,17 @@
             for filename in files:
                 if filename.endswith(".py") and filename != "__init__.py":
                     module = filename.replace(".py", "")
-                    __import__("%s.%s" % (experimentModule, module))
+                    subdir = os.path.basename(root)
+                    if subdir == "experiments":
+                        __import__("{}.{}".format(experimentModule, module))
+                    else:
+                        __import__("{}.{}.{}".format(experimentModule, subdir, module))
 
     def register(self, name, experimentClass):
         if name not in self.experiments:
             self.experiments[name] = experimentClass
         else:
-            raise _ExperimentManager.Error("Experiment '%s' has already been registered" % name)
+            raise _ExperimentManager.Error("Experiment '{}' has already been registered".format(name))
 
     def create(self, name, args):
         if name in self.experiments:
diff --git a/ndn/experiments/arguments_experiment.py b/ndn/experiments/arguments_experiment.py
index e7ed6f9..6baacd5 100644
--- a/ndn/experiments/arguments_experiment.py
+++ b/ndn/experiments/arguments_experiment.py
@@ -1,10 +1,36 @@
+# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2018, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
 from ndn.experiments.experiment import Experiment
 
 class ArgumentsExperiment(Experiment):
     def __init__(self, args):
         Experiment.__init__(self, args)
-        self.ds = self.arguments.ds
-        self.logging = self.arguments.logging
+        self.ds = self.options.arguments.ds
+        self.logging = self.options.arguments.logging
+
+    def start(self):
+        pass
 
     def setup(self):
         pass
diff --git a/ndn/experiments/convergence_experiment.py b/ndn/experiments/convergence_experiment.py
deleted file mode 100644
index f95da58..0000000
--- a/ndn/experiments/convergence_experiment.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-#
-# Copyright (C) 2015-2018, The University of Memphis,
-#                          Arizona Board of Regents,
-#                          Regents of the University of California.
-#
-# This file is part of Mini-NDN.
-# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
-#
-# Mini-NDN is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Mini-NDN is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Mini-NDN, e.g., in COPYING.md file.
-# If not, see <http://www.gnu.org/licenses/>.
-
-from ndn.experiments.experiment import Experiment
-
-class ConvergenceExperiment(Experiment):
-
-    def __init__(self, args):
-        Experiment.__init__(self, args)
-
-    def setup(self):
-        self.checkConvergence()
-
-    def run(self):
-        pass
-
-Experiment.register("convergence", ConvergenceExperiment)
diff --git a/ndn/experiments/experiment.py b/ndn/experiments/experiment.py
index 347655d..8a2f49c 100644
--- a/ndn/experiments/experiment.py
+++ b/ndn/experiments/experiment.py
@@ -23,46 +23,71 @@
 
 import time
 import sys
-from ndn.apps.ndn_ping_client import NDNPingClient
 from itertools import cycle
 
+from mininet.log import info
+
 from ndn import ExperimentManager
 from ndn.apps.nfdc import Nfdc
 
+from ndn.apps.nlsr import Nlsr, NlsrConfigGenerator
+from ndn.apps.ndn_ping_client import NDNPingClient
+
 class Experiment:
 
     def __init__(self, args):
         self.net = args["net"]
-        self.convergenceTime = args["ctime"]
-        self.nPings = args["nPings"]
-        self.strategy = args["strategy"]
-        self.pctTraffic = args["pctTraffic"]
-        self.nlsrSecurity = args["nlsrSecurity"]
-        self.arguments = args["arguments"]
+        self.options = args["options"]
 
         # Used to restart pings on the recovered node if any
         self.pingedDict = {}
 
+    def afterNfdStart(self):
+        pass
+
     def start(self):
+        self.afterNfdStart()
+        if self.options.isNlsrEnabled is True:
+            self.startNlsr()
         self.setup()
         self.run()
 
     def setup(self):
         for host in self.net.hosts:
             # Set strategy
-            Nfdc.setStrategy(host, "/ndn/", self.strategy)
+            Nfdc.setStrategy(host, "/ndn/", self.options.strategy)
 
             # Start ping server
-            host.cmd("ndnpingserver /ndn/{}-site/{} > ping-server &".format(host, host))
+            host.cmd("ndnpingserver /ndn/{}-site/{} > ping-server &".format(host.name, host.name))
 
             # Create folder to store ping data
             host.cmd("mkdir ping-data")
 
-        self.checkConvergence()
+    def startNlsr(self, checkConvergence = True):
+        # NLSR Security
+        if self.options.nlsrSecurity is True:
+            Nlsr.createKeysAndCertificates(self.net, self.options.workDir)
+
+        # NLSR initialization
+        info('Starting NLSR on nodes\n')
+        for host in self.net.hosts:
+            host.nlsr = Nlsr(host, self.options)
+            host.nlsr.start()
+
+        for host in self.net.hosts:
+            nlsrStatus = host.cmd("ps -g | grep 'nlsr -f {}/[n]lsr.conf'".format(host.homeFolder))
+            if not host.nlsr.isRunning or not nlsrStatus:
+                print("NLSR on host {} is not running. Printing log file and exiting...".format(host.name))
+                print(host.cmd("tail {}/log/nlsr.log".format(host.homeFolder)))
+                self.net.stop()
+                sys.exit(1)
+
+        if checkConvergence:
+            self.checkConvergence()
 
     def checkConvergence(self, convergenceTime = None):
         if convergenceTime is None:
-            convergenceTime = self.convergenceTime
+            convergenceTime = self.options.ctime
 
         # Wait for convergence time period
         print "Waiting " + str(convergenceTime) + " seconds for convergence..."
@@ -79,8 +104,8 @@
             didNodeConverge = True
             for node in self.net.hosts:
                 # Node has its own router name in the fib list, but not name prefix
-                if ( ("/ndn/" + node.name + "-site/%C1.Router/cs/" + node.name) not in statusRouter or
-                      host.name != node.name and ("/ndn/" + node.name + "-site/" + node.name) not in statusPrefix ):
+                if ( ("/ndn/{}-site/%C1.Router/cs/{}".format(node.name, node.name)) not in statusRouter or
+                      host.name != node.name and ("/ndn/{}-site/{}".format(node.name, node.name)) not in statusPrefix ):
                     didNodeConverge = False
                     didNlsrConverge = False
 
@@ -98,23 +123,23 @@
             for other in self.net.hosts:
                 # Do not ping self
                 if host.name != other.name:
-                    NDNPingClient.ping(host, other, self.nPings)
+                    NDNPingClient.ping(host, other, self.options.nPings)
 
     def failNode(self, host):
-        print("Bringing %s down" % host.name)
+        print("Bringing {} down".format(host.name))
         host.nfd.stop()
 
     def recoverNode(self, host):
-        print("Bringing %s up" % host.name)
+        print("Bringing {} up".format(host.name))
         host.nfd.start()
         host.nlsr.createFaces()
         host.nlsr.start()
-        Nfdc.setStrategy(host, "/ndn/", self.strategy)
-        host.cmd("ndnpingserver /ndn/{}-site/{} > ping-server &".format(host, host))
+        Nfdc.setStrategy(host, "/ndn/", self.options.strategy)
+        host.cmd("ndnpingserver /ndn/{}-site/{} > ping-server &".format(host.name, host.name))
 
     def startPctPings(self):
-        nNodesToPing = int(round(len(self.net.hosts)*self.pctTraffic))
-        print "Each node will ping %d node(s)" % nNodesToPing
+        nNodesToPing = int(round(len(self.net.hosts) * self.options.pctTraffic))
+        print "Each node will ping {} node(s)".format(nNodesToPing)
         # Temporarily store all the nodes being pinged by a particular node
         nodesPingedList = []
 
@@ -133,7 +158,7 @@
 
                 # Do not ping self
                 if host.name != other.name:
-                    NDNPingClient.ping(host, other, self.nPings)
+                    NDNPingClient.ping(host, other, self.options.nPings)
                     nodesPingedList.append(other)
 
                 # Always increment because in 100% case a node should not ping itself
@@ -144,4 +169,4 @@
 
     @staticmethod
     def register(name, experimentClass):
-        ExperimentManager.register(name, experimentClass)
\ No newline at end of file
+        ExperimentManager.register(name, experimentClass)
diff --git a/ndn/experiments/mcn_failure_convergence_experiment.py b/ndn/experiments/mcn_failure_convergence_experiment.py
deleted file mode 100644
index 376d91f..0000000
--- a/ndn/experiments/mcn_failure_convergence_experiment.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-#
-# Copyright (C) 2015-2018, The University of Memphis,
-#                          Arizona Board of Regents,
-#                          Regents of the University of California.
-#
-# This file is part of Mini-NDN.
-# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
-#
-# Mini-NDN is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Mini-NDN is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Mini-NDN, e.g., in COPYING.md file.
-# If not, see <http://www.gnu.org/licenses/>.
-
-from ndn.experiments.experiment import Experiment
-from ndn.experiments.mcn_failure_experiment import MCNFailureExperiment
-
-import time
-
-class MCNFailureConvergenceExperiment(MCNFailureExperiment):
-
-    def __init__(self, args):
-        MCNFailureExperiment.__init__(self, args)
-
-    def run(self):
-        mostConnectedNode = self.getMostConnectedNode()
-
-        # After the pings are scheduled, collect pings for 1 minute
-        time.sleep(self.PING_COLLECTION_TIME_BEFORE_FAILURE)
-
-        # Bring down MCN
-        self.failNode(mostConnectedNode)
-
-        # MCN is down for 2 minutes
-        time.sleep(120)
-
-        # Bring MCN back up
-        self.recoverNode(mostConnectedNode)
-
-        self.checkConvergence()
-
-Experiment.register("mcn-failure-convergence", MCNFailureConvergenceExperiment)
diff --git a/ndn/experiments/nlsr/__init__.py b/ndn/experiments/nlsr/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ndn/experiments/nlsr/__init__.py
diff --git a/ndn/experiments/nlsr/advertise-delayed-start.py b/ndn/experiments/nlsr/advertise-delayed-start.py
new file mode 100644
index 0000000..cbd8ac8
--- /dev/null
+++ b/ndn/experiments/nlsr/advertise-delayed-start.py
@@ -0,0 +1,73 @@
+# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2018, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+from ndn.experiments.experiment import Experiment
+from ndn.apps.nlsr import Nlsr, NlsrConfigGenerator
+
+from mininet.log import info
+
+import time, sys
+
+class AdvertiseDelayedStartExperiment(Experiment):
+    '''Tests Name LSA data segmentation'''
+
+    def __init__(self, args):
+        Experiment.__init__(self, args)
+
+    def setup(self):
+        pass
+
+    def run(self):
+        pass
+
+    def startNlsr(self, checkConvergence = True):
+        # NLSR Security
+        if self.options.nlsrSecurity is True:
+            Nlsr.createKeysAndCertificates(self.net, self.options.workDir)
+
+        host1 = self.net.hosts[0]
+        host1.nlsr = Nlsr(host1, self.options)
+        host1.nlsr.start()
+
+        expectedTotalCount = 500
+        for i in range(0, expectedTotalCount):
+            host1.cmd("nlsrc advertise /long/name/to/exceed/max/packet/size/host1/{}".format(i))
+
+        time.sleep(60)
+
+        host2 = self.net.hosts[1]
+        host2.nlsr = Nlsr(host2, self.options)
+        host2.nlsr.start()
+
+        time.sleep(60)
+
+        advertiseCount = int(host2.cmd("nfdc fib | grep host1 | wc -l"))
+        info(advertiseCount)
+        if advertiseCount == expectedTotalCount:
+            info('\nSuccessfully advertised {} prefixes\n'.format(expectedTotalCount))
+        else:
+            info('\nAdvertising {} prefixes failed. Exiting...\n'.format(expectedTotalCount))
+            self.net.stop()
+            sys.exit(1)
+
+Experiment.register("advertise-delayed-start", AdvertiseDelayedStartExperiment)
diff --git a/ndn/experiments/nlsr/delayed-start.py b/ndn/experiments/nlsr/delayed-start.py
new file mode 100644
index 0000000..e995c50
--- /dev/null
+++ b/ndn/experiments/nlsr/delayed-start.py
@@ -0,0 +1,66 @@
+# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2018, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+from ndn.experiments.experiment import Experiment
+from ndn.apps.nlsr import Nlsr, NlsrConfigGenerator
+
+from mininet.log import info
+
+import time
+
+class NlsrDelayedStartExperiment(Experiment):
+
+    def __init__(self, args):
+        Experiment.__init__(self, args)
+
+    def setup(self):
+        pass
+
+    def run(self):
+        pass
+
+    def startNlsr(self, checkConvergence = True):
+        # NLSR Security
+        if self.options.nlsrSecurity is True:
+            Nlsr.createKeysAndCertificates(self.net, self.options.workDir)
+
+        i = 1
+        # NLSR initialization
+        info('Starting NLSR on nodes\n')
+        for host in self.net.hosts:
+            host.nlsr = Nlsr(host, self.options)
+            host.nlsr.start()
+
+            # Wait 1/2 minute between starting NLSRs
+            # Wait 1 hour before starting last NLSR
+            if i == len(self.net.hosts) - 1:
+                info('Sleeping 1 hour before starting last NLSR')
+                time.sleep(3600)
+            else:
+                time.sleep(30)
+            i += 1
+
+        if checkConvergence:
+            self.checkConvergence()
+
+Experiment.register("nlsr-delayed-start", NlsrDelayedStartExperiment)
diff --git a/ndn/experiments/failure_experiment.py b/ndn/experiments/nlsr/failure_experiment.py
similarity index 97%
rename from ndn/experiments/failure_experiment.py
rename to ndn/experiments/nlsr/failure_experiment.py
index a27b0a6..783bac4 100644
--- a/ndn/experiments/failure_experiment.py
+++ b/ndn/experiments/nlsr/failure_experiment.py
@@ -22,7 +22,6 @@
 # If not, see <http://www.gnu.org/licenses/>.
 
 from ndn.experiments.experiment import Experiment
-from ndn.nlsr import Nlsr
 from ndn.apps.ndn_ping_client import NDNPingClient
 
 import time
@@ -30,7 +29,7 @@
 class FailureExperiment(Experiment):
 
     def __init__(self, args):
-        args["nPings"] = 300
+        args["options"].nPings = 300
         Experiment.__init__(self, args)
 
         self.PING_COLLECTION_TIME_BEFORE_FAILURE = 60
diff --git a/ndn/experiments/mcn_failure_experiment.py b/ndn/experiments/nlsr/mcn_failure_experiment.py
similarity index 66%
rename from ndn/experiments/mcn_failure_experiment.py
rename to ndn/experiments/nlsr/mcn_failure_experiment.py
index 62bdcab..cd448cc 100644
--- a/ndn/experiments/mcn_failure_experiment.py
+++ b/ndn/experiments/nlsr/mcn_failure_experiment.py
@@ -29,7 +29,6 @@
 class MCNFailureExperiment(Experiment):
 
     def __init__(self, args):
-        args["nPings"] = 300
         Experiment.__init__(self, args)
 
         self.PING_COLLECTION_TIME_BEFORE_FAILURE = 60
@@ -37,13 +36,18 @@
 
     def getMostConnectedNode(self):
         mcn = max(self.net.hosts, key=lambda host: len(host.intfNames()))
-        print "The most connected node is: %s" % mcn.name
+        print "The most connected node is: {}".format(mcn.name)
         return mcn
 
+    def setup(self):
+        if self.options.nPings != 0:
+            Experiment.setup(self)
+
     def run(self):
         mostConnectedNode = self.getMostConnectedNode()
 
-        self.startPctPings()
+        if self.options.nPings != 0:
+            self.startPctPings()
 
         # After the pings are scheduled, collect pings for 1 minute
         time.sleep(self.PING_COLLECTION_TIME_BEFORE_FAILURE)
@@ -52,16 +56,24 @@
         self.failNode(mostConnectedNode)
 
         # MCN is down for 2 minutes
-        time.sleep(120)
+        time.sleep(int(self.options.arguments.waitTime))
 
         # Bring MCN back up
         self.recoverNode(mostConnectedNode)
 
         # Restart pings
-        for nodeToPing in self.pingedDict[mostConnectedNode]:
-            NDNPingClient.ping(mostConnectedNode, nodeToPing, self.PING_COLLECTION_TIME_AFTER_RECOVERY)
+        if self.options.nPings != 0:
+            for nodeToPing in self.pingedDict[mostConnectedNode]:
+                 NDNPingClient.ping(mostConnectedNode, nodeToPing, self.PING_COLLECTION_TIME_AFTER_RECOVERY)
 
-        # Collect pings for more seconds after MCN is up
-        time.sleep(self.PING_COLLECTION_TIME_AFTER_RECOVERY)
+            # Collect pings for more seconds after MCN is up
+            time.sleep(self.PING_COLLECTION_TIME_AFTER_RECOVERY)
+        else:
+            self.checkConvergence()
 
-Experiment.register("failure-mcn", MCNFailureExperiment)
+    @staticmethod
+    def parseArguments(parser):
+        parser.add_argument("--wait-time", dest="waitTime", default="120",
+                            help="[Experiment] Generic wait time for experiment use")
+
+Experiment.register("mcn-failure", MCNFailureExperiment)
diff --git a/ndn/experiments/multiple_failure_experiment.py b/ndn/experiments/nlsr/multiple_failure_experiment.py
similarity index 89%
rename from ndn/experiments/multiple_failure_experiment.py
rename to ndn/experiments/nlsr/multiple_failure_experiment.py
index 6b4ce6b..efbba60 100644
--- a/ndn/experiments/multiple_failure_experiment.py
+++ b/ndn/experiments/nlsr/multiple_failure_experiment.py
@@ -22,7 +22,6 @@
 # If not, see <http://www.gnu.org/licenses/>.
 
 from ndn.experiments.experiment import Experiment
-from ndn.nlsr import Nlsr
 from ndn.apps.ndn_ping_client import NDNPingClient
 
 import time
@@ -38,12 +37,11 @@
 
         # This is the number of pings required to make it through the full experiment
         nInitialPings = (self.PING_COLLECTION_TIME_BEFORE_FAILURE +
-                         len(args["net"].hosts)*(self.FAILURE_INTERVAL + self.RECOVERY_INTERVAL))
-        print("Scheduling with %s initial pings" % nInitialPings)
-
-        args["nPings"] = nInitialPings
+                         len(args["net"].hosts) * (self.FAILURE_INTERVAL + self.RECOVERY_INTERVAL))
+        print("Scheduling with {} initial pings".format(nInitialPings))
 
         Experiment.__init__(self, args)
+        self.options.nPings = nInitialPings
 
     def run(self):
         self.startPctPings()
@@ -71,7 +69,7 @@
             nPings = ((self.RECOVERY_INTERVAL - recovery_time) +
                       nNodesRemainingToFail*(self.FAILURE_INTERVAL + self.RECOVERY_INTERVAL))
 
-            print("Scheduling with %s remaining pings" % nPings)
+            print("Scheduling with {} remaining pings".format(nPings))
 
             # Restart pings
             for nodeToPing in self.pingedDict[host]:
diff --git a/ndn/experiments/pingall_experiment.py b/ndn/experiments/nlsr/pingall_experiment.py
similarity index 82%
rename from ndn/experiments/pingall_experiment.py
rename to ndn/experiments/nlsr/pingall_experiment.py
index cad27e2..56a70bd 100644
--- a/ndn/experiments/pingall_experiment.py
+++ b/ndn/experiments/nlsr/pingall_experiment.py
@@ -31,12 +31,19 @@
 
         Experiment.__init__(self, args)
         self.COLLECTION_PERIOD_BUFFER = 10
-        print "Using %f traffic" % self.pctTraffic
+        print "Using {} traffic".format(self.options.pctTraffic)
+
+    def setup(self):
+        if self.options.nPings != 0:
+            Experiment.setup(self)
 
     def run(self):
+        if self.options.nPings == 0:
+            return
+
         self.startPctPings()
 
         # For pingall experiment sleep for the number of pings + some offset
-        time.sleep(self.nPings + self.COLLECTION_PERIOD_BUFFER)
+        time.sleep(self.options.nPings + self.COLLECTION_PERIOD_BUFFER)
 
 Experiment.register("pingall", PingallExperiment)
diff --git a/ndn/experiments/prefix_propogation.py b/ndn/experiments/nlsr/prefix_propogation.py
similarity index 98%
rename from ndn/experiments/prefix_propogation.py
rename to ndn/experiments/nlsr/prefix_propogation.py
index a4f83b3..ae8301a 100644
--- a/ndn/experiments/prefix_propogation.py
+++ b/ndn/experiments/nlsr/prefix_propogation.py
@@ -36,7 +36,7 @@
     def run(self):
         firstNode = self.net.hosts[0]
 
-        if self.nlsrSecurity:
+        if self.options.nlsrSecurity:
             firstNode.cmd("ndnsec-set-default /ndn/{}-site/%C1.Operator/op".format(firstNode.name))
 
         print("Testing advertise")
diff --git a/ndn/util.py b/ndn/util.py
index 159a8e8..0398453 100644
--- a/ndn/util.py
+++ b/ndn/util.py
@@ -55,3 +55,28 @@
     prompt = 'mini-ndn> '
     def __init__(self, mininet, stdin=sys.stdin, script=None):
         CLI.__init__(self, mininet, stdin=sys.stdin, script=None)
+
+class ProgramOptions:
+    def __init__(self):
+        self.ctime = 60
+        self.experimentName = None
+        self.nFaces = 3
+        self.templateFile = "minindn.conf"
+        self.routingType = "link-state"
+        self.isNlsrEnabled = True
+        self.isCliEnabled = True
+        self.nlsrSecurity = False
+        self.nPings = 300
+        self.testbed = False
+        self.workDir = "/tmp/minindn"
+        self.resultDir = None
+        self.pctTraffic = 1.0
+        self.cluster = None
+        self.servers = None
+        self.guided = None
+        self.placer = None
+        self.tunnelType = None
+        self.faceType = "udp"
+        self.arguments = None
+        self.csSize = 65536
+        self.strategy = "best-route"
\ No newline at end of file
diff --git a/topologies/current-testbed.conf b/topologies/current-testbed.conf
new file mode 100644
index 0000000..32669f9
--- /dev/null
+++ b/topologies/current-testbed.conf
@@ -0,0 +1,161 @@
+[nodes]
+afa: _ radius=10.3354428445 angle=1.12640207075
+anyang: _ radius=14.3378634978 angle=2.99956859362
+arizona: _ radius=16.2305391314 angle=2.97033285094
+basel: _ radius=13.2717666497 angle=2.41932
+bern: _ radius=13.2717666497 angle=2.42933
+bupt: _ radius=29.2553552716 angle=3.07635893011
+byu: _ radius=19.3538454318 angle=3.77334112453
+cagliari: _ radius=13.5903793307 angle=1.1403443
+caida: _ radius=17.6030443241 angle=2.94302721088
+caruna: _ radius=13.6888312672 angle=1.172
+cnic: _ radius=13.0513265591 angle=2.87446074202
+copelabs: _ radius=16.206035855 angle=2.62082
+csu: _ radius=14.1056931988 angle=2.99266609146
+goettingen: _ radius=12.2349274272 angle=2.4715271786
+indonesia: _ radius=29.2553552716 angle=2.75021570319
+kisti: _ radius=11.5531281288 angle=2.98403796376
+lip6: _ radius=29.2553552716 angle=2.62295081967
+memphis: _ radius=15.264773513 angle=2.98360655738
+michigan: _ radius=17.7738038607 angle=2.98018269082
+minho: _ radius=16.206035855 angle=2.631
+msu: _ radius=19.6533436173 angle=3.64135462555
+mumbai_aws: _ radius=12.8934676597 angle=2.95081967213
+neu: _ radius=19.9001283692 angle=2.13894230769
+nist: _ radius=13.4257788269 angle=2.97670405522
+ntnu: _ radius=12.0281644432 angle=3.11561691113
+osaka: _ radius=19.3573834399 angle=3.53687143598
+padua: _ radius=13.5903793307 angle=1.1393442623
+pkusz: _ radius=11.1495655496 angle=2.87016
+remap: _ radius=16.5866430024 angle=2.99811
+srru: _ radius=12.8769009681 angle=3.63761863676
+systemx: _ radius=19.1697680538 angle=2.62274588692
+tno: _ radius=12.0148443703 angle=2.4603106126
+tongji: _ radius=11.1495655496 angle=2.87015
+uaslp: _ radius=19.0473935894 angle=2.96488127257
+uci: _ radius=19.2697694366 angle=2.94186046512
+ucla: _ radius=16.5866430024 angle=2.999107674
+ufpa: _ radius=29.2553552716 angle=3.51898188093
+uiuc: _ radius=29.2553552716 angle=2.98231233822
+urjc: _ radius=13.6888312672 angle=1.17169974116
+uum: _ radius=14.8351249127 angle=3.44434857636
+waseda: _ radius=19.3583257472 angle=2.99935233161
+wu: _ radius=19.4268485719 angle=4.31067173954
+[links]
+afa:mumbai_aws delay=100ms
+afa:bern delay=15ms
+afa:cagliari delay=25ms
+afa:padua delay=11ms
+afa:copelabs delay=36ms
+anyang:tongji delay=54ms
+anyang:srru delay=57ms
+anyang:msu delay=70ms
+anyang:bupt delay=33ms
+anyang:kisti delay=40ms
+anyang:waseda delay=40ms
+anyang:osaka delay=36ms
+arizona:caida delay=25ms
+arizona:remap delay=25ms
+arizona:waseda delay=75ms
+arizona:byu delay=30ms
+arizona:uaslp delay=100ms
+arizona:wu delay=33ms
+arizona:csu delay=18ms
+arizona:memphis delay=17ms
+basel:urjc delay=14ms
+basel:minho delay=23ms
+basel:ntnu delay=30ms
+basel:padua delay=9ms
+basel:lip6 delay=7ms
+basel:goettingen delay=10ms
+basel:bern delay=2ms
+basel:tno delay=14ms
+basel:systemx delay=9ms
+bern:lip6 delay=18ms
+bupt:pkusz delay=54ms
+bupt:waseda delay=48ms
+bupt:tongji delay=18ms
+bupt:srru delay=72ms
+bupt:indonesia delay=54ms
+bupt:kisti delay=33ms
+bupt:cnic delay=10ms
+byu:csu delay=8ms
+byu:remap delay=9ms
+cagliari:urjc delay=28ms
+cagliari:caruna delay=40ms
+cagliari:padua delay=25ms
+cagliari:wu delay=100ms
+caida:ufpa delay=155ms
+caida:ucla delay=3ms
+caida:uci delay=3ms
+caida:tongji delay=93ms
+caruna:urjc delay=17ms
+caruna:minho delay=27ms
+cnic:pkusz delay=20ms
+cnic:osaka delay=45ms
+copelabs:urjc delay=13ms
+copelabs:minho delay=4ms
+copelabs:padua delay=24ms
+copelabs:lip6 delay=22ms
+copelabs:ufpa delay=145ms
+csu:remap delay=16ms
+csu:kisti delay=106ms
+csu:michigan delay=15ms
+csu:ucla delay=16ms
+csu:uiuc delay=14ms
+goettingen:osaka delay=136ms
+goettingen:ntnu delay=40ms
+goettingen:padua delay=14ms
+goettingen:tno delay=12ms
+goettingen:systemx delay=10ms
+indonesia:waseda delay=49ms
+indonesia:tongji delay=61ms
+indonesia:srru delay=32ms
+indonesia:uum delay=100ms
+indonesia:kisti delay=150ms
+indonesia:ufpa delay=200ms
+kisti:waseda delay=39ms
+lip6:urjc delay=15ms
+lip6:michigan delay=69ms
+lip6:ntnu delay=25ms
+lip6:tno delay=9ms
+lip6:systemx delay=1ms
+memphis:michigan delay=12ms
+memphis:uaslp delay=100ms
+memphis:wu delay=17ms
+memphis:ufpa delay=115ms
+memphis:neu delay=21ms
+michigan:uiuc delay=5ms
+michigan:neu delay=14ms
+michigan:nist delay=13ms
+minho:urjc delay=13ms
+minho:padua delay=26ms
+msu:pkusz delay=71ms
+msu:srru delay=3ms
+msu:ucla delay=150ms
+msu:uum delay=100ms
+msu:tno delay=120ms
+mumbai_aws:uum delay=100ms
+neu:ntnu delay=69ms
+neu:nist delay=12ms
+nist:uiuc delay=12ms
+ntnu:systemx delay=24ms
+osaka:pkusz delay=63ms
+osaka:waseda delay=5ms
+osaka:srru delay=67ms
+osaka:tongji delay=63ms
+osaka:uum delay=100ms
+padua:urjc delay=15ms
+padua:pkusz delay=170ms
+padua:uiuc delay=80ms
+pkusz:tongji delay=54ms
+pkusz:srru delay=71ms
+pkusz:waseda delay=98ms
+remap:ucla delay=1ms
+remap:uci delay=1ms
+srru:uum delay=100ms
+tongji:waseda delay=98ms
+uaslp:ufpa delay=100ms
+uci:ucla delay=1ms
+uiuc:wu delay=9ms
+urjc:wu delay=86ms
