diff --git a/ndn/experiments/experiment.py b/ndn/experiments/experiment.py
index e7b713a..e70c02c 100644
--- a/ndn/experiments/experiment.py
+++ b/ndn/experiments/experiment.py
@@ -48,10 +48,10 @@
     def setup(self):
         for host in self.net.hosts:
             # Set strategy
-            host.nfd.setStrategy("/ndn/edu", self.strategy)
+            host.nfd.setStrategy("/ndn/", self.strategy)
 
             # Start ping server
-            host.cmd("ndnpingserver /ndn/edu/" + str(host) + " > ping-server &")
+            host.cmd("ndnpingserver /ndn/" + str(host) + "-site/" + str(host) + " > ping-server &")
 
             # Create folder to store ping data
             host.cmd("mkdir ping-data")
@@ -66,16 +66,14 @@
 
         # Checking for convergence
         for host in self.net.hosts:
-            statusRouter = host.cmd("nfd-status -b | grep /ndn/edu/%C1.Router/cs/")
-            statusPrefix = host.cmd("nfd-status -b | grep /ndn/edu/")
+            statusRouter = host.cmd("nfd-status -b | grep site/%C1.Router/cs/")
+            statusPrefix = host.cmd("nfd-status -b | grep ndn | grep site | grep -v Router")
             didNodeConverge = True
             for node in self.nodes.split(","):
-                    if ("/ndn/edu/%C1.Router/cs/" + node) not in statusRouter:
-                        didNodeConverge = False
-                        didNlsrConverge = False
-                    if str(host) != node and ("/ndn/edu/" + node) not in statusPrefix:
-                        didNodeConverge = False
-                        didNlsrConverge = False
+                if ( ("/ndn/" + node + "-site/%C1.Router/cs/" + node) not in statusRouter or
+                      str(host) != node and ("/ndn/" + node + "-site/" + node) not in statusPrefix ):
+                    didNodeConverge = False
+                    didNlsrConverge = False
 
             host.cmd("echo " + str(didNodeConverge) + " > convergence-result &")
 
@@ -89,7 +87,7 @@
     def ping(self, source, dest, nPings):
         # Use "&" to run in background and perform parallel pings
         print "Scheduling ping(s) from %s to %s" % (source.name, dest.name)
-        source.cmd("ndnping -t -c "+ str(nPings) + " /ndn/edu/" + dest.name + " >> ping-data/" + dest.name + ".txt &")
+        source.cmd("ndnping -t -c "+ str(nPings) + " /ndn/" + dest.name + "-site/" + dest.name + " >> ping-data/" + dest.name + ".txt &")
         time.sleep(0.2)
 
     def startPings(self):
@@ -107,8 +105,8 @@
         print("Bringing %s up" % host.name)
         host.nfd.start()
         host.nlsr.start()
-        host.nfd.setStrategy("/ndn/edu", self.strategy)
-        host.cmd("ndnpingserver /ndn/edu/" + str(host) + " > ping-server &")
+        host.nfd.setStrategy("/ndn/", self.strategy)
+        host.cmd("ndnpingserver /ndn/" + str(host) + "-site/" + str(host) + " > ping-server &")
 
     def startPctPings(self):
         nNodesToPing = int(round(len(self.net.hosts)*self.pctTraffic))
@@ -143,4 +141,3 @@
     @staticmethod
     def register(name, experimentClass):
         ExperimentManager.register(name, experimentClass)
-
diff --git a/ndn/nfd.py b/ndn/nfd.py
index 8e39a39..d779a69 100644
--- a/ndn/nfd.py
+++ b/ndn/nfd.py
@@ -59,7 +59,7 @@
         node.cmd("export HOME=%s" % node.homeFolder)
 
     def start(self):
-        NdnApplication.start(self, "nfd --config %s 2>> %s &" % (self.confFile, self.logFile))
+        NdnApplication.start(self, "nfd --config %s >> %s 2>&1 &" % (self.confFile, self.logFile))
         time.sleep(2)
 
     def setStrategy(self, name, strategy):
diff --git a/ndn/nlsr.py b/ndn/nlsr.py
index 6033b38..43176b4 100644
--- a/ndn/nlsr.py
+++ b/ndn/nlsr.py
@@ -39,13 +39,9 @@
         self.logDir = "%s/log" % node.homeFolder
         node.cmd("mkdir %s" % self.logDir)
 
-        # Configure basic router information in nlsr.conf based on host name
-        node.cmd("sudo sed -i 's|router .*|router %s|g' %s" % (self.routerName, self.confFile))
-        node.cmd("sudo sed -i 's|log-dir .*|log-dir %s|g' %s" % (self.logDir, self.confFile))
-        node.cmd("sudo sed -i 's|seq-dir .*|seq-dir %s|g' %s" % (self.logDir, self.confFile))
-        node.cmd("sudo sed -i 's|prefix .*netlab|prefix /ndn/edu/%s|g' %s" % (node.name, self.confFile))
-
     def start(self):
+        # Removed & at the end, was giving key not found error
+        # This way NLSR is daemonized fully before continuing
         NdnApplication.start(self, "nlsr -d -f {}".format(self.confFile))
 
     @staticmethod
@@ -81,7 +77,7 @@
             shutil.copyfile("{}/root.cert".format(securityDir), "{}/root.cert".format(nodeSecurityFolder))
 
             # Create site certificate
-            siteName = "/ndn/edu"
+            siteName = "ndn/{}-site".format(host.name)
             siteKeyFile = "{}/site.keys".format(nodeSecurityFolder)
             siteCertFile = "{}/site.cert".format(nodeSecurityFolder)
             Nlsr.createKey(host, siteName, siteKeyFile)
@@ -157,7 +153,7 @@
         general =  "general\n"
         general += "{\n"
         general += "  network /ndn/\n"
-        general += "  site /edu\n"
+        general += "  site /{}-site\n".format(self.node.name)
         general += "  router /%C1.Router/cs/" + self.node.name + "\n"
         general += "  log-level " + self.logLevel + "\n"
         general += "  log-dir " + self.node.homeFolder + "/log\n"
@@ -187,7 +183,7 @@
 
                 neighbors += "neighbor\n"
                 neighbors += "{\n"
-                neighbors += "  name /ndn/edu/%C1.Router/cs/" + other.name + "\n"
+                neighbors += "  name /ndn/" + other.name + "-site/%C1.Router/cs/" + other.name + "\n"
                 neighbors += "  face-uri udp://" + str(ip) + "\n"
                 neighbors += "  link-cost " + linkCost + "\n"
                 neighbors += "}\n"
@@ -220,7 +216,7 @@
 
         advertising =  "advertising\n"
         advertising += "{\n"
-        advertising += "  prefix /ndn/edu/" + self.node.name + "\n"
+        advertising += "  prefix /ndn/" + self.node.name + "-site/" + self.node.name + "\n"
         advertising += "}\n"
 
         return advertising
