diff --git a/ndn/gui.py b/ndn/gui.py
new file mode 100644
index 0000000..c4097e4
--- /dev/null
+++ b/ndn/gui.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+
+from Tkinter import *
+
+LOG_LEVELS = [
+    "NONE",
+    "ERROR",
+    "WARN",
+    "INFO",
+    "DEBUG",
+    "TRACE",
+    "ALL"
+]
+
+class GuiFrame(Frame):
+    def __init__(self, notebook):
+        Frame.__init__(self, notebook)
+
+        self.row = 0
+        self.column = 0
+
+    def addEntryBox(self, label, variable, defaultValue=""):
+        variable.set(defaultValue)
+
+        Label(self, text=label).grid(row=self.row, sticky=E)
+        entry = Entry(self, textvariable=variable)
+        entry.grid(row=self.row, column=1)
+
+        self.row += 1
+
+    def addDropDown(self, label, variable, values, defaultValue=""):
+        variable.set(defaultValue)
+
+        Label(self, text=label).grid(row=self.row, sticky=E)
+
+        self.entry = apply(OptionMenu, (self, variable) + tuple(values))
+        self.entry.grid(row=self.row, column=1)
+
+        self.row += 1
+
+class NfdFrame(GuiFrame):
+    def __init__(self, notebook):
+        GuiFrame.__init__(self, notebook)
+
+        self.frameLabel = "NFD"
+
+        # log-level
+        self.logLevel = StringVar(self)
+        self.addDropDown("Log level:", self.logLevel, LOG_LEVELS, LOG_LEVELS[3])
+
+class NlsrFrame(GuiFrame):
+
+    HYPERBOLIC_STATES = [
+        "off",
+        "on",
+        "dry-run"
+    ]
+
+    def __init__(self, notebook):
+        GuiFrame.__init__(self, notebook)
+
+        self.frameLabel = "NLSR"
+
+        # general: network
+        self.network = StringVar(self)
+        self.addEntryBox("Network:", self.network, "/ndn/")
+
+        # general: site
+        self.site = StringVar(self)
+        self.addEntryBox("Site:", self.site, "/edu/site")
+
+        # general: router
+        self.router = StringVar(self)
+        self.addEntryBox("Router:", self.router, "/%C1.Router/cs/host")
+
+        # general: log-level
+        self.logLevel = StringVar(self)
+        self.addDropDown("Log level:", self.logLevel, LOG_LEVELS, LOG_LEVELS[3])
+
+        # hyperbolic: state
+        self.hyperbolicState = StringVar(self)
+        self.addDropDown("Hyperbolic routing:", self.hyperbolicState,
+                         self.HYPERBOLIC_STATES, self.HYPERBOLIC_STATES[0])
+
+        # hyperbolic: angle
+        self.angle = StringVar(self)
+        self.addEntryBox("Angle:", self.angle, "0.0")
+
+        # hyperbolic: radius
+        self.radius = StringVar(self)
+        self.addEntryBox("Radius:", self.radius, "0.0")
+
+        # fib: max-faces-per-prefix
+        self.maxFaces = StringVar(self)
+        self.addEntryBox("Max faces per prefix:", self.maxFaces, "0")
+
+
+    def getValues(self):
+        return {
+            "network": self.network.get(),
+            "site": self.site.get(),
+            "router": self.router.get(),
+            "log-level": self.logLevel.get(),
+            "hyperbolic-state": self.hyperbolicState.get(),
+            "angle": self.angle.get(),
+            "radius": self.radius.get(),
+            "max-faces-per-prefix": self.maxFaces.get()
+        }
+
diff --git a/ndn/nlsr.py b/ndn/nlsr.py
index 03719e5..cda91ea 100644
--- a/ndn/nlsr.py
+++ b/ndn/nlsr.py
@@ -113,7 +113,7 @@
                     other = node1
                     ip = other.IP(str(link.intf1))
 
-                linkCost = intf.params.get("delay", "0ms").replace("ms", "")
+                linkCost = intf.params.get("delay", "10ms").replace("ms", "")
 
                 neighbors += "neighbor\n"
                 neighbors += "{\n"
