diff --git a/bin/minindnedit b/bin/minindnedit
index bb6e030..8e945a4 100755
--- a/bin/minindnedit
+++ b/bin/minindnedit
@@ -151,8 +151,8 @@
             self.fibFrame = Frame(n)
 
             # NDN
-            self.nfdFrame = NfdFrame(n)
-            self.nlsrFrame = NlsrFrame(n)
+            self.nfdFrame = NfdFrame(n, self.prefValues)
+            self.nlsrFrame = NlsrFrame(n,self.prefValues)
 
             n.add(self.propFrame, text='Properties')
             n.add(self.fibFrame, text='FIB Entries')
@@ -849,7 +849,7 @@
         loadedTopology = self.convertJsonUnicode(json.load(f))
 
         # Load hosts
-        hosts = loadedTopology['nodes']
+        hosts = loadedTopology['hosts']
         for host in hosts:
             nodeNum = host['number']
             hostname = 'h'+nodeNum
@@ -859,6 +859,7 @@
                 host['opts']['hostname'] = hostname
             if 'nodeNum' not in host['opts']:
                 host['opts']['nodeNum'] = int(nodeNum)
+
             x = host['x']
             y = host['y']
 
diff --git a/ndn/gui.py b/ndn/gui.py
index 653dbbc..a0b33ab 100644
--- a/ndn/gui.py
+++ b/ndn/gui.py
@@ -13,9 +13,12 @@
 ]
 
 class GuiFrame(Frame):
-    def __init__(self, notebook):
+    def __init__(self, notebook, prefValues, appId):
         Frame.__init__(self, notebook)
 
+        self.prefValues = prefValues
+        self.appId = appId
+
         self.row = 0
         self.column = 0
 
@@ -38,22 +41,30 @@
 
         self.row += 1
 
+    def getPreferredOrDefaultValue(self, key, defaultValue):
+        if self.appId in self.prefValues:
+            return self.prefValues[self.appId][key]
+        else:
+            return defaultValue
+
 class NfdFrame(GuiFrame):
-    def __init__(self, notebook):
-        GuiFrame.__init__(self, notebook)
+    def __init__(self, notebook, prefValues):
+        GuiFrame.__init__(self, notebook, prefValues, "nfd")
 
         self.frameLabel = "NFD"
 
         # log-level
         self.logLevel = StringVar(self)
-        self.addDropDown("Log level:", self.logLevel, LOG_LEVELS, LOG_LEVELS[3])
+        self.addDropDown("Log level:",
+                         self.logLevel,
+                         LOG_LEVELS,
+                         self.getPreferredOrDefaultValue("log-level", LOG_LEVELS[3]))
 
     def getValues(self):
         return {
             "log-level": self.logLevel.get()
         }
 
-
 class NlsrFrame(GuiFrame):
 
     HYPERBOLIC_STATES = [
@@ -62,44 +73,54 @@
         "dry-run"
     ]
 
-    def __init__(self, notebook):
-        GuiFrame.__init__(self, notebook)
+    def __init__(self, notebook, prefValues):
+        GuiFrame.__init__(self, notebook, prefValues, "nlsr")
 
         self.frameLabel = "NLSR"
 
         # general: network
         self.network = StringVar(self)
-        self.addEntryBox("Network:", self.network, "/ndn/")
+        self.addEntryBox("Network:",
+                         self.network,
+                         self.getPreferredOrDefaultValue("network", "/ndn"))
 
         # general: site
         self.site = StringVar(self)
-        self.addEntryBox("Site:", self.site, "/edu/site")
+        self.addEntryBox("Site:", self.site, self.getPreferredOrDefaultValue("site", "/edu/site"))
 
         # general: router
         self.router = StringVar(self)
-        self.addEntryBox("Router:", self.router, "/%C1.Router/cs/host")
+        self.addEntryBox("Router:",
+                         self.router,
+                         self.getPreferredOrDefaultValue("router", "/%C1.Router/cs/host"))
 
         # general: log-level
         self.logLevel = StringVar(self)
-        self.addDropDown("Log level:", self.logLevel, LOG_LEVELS, LOG_LEVELS[3])
+        self.addDropDown("Log level:",
+                         self.logLevel,
+                         LOG_LEVELS,
+                         self.getPreferredOrDefaultValue("log-level", LOG_LEVELS[3]))
 
         # hyperbolic: state
         self.hyperbolicState = StringVar(self)
-        self.addDropDown("Hyperbolic routing:", self.hyperbolicState,
-                         self.HYPERBOLIC_STATES, self.HYPERBOLIC_STATES[0])
+        self.addDropDown("Hyperbolic routing:",
+                         self.hyperbolicState,
+                         self.HYPERBOLIC_STATES,
+                         self.getPreferredOrDefaultValue("hyperbolic-state", self.HYPERBOLIC_STATES[0]))
 
         # hyperbolic: angle
         self.angle = StringVar(self)
-        self.addEntryBox("Angle:", self.angle, "0.0")
+        self.addEntryBox("Angle:", self.angle, self.getPreferredOrDefaultValue("angle", "0.0"))
 
         # hyperbolic: radius
         self.radius = StringVar(self)
-        self.addEntryBox("Radius:", self.radius, "0.0")
+        self.addEntryBox("Radius:", self.radius, self.getPreferredOrDefaultValue("radius", "0.0"))
 
         # fib: max-faces-per-prefix
         self.maxFaces = StringVar(self)
-        self.addEntryBox("Max faces per prefix:", self.maxFaces, "0")
-
+        self.addEntryBox("Max faces per prefix:",
+                         self.maxFaces,
+                         self.getPreferredOrDefaultValue("max-faces-per-prefix", "0"))
 
     def getValues(self):
         return {
