diff --git a/ndn/apps/nfdc.py b/ndn/apps/nfdc.py
new file mode 100644
index 0000000..2d38530
--- /dev/null
+++ b/ndn/apps/nfdc.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/>.
+
+import time
+
+class Nfdc:
+    STRATEGY_ASF = "asf"
+    STRATEGY_BEST_ROUTE = "best-route"
+    STRATEGY_MULTICAST = "multicast"
+    STRATEGY_NCC = "ncc"
+
+    @staticmethod
+    def registerRoute(node, namePrefix, remoteNode, origin=255, cost=0,
+                      inheritFlag=True, captureFlag=False, expirationInMillis=0):
+        node.cmd("nfdc route add {} {} {} {} {}{}{}").format(
+            namePrefix,
+            remoteNode,
+            origin,
+            cost,
+            "no-inherit " if not inheritFlag else "",
+            "capture " if captureFlag else "",
+            "expires {}".format(expirationInMillis)
+        )
+        time.sleep(0.5)
+
+    @staticmethod
+    def unregisterRoute(node, namePrefix, remoteNode, origin=255):
+        node.cmd("nfdc route remove {} {} {}".format(namePrefix, remoteNode, origin))
+        time.sleep(0.5)
+
+    @staticmethod
+    def createFace(node, remoteNode, protocol="udp", isPermanent=False):
+        node.cmd("nfdc face create {}://{} {}".format(
+            protocol,
+            remoteNode,
+            "permanent" if isPermanent else "persistent"
+        ))
+        time.sleep(0.5)
+
+    @staticmethod
+    def destroyFace(node, remoteNode, protocol="udp"):
+        node.cmd("nfdc face destroy {}://{}".format(protocol, remoteNode))
+        time.sleep(0.5)
+
+    @staticmethod
+    def setStrategy(node, namePrefix, strategy):
+        node.cmd("nfdc strategy set {} ndn:/localhost/nfd/strategy/{}".format(namePrefix, strategy))
+        time.sleep(0.5)
+
+    @staticmethod
+    def unsetStrategy(node, namePrefix):
+        node.cmd("nfdc strategy unset {}".format(namePrefix))
+        time.sleep(0.5)
\ No newline at end of file
diff --git a/ndn/experiments/experiment.py b/ndn/experiments/experiment.py
index fa76370..347655d 100644
--- a/ndn/experiments/experiment.py
+++ b/ndn/experiments/experiment.py
@@ -27,6 +27,7 @@
 from itertools import cycle
 
 from ndn import ExperimentManager
+from ndn.apps.nfdc import Nfdc
 
 class Experiment:
 
@@ -49,10 +50,10 @@
     def setup(self):
         for host in self.net.hosts:
             # Set strategy
-            host.nfd.setStrategy("/ndn/", self.strategy)
+            Nfdc.setStrategy(host, "/ndn/", self.strategy)
 
             # Start ping server
-            host.cmd("ndnpingserver /ndn/" + str(host) + "-site/" + str(host) + " > ping-server &")
+            host.cmd("ndnpingserver /ndn/{}-site/{} > ping-server &".format(host, host))
 
             # Create folder to store ping data
             host.cmd("mkdir ping-data")
@@ -108,8 +109,8 @@
         host.nfd.start()
         host.nlsr.createFaces()
         host.nlsr.start()
-        host.nfd.setStrategy("/ndn/", self.strategy)
-        host.cmd("ndnpingserver /ndn/" + str(host) + "-site/" + str(host) + " > ping-server &")
+        Nfdc.setStrategy(host, "/ndn/", self.strategy)
+        host.cmd("ndnpingserver /ndn/{}-site/{} > ping-server &".format(host, host))
 
     def startPctPings(self):
         nNodesToPing = int(round(len(self.net.hosts)*self.pctTraffic))
diff --git a/ndn/nfd.py b/ndn/nfd.py
index 0368523..eb8cb34 100644
--- a/ndn/nfd.py
+++ b/ndn/nfd.py
@@ -26,8 +26,6 @@
 from ndn.util import copyExistentFile
 
 class Nfd(NdnApplication):
-    STRATEGY_BEST_ROUTE = "best-route"
-    STRATEGY_NCC = "ncc"
 
     def __init__(self, node, csSize):
         NdnApplication.__init__(self, node)
@@ -71,7 +69,3 @@
     def start(self):
         NdnApplication.start(self, "setsid nfd --config {} > {} 2>&1 &".format(self.confFile, self.logFile))
         time.sleep(2)
-
-    def setStrategy(self, name, strategy):
-        self.node.cmd("nfdc strategy set {} ndn:/localhost/nfd/strategy/{}".format(name, strategy))
-        time.sleep(0.5)
\ No newline at end of file
diff --git a/ndn/nlsr.py b/ndn/nlsr.py
index b6a6009..98efc78 100644
--- a/ndn/nlsr.py
+++ b/ndn/nlsr.py
@@ -26,6 +26,7 @@
 
 from ndn.ndn_application import NdnApplication
 from ndn.util import ssh, scp, copyExistentFile
+from apps.nfdc import Nfdc
 
 import shutil
 import os
@@ -41,8 +42,8 @@
         self.node = node
         self.neighbors = neighbors
         self.faceType = faceType
-        self.routerName = "/%sC1.Router/cs/%s" % ('%', node.name)
-        self.confFile = "%s/nlsr.conf" % node.homeFolder
+        self.routerName = "/{}C1.Router/cs/{}".format('%', node.name)
+        self.confFile = "{}/nlsr.conf".format(node.homeFolder)
 
         # Make directory for log file
         self.logDir = "{}/log".format(node.homeFolder)
@@ -58,7 +59,7 @@
 
     def createFaces(self):
         for ip in self.neighbors:
-            self.node.cmd("nfdc face create {}://{} permanent".format(self.faceType, ip))
+            Nfdc.createFace(self.node, ip, self.faceType, isPermanent=True)
 
     @staticmethod
     def createKey(host, name, outputFile):
