diff --git a/mininet/conf_parser.py b/mininet/conf_parser.py
index 2e8014c..f241e88 100644
--- a/mininet/conf_parser.py
+++ b/mininet/conf_parser.py
@@ -2,15 +2,16 @@
 
 class confCCNHost():
 
-    def __init__(self, name, app='', uri_tuples='', cpu=None, cores=None):
+    def __init__(self, name, app='', uri_tuples='', cpu=None, cores=None, cache=None):
         self.name = name
         self.app = app
         self.uri_tuples = uri_tuples
         self.cpu = cpu
         self.cores = cores
+	self.cache = cache
 
     def __repr__(self):
-        return 'Name: ' + self.name + ' App: ' + self.app + ' URIS: ' + str(self.uri_tuples) + ' CPU:' + str(self.cpu) + ' Cores:' +str(self.cores)
+        return 'Name: ' + self.name + ' App: ' + self.app + ' URIS: ' + str(self.uri_tuples) + ' CPU:' + str(self.cpu) + ' Cores:' +str(self.cores) + ' Cache: ' + str(self.cache)
 
 class confCCNLink():
 
@@ -29,7 +30,7 @@
 
     hosts = []
 
-    items = config.items('hosts')
+    items = config.items('nodes')
 
     for item in items:
 
@@ -43,16 +44,19 @@
         uri_list=[]
         cpu = None
         cores = None
+	cache = None
 
         for uri in uris:
             if re.match("cpu",uri):
                 cpu = float(uri.split('=')[1])
             elif re.match("cores",uri):
                 cores = uri.split('=')[1]
+	    elif re.match("cache",uri):
+		cache = uri.split('=')[1]
             else:
                 uri_list.append((uri.split(',')[0],uri.split(',')[1]))
 
-        hosts.append(confCCNHost(name , app, uri_list,cpu,cores))
+        hosts.append(confCCNHost(name , app, uri_list,cpu,cores,cache))
 
     return hosts
 
diff --git a/mininet/node.py b/mininet/node.py
index 7f3c4c7..281839a 100644
--- a/mininet/node.py
+++ b/mininet/node.py
@@ -726,18 +726,23 @@
         if not CCNHost.inited:
             CCNHost.init()
 
-       # self.cmd("export CCND_DEBUG=6")
-       # self.cmd("export CCND_LOG=./log.{0}".format(self.name))
+        self.cmd("export CCND_DEBUG=6")
+        self.cmd("export CCND_LOG=./log.{0}".format(self.name))
+#	print self.params['cache']
+	if self.params['cache'] != None:
+		self.cmd("export CCND_CAP={0}".format(self.params['cache']))
+
         self.cmd("export CCN_LOCAL_SOCKNAME=/tmp/.sock.ccnx.{0}".format(self.name))
         self.cmd("ccndstart")
         self.peerList = {}
 
-    def config( self, fib=None, app=None, **params ):
+    def config( self, fib=None, app=None, cache=None, **params ):
 
         r = Node.config( self, **params )
 
         self.setParam( r, 'app', fib=fib )
         self.setParam( r, 'fib', app=app)
+	self.setParam( r, 'cache', cache=cache )
 
         return r
 
@@ -795,18 +800,22 @@
         if not CCNHost.inited:
             CCNHost.init()
 
-       # self.cmd("export CCND_DEBUG=6")
-       # self.cmd("export CCND_LOG=./log.{0}".format(self.name))
+        self.cmd("export CCND_DEBUG=6")
+        self.cmd("export CCND_LOG=./log.{0}".format(self.name))
+        if self.params['cache'] != None:
+                self.cmd("export CCND_CAP={0}".format(self.params['cache']))
+
 	self.cmd("export CCN_LOCAL_SOCKNAME=/tmp/.sock.ccnx.{0}".format(self.name))
         self.cmd("ccndstart")
         self.peerList = {}
 
-    def config( self, fib=None, app=None, cpu=None, cores=None, **params):
+    def config( self, fib=None, app=None, cpu=None, cores=None, cache=None, **params):
 
         r = CPULimitedHost.config(self,cpu,cores, **params)
 
         self.setParam( r, 'app', fib=fib )
         self.setParam( r, 'fib', app=app)
+	self.setParam( r, 'cache', cache=cache)
 
         return r
 
