Slight API change.  Now there is only one CcnxAppHelper that can create all CcnxApps
diff --git a/apps/ccnx-consumer.cc b/apps/ccnx-consumer.cc
index cc3276f..2074a39 100644
--- a/apps/ccnx-consumer.cc
+++ b/apps/ccnx-consumer.cc
@@ -62,7 +62,7 @@
                    StringValue ("100ms"),
                    MakeTimeAccessor (&CcnxConsumer::m_offTime),
                    MakeTimeChecker ())
-    .AddAttribute ("InterestName","CcnxName of the Interest (use CcnxNameComponents)",
+    .AddAttribute ("Prefix","CcnxName of the Interest",
                    StringValue ("/"),
                    MakeCcnxNameComponentsAccessor (&CcnxConsumer::m_interestName),
                    MakeCcnxNameComponentsChecker ())
diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index ce9cd57..72485d1 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -46,8 +46,8 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper [class]
-    module.add_class('CcnxConsumerHelper')
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::CcnxAppHelper [class]
+    module.add_class('CcnxAppHelper')
     ## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectHeaderException [class]
     module.add_class('CcnxContentObjectHeaderException')
     ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibEntryContainer [struct]
@@ -64,8 +64,6 @@
     module.add_enum('Type', ['INTEREST', 'CONTENT_OBJECT'], outer_class=root_module['ns3::CcnxHeaderHelper'])
     ## ccnx-interest-header.h (module 'NDNabstraction'): ns3::CcnxInterestHeaderException [class]
     module.add_class('CcnxInterestHeaderException')
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper [class]
-    module.add_class('CcnxProducerHelper')
     ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::CcnxStackHelper [class]
     module.add_class('CcnxStackHelper')
     ## ccnx-header-helper.h (module 'NDNabstraction'): ns3::CcnxUnknownHeaderException [class]
@@ -120,6 +118,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Chunk', 'ns3::ObjectBase', 'ns3::DefaultDeleter<ns3::Chunk>'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper [class]
+    module.add_class('SpringMobilityHelper')
     ## tag.h (module 'network'): ns3::Tag [class]
     module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
@@ -136,6 +136,10 @@
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## random-variable.h (module 'core'): ns3::UniformVariable [class]
     module.add_class('UniformVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariable'])
+    ## vector.h (module 'core'): ns3::Vector2D [class]
+    module.add_class('Vector2D', import_from_module='ns.core')
+    ## vector.h (module 'core'): ns3::Vector3D [class]
+    module.add_class('Vector3D', import_from_module='ns.core')
     ## random-variable.h (module 'core'): ns3::WeibullVariable [class]
     module.add_class('WeibullVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariable'])
     ## random-variable.h (module 'core'): ns3::ZetaVariable [class]
@@ -280,6 +284,8 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
+    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -302,6 +308,8 @@
     module.add_class('RocketfuelWeightsReader', parent=root_module['ns3::AnnotatedTopologyReader'])
     ## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader [enumeration]
     module.add_enum('', ['WEIGHTS', 'LATENCIES'], outer_class=root_module['ns3::RocketfuelWeightsReader'])
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::SpringMobilityModel [class]
+    module.add_class('SpringMobilityModel', parent=root_module['ns3::MobilityModel'])
     ## nstime.h (module 'core'): ns3::TimeChecker [class]
     module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -310,6 +318,14 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector2DChecker [class]
+    module.add_class('Vector2DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector2DValue [class]
+    module.add_class('Vector2DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector3DChecker [class]
+    module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector3DValue [class]
+    module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
@@ -317,6 +333,18 @@
     module.add_container('std::map< std::string, std::string >', ('std::string', 'std::string'), container_type='map')
     module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
     module.add_container('std::list< std::string >', 'std::string', container_type='list')
+    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
+    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
+    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
+    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
+    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
+    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
+    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
+    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
+    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -351,14 +379,13 @@
     register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
-    register_Ns3CcnxConsumerHelper_methods(root_module, root_module['ns3::CcnxConsumerHelper'])
+    register_Ns3CcnxAppHelper_methods(root_module, root_module['ns3::CcnxAppHelper'])
     register_Ns3CcnxContentObjectHeaderException_methods(root_module, root_module['ns3::CcnxContentObjectHeaderException'])
     register_Ns3CcnxFibEntryContainer_methods(root_module, root_module['ns3::CcnxFibEntryContainer'])
     register_Ns3CcnxFibFaceMetric_methods(root_module, root_module['ns3::CcnxFibFaceMetric'])
     register_Ns3CcnxFibFaceMetricContainer_methods(root_module, root_module['ns3::CcnxFibFaceMetricContainer'])
     register_Ns3CcnxHeaderHelper_methods(root_module, root_module['ns3::CcnxHeaderHelper'])
     register_Ns3CcnxInterestHeaderException_methods(root_module, root_module['ns3::CcnxInterestHeaderException'])
-    register_Ns3CcnxProducerHelper_methods(root_module, root_module['ns3::CcnxProducerHelper'])
     register_Ns3CcnxStackHelper_methods(root_module, root_module['ns3::CcnxStackHelper'])
     register_Ns3CcnxUnknownHeaderException_methods(root_module, root_module['ns3::CcnxUnknownHeaderException'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
@@ -383,6 +410,7 @@
     register_Ns3SequentialVariable_methods(root_module, root_module['ns3::SequentialVariable'])
     register_Ns3SimpleRefCount__Ns3Chunk_Ns3ObjectBase_Ns3DefaultDeleter__lt__ns3Chunk__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Chunk, ns3::ObjectBase, ns3::DefaultDeleter<ns3::Chunk> >'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+    register_Ns3SpringMobilityHelper_methods(root_module, root_module['ns3::SpringMobilityHelper'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TriangularVariable_methods(root_module, root_module['ns3::TriangularVariable'])
@@ -390,6 +418,8 @@
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
     register_Ns3UniformVariable_methods(root_module, root_module['ns3::UniformVariable'])
+    register_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
+    register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3WeibullVariable_methods(root_module, root_module['ns3::WeibullVariable'])
     register_Ns3ZetaVariable_methods(root_module, root_module['ns3::ZetaVariable'])
     register_Ns3ZipfVariable_methods(root_module, root_module['ns3::ZipfVariable'])
@@ -458,6 +488,7 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -467,10 +498,15 @@
     register_Ns3RandomVariableChecker_methods(root_module, root_module['ns3::RandomVariableChecker'])
     register_Ns3RandomVariableValue_methods(root_module, root_module['ns3::RandomVariableValue'])
     register_Ns3RocketfuelWeightsReader_methods(root_module, root_module['ns3::RocketfuelWeightsReader'])
+    register_Ns3SpringMobilityModel_methods(root_module, root_module['ns3::SpringMobilityModel'])
     register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3Vector2DChecker_methods(root_module, root_module['ns3::Vector2DChecker'])
+    register_Ns3Vector2DValue_methods(root_module, root_module['ns3::Vector2DValue'])
+    register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
+    register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     return
@@ -1012,27 +1048,31 @@
                    is_static=True, visibility='protected')
     return
 
-def register_Ns3CcnxConsumerHelper_methods(root_module, cls):
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper::CcnxConsumerHelper(ns3::CcnxConsumerHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxConsumerHelper const &', 'arg0')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper::CcnxConsumerHelper(std::string const & prefix) [constructor]
+def register_Ns3CcnxAppHelper_methods(root_module, cls):
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::CcnxAppHelper::CcnxAppHelper(ns3::CcnxAppHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxAppHelper const &', 'arg0')])
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::CcnxAppHelper::CcnxAppHelper(std::string const & prefix) [constructor]
     cls.add_constructor([param('std::string const &', 'prefix')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(ns3::NodeContainer c) [member function]
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxAppHelper::Install(ns3::NodeContainer c) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
                    [param('ns3::NodeContainer', 'c')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxAppHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(std::string nodeName) [member function]
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxAppHelper::Install(std::string nodeName) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
                    [param('std::string', 'nodeName')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): void ns3::CcnxConsumerHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    ## ccnx-app-helper.h (module 'NDNabstraction'): void ns3::CcnxAppHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
     cls.add_method('SetAttribute', 
                    'void', 
                    [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## ccnx-app-helper.h (module 'NDNabstraction'): void ns3::CcnxAppHelper::SetPrefix(std::string const & prefix) [member function]
+    cls.add_method('SetPrefix', 
+                   'void', 
+                   [param('std::string const &', 'prefix')])
     return
 
 def register_Ns3CcnxContentObjectHeaderException_methods(root_module, cls):
@@ -1103,29 +1143,6 @@
     cls.add_constructor([param('ns3::CcnxInterestHeaderException const &', 'arg0')])
     return
 
-def register_Ns3CcnxProducerHelper_methods(root_module, cls):
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper::CcnxProducerHelper(ns3::CcnxProducerHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxProducerHelper const &', 'arg0')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper::CcnxProducerHelper(std::string const & prefix, uint32_t virtualPayloadSize) [constructor]
-    cls.add_constructor([param('std::string const &', 'prefix'), param('uint32_t', 'virtualPayloadSize')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(ns3::NodeContainer c) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::NodeContainer', 'c')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(std::string nodeName) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('std::string', 'nodeName')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): void ns3::CcnxProducerHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    return
-
 def register_Ns3CcnxStackHelper_methods(root_module, cls):
     ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::CcnxStackHelper::CcnxStackHelper() [constructor]
     cls.add_constructor([])
@@ -2123,6 +2140,23 @@
                    is_static=True)
     return
 
+def register_Ns3SpringMobilityHelper_methods(root_module, cls):
+    ## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper::SpringMobilityHelper() [constructor]
+    cls.add_constructor([])
+    ## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper::SpringMobilityHelper(ns3::SpringMobilityHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpringMobilityHelper const &', 'arg0')])
+    ## spring-mobility-helper.h (module 'NDNabstraction'): static void ns3::SpringMobilityHelper::InstallSprings(ns3::Ptr<ns3::Node> node1, ns3::Ptr<ns3::Node> node2) [member function]
+    cls.add_method('InstallSprings', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node1'), param('ns3::Ptr< ns3::Node >', 'node2')], 
+                   is_static=True)
+    ## spring-mobility-helper.h (module 'NDNabstraction'): static void ns3::SpringMobilityHelper::InstallSprings(std::_List_const_iterator<ns3::TopologyReader::Link> first, std::_List_const_iterator<ns3::TopologyReader::Link> end) [member function]
+    cls.add_method('InstallSprings', 
+                   'void', 
+                   [param('std::_List_const_iterator< ns3::TopologyReader::Link >', 'first'), param('std::_List_const_iterator< ns3::TopologyReader::Link >', 'end')], 
+                   is_static=True)
+    return
+
 def register_Ns3Tag_methods(root_module, cls):
     ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
     cls.add_constructor([])
@@ -2423,6 +2457,52 @@
                    [param('double', 's'), param('double', 'l')])
     return
 
+def register_Ns3Vector2D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_numeric_operator('*', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('ns3::Vector2D const &', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('double', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('ns3::Vector2D const &', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('double', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::Vector2D const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('double', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('ns3::Vector2D const &', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('double', 'right'))
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(double _x, double _y) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector2D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    return
+
+def register_Ns3Vector3D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_numeric_operator('*', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('ns3::Vector3D const &', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('double', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('ns3::Vector3D const &', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('double', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::Vector3D const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('double', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('ns3::Vector3D const &', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('double', 'right'))
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(ns3::Vector3D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(double _x, double _y, double _z) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y'), param('double', '_z')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::z [variable]
+    cls.add_instance_attribute('z', 'double', is_const=False)
+    return
+
 def register_Ns3WeibullVariable_methods(root_module, cls):
     ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(ns3::WeibullVariable const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WeibullVariable const &', 'arg0')])
@@ -2462,13 +2542,13 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
     cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
@@ -2956,11 +3036,11 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
     cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
@@ -3707,13 +3787,9 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::LeakBucket(ns3::Time const & interval) [member function]
+    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::LeakBucket() [member function]
     cls.add_method('LeakBucket', 
                    'void', 
-                   [param('ns3::Time const &', 'interval')])
-    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::LeakBucketByOnePacket() [member function]
-    cls.add_method('LeakBucketByOnePacket', 
-                   'void', 
                    [])
     ## ccnx-face.h (module 'NDNabstraction'): std::ostream & ns3::CcnxFace::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
@@ -4335,6 +4411,62 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3MobilityModel_methods(root_module, cls):
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel() [constructor]
+    cls.add_constructor([])
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetDistanceFrom(ns3::Ptr<const ns3::MobilityModel> position) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'position')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetPosition() const [member function]
+    cls.add_method('GetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetRelativeSpeed(ns3::Ptr<const ns3::MobilityModel> other) const [member function]
+    cls.add_method('GetRelativeSpeed', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'other')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): static ns3::TypeId ns3::MobilityModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetVelocity() const [member function]
+    cls.add_method('GetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::SetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('SetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')])
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
+    cls.add_method('NotifyCourseChange', 
+                   'void', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetPosition() const [member function]
+    cls.add_method('DoGetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetVelocity() const [member function]
+    cls.add_method('DoGetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('DoSetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -4873,6 +5005,42 @@
                    [])
     return
 
+def register_Ns3SpringMobilityModel_methods(root_module, cls):
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::SpringMobilityModel::SpringMobilityModel(ns3::SpringMobilityModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpringMobilityModel const &', 'arg0')])
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::SpringMobilityModel::SpringMobilityModel() [constructor]
+    cls.add_constructor([])
+    ## spring-mobility-model.h (module 'NDNabstraction'): void ns3::SpringMobilityModel::AddSpring(ns3::Ptr<ns3::MobilityModel> node) [member function]
+    cls.add_method('AddSpring', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'node')])
+    ## spring-mobility-model.h (module 'NDNabstraction'): static ns3::TypeId ns3::SpringMobilityModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::Vector ns3::SpringMobilityModel::DoGetPosition() const [member function]
+    cls.add_method('DoGetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::Vector ns3::SpringMobilityModel::DoGetVelocity() const [member function]
+    cls.add_method('DoGetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## spring-mobility-model.h (module 'NDNabstraction'): void ns3::SpringMobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('DoSetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   visibility='private', is_virtual=True)
+    ## spring-mobility-model.h (module 'NDNabstraction'): void ns3::SpringMobilityModel::DoStart() [member function]
+    cls.add_method('DoStart', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
 def register_Ns3TimeChecker_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
     cls.add_constructor([])
@@ -4953,6 +5121,86 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3Vector2DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker(ns3::Vector2DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector2DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector2DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector2DValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## vector.h (module 'core'): ns3::Vector2D ns3::Vector2DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector2D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector2DValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): void ns3::Vector2DValue::Set(ns3::Vector2D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector2D const &', 'value')])
+    return
+
+def register_Ns3Vector3DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker(ns3::Vector3DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector3DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector3DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector3DValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## vector.h (module 'core'): ns3::Vector3D ns3::Vector3DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector3D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector3DValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): void ns3::Vector3DValue::Set(ns3::Vector3D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector3D const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
diff --git a/bindings/modulegen__gcc_LP64.py b/bindings/modulegen__gcc_LP64.py
index ce9cd57..72485d1 100644
--- a/bindings/modulegen__gcc_LP64.py
+++ b/bindings/modulegen__gcc_LP64.py
@@ -46,8 +46,8 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper [class]
-    module.add_class('CcnxConsumerHelper')
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::CcnxAppHelper [class]
+    module.add_class('CcnxAppHelper')
     ## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectHeaderException [class]
     module.add_class('CcnxContentObjectHeaderException')
     ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibEntryContainer [struct]
@@ -64,8 +64,6 @@
     module.add_enum('Type', ['INTEREST', 'CONTENT_OBJECT'], outer_class=root_module['ns3::CcnxHeaderHelper'])
     ## ccnx-interest-header.h (module 'NDNabstraction'): ns3::CcnxInterestHeaderException [class]
     module.add_class('CcnxInterestHeaderException')
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper [class]
-    module.add_class('CcnxProducerHelper')
     ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::CcnxStackHelper [class]
     module.add_class('CcnxStackHelper')
     ## ccnx-header-helper.h (module 'NDNabstraction'): ns3::CcnxUnknownHeaderException [class]
@@ -120,6 +118,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Chunk', 'ns3::ObjectBase', 'ns3::DefaultDeleter<ns3::Chunk>'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper [class]
+    module.add_class('SpringMobilityHelper')
     ## tag.h (module 'network'): ns3::Tag [class]
     module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
@@ -136,6 +136,10 @@
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## random-variable.h (module 'core'): ns3::UniformVariable [class]
     module.add_class('UniformVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariable'])
+    ## vector.h (module 'core'): ns3::Vector2D [class]
+    module.add_class('Vector2D', import_from_module='ns.core')
+    ## vector.h (module 'core'): ns3::Vector3D [class]
+    module.add_class('Vector3D', import_from_module='ns.core')
     ## random-variable.h (module 'core'): ns3::WeibullVariable [class]
     module.add_class('WeibullVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariable'])
     ## random-variable.h (module 'core'): ns3::ZetaVariable [class]
@@ -280,6 +284,8 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
+    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -302,6 +308,8 @@
     module.add_class('RocketfuelWeightsReader', parent=root_module['ns3::AnnotatedTopologyReader'])
     ## rocketfuel-weights-reader.h (module 'NDNabstraction'): ns3::RocketfuelWeightsReader [enumeration]
     module.add_enum('', ['WEIGHTS', 'LATENCIES'], outer_class=root_module['ns3::RocketfuelWeightsReader'])
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::SpringMobilityModel [class]
+    module.add_class('SpringMobilityModel', parent=root_module['ns3::MobilityModel'])
     ## nstime.h (module 'core'): ns3::TimeChecker [class]
     module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -310,6 +318,14 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector2DChecker [class]
+    module.add_class('Vector2DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector2DValue [class]
+    module.add_class('Vector2DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector3DChecker [class]
+    module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector3DValue [class]
+    module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
@@ -317,6 +333,18 @@
     module.add_container('std::map< std::string, std::string >', ('std::string', 'std::string'), container_type='map')
     module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
     module.add_container('std::list< std::string >', 'std::string', container_type='list')
+    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
+    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
+    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
+    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
+    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
+    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
+    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
+    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
+    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -351,14 +379,13 @@
     register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
-    register_Ns3CcnxConsumerHelper_methods(root_module, root_module['ns3::CcnxConsumerHelper'])
+    register_Ns3CcnxAppHelper_methods(root_module, root_module['ns3::CcnxAppHelper'])
     register_Ns3CcnxContentObjectHeaderException_methods(root_module, root_module['ns3::CcnxContentObjectHeaderException'])
     register_Ns3CcnxFibEntryContainer_methods(root_module, root_module['ns3::CcnxFibEntryContainer'])
     register_Ns3CcnxFibFaceMetric_methods(root_module, root_module['ns3::CcnxFibFaceMetric'])
     register_Ns3CcnxFibFaceMetricContainer_methods(root_module, root_module['ns3::CcnxFibFaceMetricContainer'])
     register_Ns3CcnxHeaderHelper_methods(root_module, root_module['ns3::CcnxHeaderHelper'])
     register_Ns3CcnxInterestHeaderException_methods(root_module, root_module['ns3::CcnxInterestHeaderException'])
-    register_Ns3CcnxProducerHelper_methods(root_module, root_module['ns3::CcnxProducerHelper'])
     register_Ns3CcnxStackHelper_methods(root_module, root_module['ns3::CcnxStackHelper'])
     register_Ns3CcnxUnknownHeaderException_methods(root_module, root_module['ns3::CcnxUnknownHeaderException'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
@@ -383,6 +410,7 @@
     register_Ns3SequentialVariable_methods(root_module, root_module['ns3::SequentialVariable'])
     register_Ns3SimpleRefCount__Ns3Chunk_Ns3ObjectBase_Ns3DefaultDeleter__lt__ns3Chunk__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Chunk, ns3::ObjectBase, ns3::DefaultDeleter<ns3::Chunk> >'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+    register_Ns3SpringMobilityHelper_methods(root_module, root_module['ns3::SpringMobilityHelper'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TriangularVariable_methods(root_module, root_module['ns3::TriangularVariable'])
@@ -390,6 +418,8 @@
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
     register_Ns3UniformVariable_methods(root_module, root_module['ns3::UniformVariable'])
+    register_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
+    register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3WeibullVariable_methods(root_module, root_module['ns3::WeibullVariable'])
     register_Ns3ZetaVariable_methods(root_module, root_module['ns3::ZetaVariable'])
     register_Ns3ZipfVariable_methods(root_module, root_module['ns3::ZipfVariable'])
@@ -458,6 +488,7 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -467,10 +498,15 @@
     register_Ns3RandomVariableChecker_methods(root_module, root_module['ns3::RandomVariableChecker'])
     register_Ns3RandomVariableValue_methods(root_module, root_module['ns3::RandomVariableValue'])
     register_Ns3RocketfuelWeightsReader_methods(root_module, root_module['ns3::RocketfuelWeightsReader'])
+    register_Ns3SpringMobilityModel_methods(root_module, root_module['ns3::SpringMobilityModel'])
     register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3Vector2DChecker_methods(root_module, root_module['ns3::Vector2DChecker'])
+    register_Ns3Vector2DValue_methods(root_module, root_module['ns3::Vector2DValue'])
+    register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
+    register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     return
@@ -1012,27 +1048,31 @@
                    is_static=True, visibility='protected')
     return
 
-def register_Ns3CcnxConsumerHelper_methods(root_module, cls):
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper::CcnxConsumerHelper(ns3::CcnxConsumerHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxConsumerHelper const &', 'arg0')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper::CcnxConsumerHelper(std::string const & prefix) [constructor]
+def register_Ns3CcnxAppHelper_methods(root_module, cls):
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::CcnxAppHelper::CcnxAppHelper(ns3::CcnxAppHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxAppHelper const &', 'arg0')])
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::CcnxAppHelper::CcnxAppHelper(std::string const & prefix) [constructor]
     cls.add_constructor([param('std::string const &', 'prefix')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(ns3::NodeContainer c) [member function]
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxAppHelper::Install(ns3::NodeContainer c) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
                    [param('ns3::NodeContainer', 'c')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxAppHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(std::string nodeName) [member function]
+    ## ccnx-app-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxAppHelper::Install(std::string nodeName) [member function]
     cls.add_method('Install', 
                    'ns3::ApplicationContainer', 
                    [param('std::string', 'nodeName')])
-    ## ccnx-consumer-helper.h (module 'NDNabstraction'): void ns3::CcnxConsumerHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    ## ccnx-app-helper.h (module 'NDNabstraction'): void ns3::CcnxAppHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
     cls.add_method('SetAttribute', 
                    'void', 
                    [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## ccnx-app-helper.h (module 'NDNabstraction'): void ns3::CcnxAppHelper::SetPrefix(std::string const & prefix) [member function]
+    cls.add_method('SetPrefix', 
+                   'void', 
+                   [param('std::string const &', 'prefix')])
     return
 
 def register_Ns3CcnxContentObjectHeaderException_methods(root_module, cls):
@@ -1103,29 +1143,6 @@
     cls.add_constructor([param('ns3::CcnxInterestHeaderException const &', 'arg0')])
     return
 
-def register_Ns3CcnxProducerHelper_methods(root_module, cls):
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper::CcnxProducerHelper(ns3::CcnxProducerHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxProducerHelper const &', 'arg0')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper::CcnxProducerHelper(std::string const & prefix, uint32_t virtualPayloadSize) [constructor]
-    cls.add_constructor([param('std::string const &', 'prefix'), param('uint32_t', 'virtualPayloadSize')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(ns3::NodeContainer c) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::NodeContainer', 'c')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(std::string nodeName) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('std::string', 'nodeName')])
-    ## ccnx-producer-helper.h (module 'NDNabstraction'): void ns3::CcnxProducerHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    return
-
 def register_Ns3CcnxStackHelper_methods(root_module, cls):
     ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::CcnxStackHelper::CcnxStackHelper() [constructor]
     cls.add_constructor([])
@@ -2123,6 +2140,23 @@
                    is_static=True)
     return
 
+def register_Ns3SpringMobilityHelper_methods(root_module, cls):
+    ## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper::SpringMobilityHelper() [constructor]
+    cls.add_constructor([])
+    ## spring-mobility-helper.h (module 'NDNabstraction'): ns3::SpringMobilityHelper::SpringMobilityHelper(ns3::SpringMobilityHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpringMobilityHelper const &', 'arg0')])
+    ## spring-mobility-helper.h (module 'NDNabstraction'): static void ns3::SpringMobilityHelper::InstallSprings(ns3::Ptr<ns3::Node> node1, ns3::Ptr<ns3::Node> node2) [member function]
+    cls.add_method('InstallSprings', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node1'), param('ns3::Ptr< ns3::Node >', 'node2')], 
+                   is_static=True)
+    ## spring-mobility-helper.h (module 'NDNabstraction'): static void ns3::SpringMobilityHelper::InstallSprings(std::_List_const_iterator<ns3::TopologyReader::Link> first, std::_List_const_iterator<ns3::TopologyReader::Link> end) [member function]
+    cls.add_method('InstallSprings', 
+                   'void', 
+                   [param('std::_List_const_iterator< ns3::TopologyReader::Link >', 'first'), param('std::_List_const_iterator< ns3::TopologyReader::Link >', 'end')], 
+                   is_static=True)
+    return
+
 def register_Ns3Tag_methods(root_module, cls):
     ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
     cls.add_constructor([])
@@ -2423,6 +2457,52 @@
                    [param('double', 's'), param('double', 'l')])
     return
 
+def register_Ns3Vector2D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_numeric_operator('*', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('ns3::Vector2D const &', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('double', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('ns3::Vector2D const &', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('double', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::Vector2D const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('double', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('ns3::Vector2D const &', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Vector2D'], root_module['ns3::Vector2D'], param('double', 'right'))
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(double _x, double _y) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector2D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    return
+
+def register_Ns3Vector3D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_numeric_operator('*', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('ns3::Vector3D const &', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('double', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('ns3::Vector3D const &', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('double', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::Vector3D const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('double', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('ns3::Vector3D const &', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Vector3D'], root_module['ns3::Vector3D'], param('double', 'right'))
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(ns3::Vector3D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(double _x, double _y, double _z) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y'), param('double', '_z')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::z [variable]
+    cls.add_instance_attribute('z', 'double', is_const=False)
+    return
+
 def register_Ns3WeibullVariable_methods(root_module, cls):
     ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(ns3::WeibullVariable const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WeibullVariable const &', 'arg0')])
@@ -2462,13 +2542,13 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
     cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
@@ -2956,11 +3036,11 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
     cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
@@ -3707,13 +3787,9 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::LeakBucket(ns3::Time const & interval) [member function]
+    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::LeakBucket() [member function]
     cls.add_method('LeakBucket', 
                    'void', 
-                   [param('ns3::Time const &', 'interval')])
-    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::LeakBucketByOnePacket() [member function]
-    cls.add_method('LeakBucketByOnePacket', 
-                   'void', 
                    [])
     ## ccnx-face.h (module 'NDNabstraction'): std::ostream & ns3::CcnxFace::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
@@ -4335,6 +4411,62 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3MobilityModel_methods(root_module, cls):
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel() [constructor]
+    cls.add_constructor([])
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetDistanceFrom(ns3::Ptr<const ns3::MobilityModel> position) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'position')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetPosition() const [member function]
+    cls.add_method('GetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetRelativeSpeed(ns3::Ptr<const ns3::MobilityModel> other) const [member function]
+    cls.add_method('GetRelativeSpeed', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::MobilityModel const >', 'other')], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): static ns3::TypeId ns3::MobilityModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetVelocity() const [member function]
+    cls.add_method('GetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::SetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('SetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')])
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
+    cls.add_method('NotifyCourseChange', 
+                   'void', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetPosition() const [member function]
+    cls.add_method('DoGetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetVelocity() const [member function]
+    cls.add_method('DoGetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('DoSetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -4873,6 +5005,42 @@
                    [])
     return
 
+def register_Ns3SpringMobilityModel_methods(root_module, cls):
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::SpringMobilityModel::SpringMobilityModel(ns3::SpringMobilityModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SpringMobilityModel const &', 'arg0')])
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::SpringMobilityModel::SpringMobilityModel() [constructor]
+    cls.add_constructor([])
+    ## spring-mobility-model.h (module 'NDNabstraction'): void ns3::SpringMobilityModel::AddSpring(ns3::Ptr<ns3::MobilityModel> node) [member function]
+    cls.add_method('AddSpring', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'node')])
+    ## spring-mobility-model.h (module 'NDNabstraction'): static ns3::TypeId ns3::SpringMobilityModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::Vector ns3::SpringMobilityModel::DoGetPosition() const [member function]
+    cls.add_method('DoGetPosition', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## spring-mobility-model.h (module 'NDNabstraction'): ns3::Vector ns3::SpringMobilityModel::DoGetVelocity() const [member function]
+    cls.add_method('DoGetVelocity', 
+                   'ns3::Vector', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## spring-mobility-model.h (module 'NDNabstraction'): void ns3::SpringMobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
+    cls.add_method('DoSetPosition', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   visibility='private', is_virtual=True)
+    ## spring-mobility-model.h (module 'NDNabstraction'): void ns3::SpringMobilityModel::DoStart() [member function]
+    cls.add_method('DoStart', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
 def register_Ns3TimeChecker_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
     cls.add_constructor([])
@@ -4953,6 +5121,86 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3Vector2DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker(ns3::Vector2DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector2DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector2DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector2DValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## vector.h (module 'core'): ns3::Vector2D ns3::Vector2DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector2D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector2DValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): void ns3::Vector2DValue::Set(ns3::Vector2D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector2D const &', 'value')])
+    return
+
+def register_Ns3Vector3DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker(ns3::Vector3DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector3DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector3DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector3DValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## vector.h (module 'core'): ns3::Vector3D ns3::Vector3DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector3D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector3DValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): void ns3::Vector3DValue::Set(ns3::Vector3D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector3D const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
diff --git a/examples/abilene-topology.cc b/examples/abilene-topology.cc
index 660d899..d17f23a 100644
--- a/examples/abilene-topology.cc
+++ b/examples/abilene-topology.cc
@@ -121,10 +121,14 @@
   ccnxHelper.InstallAll ();
     
   NS_LOG_INFO ("Installing Applications");
-  CcnxConsumerHelper consumerHelper ("/5");
+  CcnxAppHelper consumerHelper ("ns3::CcnxConsumer");
+  consumerHelper.SetPrefix ("/5");
   ApplicationContainer consumers = consumerHelper.Install (Names::Find<Node> ("/abilene", "ATLAng"));
-    
-  CcnxProducerHelper producerHelper ("/5",1024);
+  
+  CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+  producerHelper.SetPrefix ("/5");
+  producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
+
   ApplicationContainer producers = producerHelper.Install (Names::Find<Node> ("/abilene", "IPLSng"));
 
   // // Populate FIB based on IPv4 global routing controller
diff --git a/examples/annotated-topology-read-example.cc b/examples/annotated-topology-read-example.cc
index c220873..450d8d1 100644
--- a/examples/annotated-topology-read-example.cc
+++ b/examples/annotated-topology-read-example.cc
@@ -93,15 +93,19 @@
   Ptr<CcnxFaceContainer> cf = ccnx.Install (nodes);
      
   NS_LOG_INFO ("Installing Applications");
-  CcnxConsumerHelper helper ("/3");
-  ApplicationContainer app = helper.Install (nodes.Get(1));
+  CcnxAppHelper helper ("ns3::CcnxConsumer");
+  helper.SetPrefix ("/3");
+  ApplicationContainer app = helper.Install ("1");
   app.Start (Seconds (1.0));
   app.Stop (Seconds (1000.05));
-    
-  CcnxProducerHelper helper3 ("/3",120);
-  ApplicationContainer app3 = helper3.Install(nodes.Get(6));
-  app3.Start(Seconds(0.0));
-  app3.Stop(Seconds(1500.0));
+
+  CcnxAppHelper helper2 ("ns3::CcnxProducer");
+  helper2.SetPrefix ("/3");
+  helper2.SetAttribute ("PayloadSize", StringValue("1024"));
+  ApplicationContainer app2 = helper2.Install("3");
+
+  app2.Start(Seconds(0.0));
+  app2.Stop(Seconds(1500.0));
     
   // ------------------------------------------------------------
   // -- Run the simulation
diff --git a/examples/ccnx-grid.cc b/examples/ccnx-grid.cc
index 51d7858..28a021b 100644
--- a/examples/ccnx-grid.cc
+++ b/examples/ccnx-grid.cc
@@ -116,13 +116,16 @@
   std::ostringstream prefix;
   prefix << "/" << producer->GetId ();
   
-  CcnxConsumerHelper consumerHelper (prefix.str ());
+  CcnxAppHelper consumerHelper ("ns3::CcnxConsumer");
+  consumerHelper.SetPrefix (prefix.str ());
   ApplicationContainer consumers = consumerHelper.Install (consumerNodes);
   
   // consumers.Start (Seconds (0.0));
   // consumers.Stop (finishTime);
     
-  CcnxProducerHelper producerHelper (prefix.str (),1024);
+  CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+  producerHelper.SetPrefix (prefix.str ());
+  producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
   ApplicationContainer producers = producerHelper.Install (producer);
   
   // producers.Start(Seconds(0.0));
diff --git a/examples/ccnx-test.cc b/examples/ccnx-test.cc
index d5cb1ad..cae2815 100644
--- a/examples/ccnx-test.cc
+++ b/examples/ccnx-test.cc
@@ -46,13 +46,17 @@
   CcnxStackHelper ccnx;
   Ptr<CcnxFaceContainer> cf = ccnx.Install (c);
 
-  CcnxConsumerHelper helper ("/3");
+  CcnxAppHelper helper ("ns3::CcnxConsumer");
+  helper.SetPrefix ("/3");
   ApplicationContainer app = helper.Install ("1");
   app.Start (Seconds (1.0));
   app.Stop (Seconds (10.05));
-    
-  CcnxProducerHelper helper2 ("/3",120);
+
+  CcnxAppHelper helper2 ("ns3::CcnxProducer");
+  helper2.SetPrefix ("/3");
+  helper2.SetAttribute ("PayloadSize", StringValue("1024"));
   ApplicationContainer app2 = helper2.Install("3");
+  
   app2.Start(Seconds(0.0));
   app2.Stop(Seconds(15.0));
   
diff --git a/examples/synthetic-topology.cc b/examples/synthetic-topology.cc
index f03c22e..39c45eb 100644
--- a/examples/synthetic-topology.cc
+++ b/examples/synthetic-topology.cc
@@ -88,7 +88,9 @@
   ccnxHelper.InstallAll ();
     
   NS_LOG_INFO ("Installing Applications");
-  CcnxConsumerHelper consumerHelper ("/6");
+  CcnxAppHelper consumerHelper ("ns3::CcnxConsumer");
+
+  consumerHelper.SetPrefix ("/6");
   ApplicationContainer consumers = consumerHelper.Install (Names::Find<Node> ("/synthetic", "c1"));
 
   consumerHelper.SetPrefix ("/7");
@@ -100,24 +102,27 @@
   consumerHelper.SetPrefix ("/10");
   ApplicationContainer consumers4 = consumerHelper.Install(Names::Find<Node> ("/synthetic", "c4"));
 
-  consumers.Start (Seconds (2.121212123));
-  consumers2.Start (Seconds (0.166666));
-  consumers3.Start (Seconds (4.1235432));
-  consumers4.Start (Seconds (3.00005421));
-  
-  CcnxProducerHelper producerHelper ("/6",1024);
-  ApplicationContainer producers = producerHelper.Install (Names::Find<Node> ("/synthetic", "p1"));
-        
-  CcnxProducerHelper producerHelper2 ("/7",1024);
-  ApplicationContainer producers2 = producerHelper2.Install (Names::Find<Node> ("/synthetic", "p2"));
+  consumers.Start (Seconds (0));
+  consumers2.Start (Seconds (10));
+  consumers3.Start (Seconds (20));
+  consumers4.Start (Seconds (30));
 
-  CcnxProducerHelper producerHelper3 ("/8",1024);
-  ApplicationContainer producers3 = producerHelper3.Install (Names::Find<Node> ("/synthetic", "p3"));
+  /////////////////////////////////////////////
   
-  CcnxProducerHelper producerHelper4 ("/10",1024);
-  ApplicationContainer producers4 = producerHelper4.Install (Names::Find<Node> ("/synthetic", "p4"));
+  CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+  producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
+ 
+  producerHelper.SetPrefix ("/6");  
+  producerHelper.Install (Names::Find<Node> ("/synthetic", "p1"));
+        
+  producerHelper.SetPrefix ("/7");
+  producerHelper.Install (Names::Find<Node> ("/synthetic", "p2"));
+
+  producerHelper.SetPrefix ("/8");
+  producerHelper.Install (Names::Find<Node> ("/synthetic", "p3"));
   
-  Simulator::Schedule (Seconds (10.0), PrintTime);
+  producerHelper.SetPrefix ("/10");
+  producerHelper.Install (Names::Find<Node> ("/synthetic", "p4"));
 
   // Populate FIB based on IPv4 global routing controller
   ccnxHelper.InstallFakeGlobalRoutes ();
@@ -126,6 +131,8 @@
   ccnxHelper.InstallRouteTo (Names::Find<Node> ("/synthetic", "p3"));
   ccnxHelper.InstallRouteTo (Names::Find<Node> ("/synthetic", "p4"));
 
+  Simulator::Schedule (Seconds (10.0), PrintTime);
+
   Simulator::Stop (finishTime);
 
   NS_LOG_INFO ("Run Simulation.");
diff --git a/examples/synthetic-topology.txt b/examples/synthetic-topology.txt
index 0d175b0..240ef1e 100644
--- a/examples/synthetic-topology.txt
+++ b/examples/synthetic-topology.txt
@@ -21,7 +21,7 @@
 n1	n2	1Mbps 		1176   	1ms   		20 
 n1	n12	1Mbps 		587    	1ms   		20
 n12	n2	1Mbps 		846    	1ms   		20
-n2	p1	10Mbps 		260   	50ms   		200
+n2	p1	10Mbps 		260   	1ms   		200
 n2	p2	10Mbps 		700   	1ms  		200
 n2	p3	10Mbps		1	1ms		200
 c4	n1	10Mbps		1	1ms		200
diff --git a/helper/ccnx-app-helper.cc b/helper/ccnx-app-helper.cc
new file mode 100644
index 0000000..d52a005
--- /dev/null
+++ b/helper/ccnx-app-helper.cc
@@ -0,0 +1,83 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include "ccnx-app-helper.h"
+#include "ns3/log.h"
+#include "ns3/string.h"
+#include "ns3/names.h"
+#include "ns3/ccnx-app.h"
+
+NS_LOG_COMPONENT_DEFINE ("CcnxAppHelper");
+
+namespace ns3 
+{
+
+CcnxAppHelper::CcnxAppHelper (const std::string &app)
+{
+  m_factory.SetTypeId (app);
+}
+
+void
+CcnxAppHelper::SetPrefix (const std::string &prefix)
+{
+  m_factory.Set ("Prefix", StringValue(prefix));
+}
+
+void 
+CcnxAppHelper::SetAttribute (std::string name, const AttributeValue &value)
+{
+  m_factory.Set (name, value);
+}
+    
+ApplicationContainer
+CcnxAppHelper::Install (Ptr<Node> node)
+{
+  return ApplicationContainer (InstallPriv (node));
+}
+    
+ApplicationContainer
+CcnxAppHelper::Install (std::string nodeName)
+{
+  Ptr<Node> node = Names::Find<Node> (nodeName);
+  return ApplicationContainer (InstallPriv (node));
+}
+    
+ApplicationContainer
+CcnxAppHelper::Install (NodeContainer c)
+{
+  ApplicationContainer apps;
+  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      apps.Add (InstallPriv (*i));
+    }
+    
+  return apps;
+}
+    
+Ptr<Application>
+CcnxAppHelper::InstallPriv (Ptr<Node> node)
+{
+  Ptr<CcnxApp> app = m_factory.Create<CcnxApp> ();        
+  node->AddApplication (app);
+        
+  return app;
+}
+
+}
diff --git a/helper/ccnx-consumer-helper.h b/helper/ccnx-app-helper.h
similarity index 89%
rename from helper/ccnx-consumer-helper.h
rename to helper/ccnx-app-helper.h
index aa7c8c9..3eb1296 100644
--- a/helper/ccnx-consumer-helper.h
+++ b/helper/ccnx-app-helper.h
@@ -18,8 +18,8 @@
  * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
  */
 
-#ifndef CCNX_CONSUMER_HELPER_H
-#define CCNX_CONSUMER_HELPER_H
+#ifndef CCNX_APP_HELPER_H
+#define CCNX_APP_HELPER_H
 
 #include "ns3/object-factory.h"
 #include "ns3/attribute.h"
@@ -28,22 +28,22 @@
 #include "ns3/ptr.h"
 
 namespace ns3 
-{    
+{
+
 /**
  * \brief A helper to make it easier to instantiate an ns3::CcnxConsumer Application
  * on a set of nodes.
  */
-    
-class CcnxConsumerHelper
+class CcnxAppHelper
 {        
 public:
 
   /**
-   * \brief Create an CcnxConsumerHelper to make it easier to work with CcnxConsumer Apps
+   * \brief Create an CcnxAppHelper to make it easier to work with CCNx apps
    *
-   * \param prefix Prefix which will be requested by the consumer applications
+   * \param app Class of the application
    */
-  CcnxConsumerHelper (const std::string &prefix);
+  CcnxAppHelper (const std::string &prefix);
 
   /**
    * @brief Set the prefix consumer will be requesting
@@ -100,7 +100,7 @@
   ObjectFactory m_factory;
 };
 
-}
+} // namespace ns3
 
-#endif
+#endif // CCNX_APP_HELPER_H
 
diff --git a/helper/ccnx-consumer-helper.cc b/helper/ccnx-consumer-helper.cc
deleted file mode 100644
index dc29d9a..0000000
--- a/helper/ccnx-consumer-helper.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
- */
-
-#include "ccnx-consumer-helper.h"
-#include "ns3/log.h"
-#include "ns3/ccnx-name-components.h"
-#include "ns3/names.h"
-#include "../apps/ccnx-consumer.h"
-
-NS_LOG_COMPONENT_DEFINE ("CcnxConsumerHelper");
-
-namespace ns3 
-{
-    
-CcnxConsumerHelper::CcnxConsumerHelper (const std::string &prefix)
-{
-    m_factory.SetTypeId ("ns3::CcnxConsumer");
-
-    SetPrefix (prefix);
-}
-
-void
-CcnxConsumerHelper::SetPrefix (const std::string &prefix)
-{
-    CcnxNameComponentsValue prefixValue;
-    prefixValue.DeserializeFromString (prefix, MakeCcnxNameComponentsChecker ());
-    m_factory.Set ("InterestName", prefixValue);
-}
-
-void 
-CcnxConsumerHelper::SetAttribute (std::string name, const AttributeValue &value)
-{
-    m_factory.Set (name, value);
-}
-    
-ApplicationContainer
-CcnxConsumerHelper::Install (Ptr<Node> node)
-{
-    return ApplicationContainer (InstallPriv (node));
-}
-    
-ApplicationContainer
-CcnxConsumerHelper::Install (std::string nodeName)
-{
-    Ptr<Node> node = Names::Find<Node> (nodeName);
-    return ApplicationContainer (InstallPriv (node));
-}
-    
-ApplicationContainer
-CcnxConsumerHelper::Install (NodeContainer c)
-{
-    ApplicationContainer apps;
-    for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
-    {
-        apps.Add (InstallPriv (*i));
-    }
-    
-    return apps;
-}
-    
-Ptr<Application>
-CcnxConsumerHelper::InstallPriv (Ptr<Node> node)
-{
-    Ptr<CcnxConsumer> app = m_factory.Create<CcnxConsumer> ();        
-    node->AddApplication (app);
-        
-    return app;
-}
-
-}
diff --git a/helper/ccnx-producer-helper.cc b/helper/ccnx-producer-helper.cc
deleted file mode 100644
index 2bf369b..0000000
--- a/helper/ccnx-producer-helper.cc
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
- */
-
-#include "ccnx-producer-helper.h"
-#include "ns3/log.h"
-#include "ns3/ccnx-name-components.h"
-#include "ns3/uinteger.h"
-#include "ns3/names.h"
-#include "../apps/ccnx-producer.h"
-
-NS_LOG_COMPONENT_DEFINE ("CcnxProducerHelper");
-
-namespace ns3 
-{
-    
-CcnxProducerHelper::CcnxProducerHelper (const std::string &prefix, uint32_t virtualPayloadSize)
-{
-    m_factory.SetTypeId ("ns3::CcnxProducer");
-    
-    CcnxNameComponentsValue prefixValue;
-    prefixValue.DeserializeFromString (prefix, MakeCcnxNameComponentsChecker ());
-    m_factory.Set ("Prefix", prefixValue);
-    
-    m_factory.Set ("PayloadSize", UintegerValue (virtualPayloadSize));
-}
-    
-void 
-CcnxProducerHelper::SetAttribute (std::string name, const AttributeValue &value)
-{
-    m_factory.Set (name, value);
-}
-    
-ApplicationContainer
-CcnxProducerHelper::Install (Ptr<Node> node)
-{
-    NS_LOG_FUNCTION(this);
-    return ApplicationContainer (InstallPriv (node));
-}
-
-ApplicationContainer
-CcnxProducerHelper::Install (std::string nodeName)
-{
-    Ptr<Node> node = Names::Find<Node> (nodeName);
-    return ApplicationContainer (InstallPriv (node));
-}
-    
-ApplicationContainer
-CcnxProducerHelper::Install (NodeContainer c)
-{
-    ApplicationContainer apps;
-    for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
-    {
-        apps.Add (InstallPriv (*i));
-    }
-        
-    return apps;
-}
-    
-    /*CcnxStackHelper::CreateAndAggregateObjectFromTypeId (Ptr<Node> node, const std::string typeId)
-    {
-        ObjectFactory factory;
-        factory.SetTypeId (typeId);
-        Ptr<Object> protocol = factory.Create <Object> ();
-        node->AggregateObject (protocol);
-    }*/
-Ptr<Application>
-CcnxProducerHelper::InstallPriv (Ptr<Node> node)
-{
-    NS_LOG_INFO ("InstallPriv started");
-    Ptr<CcnxProducer> app = m_factory.Create<CcnxProducer> ();        
-    node->AddApplication (app);
-
-    /*Ptr<CcnxLocalFace> localFace = Create<CcnxLocalFace> ();
-    localFace->SetNode(node);
-        
-    //CreateAndAggregateObjectFromTypeId (node, "ns3::CcnxL3Protocol");
-    ObjectFactory factory;
-    factory.SetTypeId("ns3::CcnxL3Protocol");
-    Ptr<Object> protocol = factory.Create<Object> ();
-    node->AggregateObject(protocol);
-    
-    Ptr<Ccnx> ccnx = node->GetObject<Ccnx> ();
-    
-    if (ccnx == NULL)
-    {
-        NS_FATAL_ERROR ("CcnxProducerHelper::InstallPriv (): Getting Ccnx " 
-                        "a CcnxStack must be installed on the node");
-        return 0;
-    }
-
-    // m_factory.Set ("Face", PointerValue (localFace));
-    m_factory.Set ("Ccnx", PointerValue (ccnx));
-    Ptr<CcnxProducer> app = m_factory.Create<CcnxProducer> ();
-
-    //app->m_ccnx->m_contentStore->SetMaxSize(app->GetStoreCapacity());
-    localFace->RegisterProtocolHandler (MakeCallback (&CcnxProducer::HandlePacket, app));
-    localFace->SetUp();
-        
-    node->AddApplication (app);*/
-        
-    return app;
-}
-}
diff --git a/helper/ccnx-producer-helper.h b/helper/ccnx-producer-helper.h
deleted file mode 100644
index 31f76da..0000000
--- a/helper/ccnx-producer-helper.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
- */
-
-#ifndef CCNX_PRODUCER_HELPER_H
-#define CCNX_PRODUCER_HELPER_H
-
-#include "ns3/object-factory.h"
-#include "ns3/attribute.h"
-#include "ns3/node-container.h"
-#include "ns3/application-container.h"
-#include "ns3/ptr.h"
-
-namespace ns3 
-{    
-/**
-* \brief A helper to make it easier to instantiate an ns3::CcnxProducer application
-* on a set of nodes.
-*/
-
-class Node;
-
-class CcnxProducerHelper
-{
-public:
-/**
-* Create an CcnxProducerHelper to make it easier to work with CcnxProducer applications
-*
-*/
-CcnxProducerHelper (const std::string &prefix, uint32_t virtualPayloadSize);
-        
-/**
-* Helper function used to set the underlying application attributes.
-*
-* \param name the name of the application attribute to set
-* \param value the value of the application attribute to set
-*/
-void SetAttribute (std::string name, const AttributeValue &value);
-        
-/**
-* Install an ns3::CcnxProducer on each node of the input container
-* configured with all the attributes set with SetAttribute.
-*
-* \param c NodeContainer of the set of nodes on which an CcnxProducer 
-* will be installed.
-* \returns Container of Ptr to the applications installed.
-*/
-ApplicationContainer Install (NodeContainer c);
-        
-/**
-* Install an ns3::CcnxProducer on the node configured with all the 
-* attributes set with SetAttribute.
-*
-* \param node The node on which an CcnxProducer will be installed.
-* \returns Container of Ptr to the applications installed.
-*/
-ApplicationContainer Install (Ptr<Node> node);
-        
-/**
-* Install an ns3::CcnxProducer on the node configured with all the 
-* attributes set with SetAttribute.
-*
-* \param nodeName The node on which an CcnxProducer will be installed.
-* \returns Container of Ptr to the applications installed.
-*/
-ApplicationContainer Install (std::string nodeName);
-        
-private:
-/**
-* \internal
-* Install an ns3::CcnxProducer on the node configured with all the 
-* attributes set with SetAttribute.
-*
-* \param node The node on which an CcnxProducer will be installed.
-* \returns Ptr to the application installed.
-*/
-Ptr<Application> InstallPriv (Ptr<Node> node);
-ObjectFactory m_factory;
-
-};
-}
-
-#endif
-
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index 18b2015..95c0b7f 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -27,6 +27,7 @@
 #include "ns3/assert.h"
 #include "ns3/uinteger.h"
 #include "ns3/double.h"
+#include "ns3/simulator.h"
 
 #include <boost/ref.hpp>
 
@@ -72,6 +73,7 @@
   , m_protocolHandler (MakeNullCallback<void,const Ptr<CcnxFace>&,const Ptr<const Packet>&> ())
   , m_ifup (false)
   , m_id ((uint32_t)-1)
+  , m_lastLeakTime (0)
 {
   NS_LOG_FUNCTION (this);
 
@@ -109,6 +111,8 @@
   
   if (!IsUp ())
     return false;
+
+  LeakBucket ();
   
   if (m_bucketMax > 0)
     {
@@ -155,10 +159,21 @@
 }
 
 void
-CcnxFace::LeakBucket (const Time &interval)
+CcnxFace::LeakBucket ()
 {
+  if (m_lastLeakTime.IsZero ())
+    {
+      m_lastLeakTime = Simulator::Now ();
+      return;
+    }
+
+  Time interval = Simulator::Now () - m_lastLeakTime;
   const double leak = m_bucketLeak * interval.ToDouble (Time::S);
-  m_bucket = std::max (0.0, m_bucket - leak);
+  if (leak >= 1.0)
+    {
+      m_bucket = std::max (0.0, m_bucket - leak);
+      m_lastLeakTime = Simulator::Now ();
+    }
 
   // NS_LOG_DEBUG ("max: " << m_bucketMax << ", Current bucket: " << m_bucket << ", leak size: " << leak << ", interval: " << interval << ", " << m_bucketLeak);
 }
@@ -177,12 +192,6 @@
   m_bucketLeak = leak;
 }
 
-void
-CcnxFace::LeakBucketByOnePacket ()
-{
-  m_bucket = std::max (0.0, m_bucket-1.0); 
-}
-
 // void
 // CcnxFace::SetMetric (uint16_t metric)
 // {
@@ -202,6 +211,7 @@
  * NetDevice states, such as found in real implementations
  * (where the device may be down but face state is still up).
  */
+
 bool 
 CcnxFace::IsUp (void) const
 {
diff --git a/model/ccnx-face.h b/model/ccnx-face.h
index b63b1e7..98969e2 100644
--- a/model/ccnx-face.h
+++ b/model/ccnx-face.h
@@ -178,16 +178,12 @@
   SetBucketLeak (double leak);
   
   /**
-   * @brief Leak the Interest allowance bucket by (1/interval) * m_bucketMax amount
-   *
-   * @param interval Time interval with which the bucket is leaked
+   * @brief Leak the Interest allowance bucket by (1/interval) * m_bucketMax amount,
+   * where interval is time between two consecutive calls of LeakBucket
    */
   void
-  LeakBucket (const Time &interval);
+  LeakBucket ();
 
-  void
-  LeakBucketByOnePacket ();
-  
   /**
    * \brief Compare two faces. Only two faces on the same node could be compared.
    *
@@ -228,7 +224,8 @@
 private:
   ProtocolHandler m_protocolHandler; ///< Callback via which packets are getting send to CCNx stack
   bool m_ifup; ///< \brief flag indicating that the interface is UP 
-  uint32_t m_id; ///< \brief id of the interface in CCNx stack (per-node uniqueness)  
+  uint32_t m_id; ///< \brief id of the interface in CCNx stack (per-node uniqueness)
+  Time m_lastLeakTime; 
 };
 
 std::ostream& operator<< (std::ostream& os, const CcnxFace &face);
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 5b55906..7f5f195 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -31,6 +31,7 @@
 #include "ns3/pointer.h"
 #include "ns3/boolean.h"
 #include "ns3/string.h"
+#include "ns3/simulator.h"
 
 #include "ns3/ccnx-header-helper.h"
 
@@ -74,12 +75,12 @@
                    MakePointerAccessor (&CcnxL3Protocol::SetForwardingStrategy, &CcnxL3Protocol::GetForwardingStrategy),
                    MakePointerChecker<CcnxForwardingStrategy> ())
     
-    .AddAttribute ("BucketLeakInterval",
-                   "Interval to leak buckets",
-                   StringValue ("100ms"),
-                   MakeTimeAccessor (&CcnxL3Protocol::GetBucketLeakInterval,
-                                     &CcnxL3Protocol::SetBucketLeakInterval),
-                   MakeTimeChecker ())
+    // .AddAttribute ("BucketLeakInterval",
+    //                "Interval to leak buckets",
+    //                StringValue ("100ms"),
+    //                MakeTimeAccessor (&CcnxL3Protocol::GetBucketLeakInterval,
+    //                                  &CcnxL3Protocol::SetBucketLeakInterval),
+    //                MakeTimeChecker ())
   ;
   return tid;
 }
@@ -133,9 +134,6 @@
 {
   NS_LOG_FUNCTION (this);
 
-  if (m_bucketLeakEvent.IsRunning ())
-    m_bucketLeakEvent.Cancel ();
-  
   for (CcnxFaceList::iterator i = m_faces.begin (); i != m_faces.end (); ++i)
     {
       *i = 0;
@@ -635,37 +633,37 @@
                            Simulator::Now () + m_pit->GetPitEntryPruningTimeout ()));
 }
 
-void
-CcnxL3Protocol::SetBucketLeakInterval (Time interval)
-{
-  m_bucketLeakInterval = interval;
+// void
+// CcnxL3Protocol::SetBucketLeakInterval (Time interval)
+// {
+//   m_bucketLeakInterval = interval;
   
-  if (m_bucketLeakEvent.IsRunning ())
-    m_bucketLeakEvent.Cancel ();
+//   if (m_bucketLeakEvent.IsRunning ())
+//     m_bucketLeakEvent.Cancel ();
 
-  m_bucketLeakEvent = Simulator::Schedule (m_bucketLeakInterval,
-                                           &CcnxL3Protocol::LeakBuckets, this);
-}
+//   m_bucketLeakEvent = Simulator::Schedule (m_bucketLeakInterval,
+//                                            &CcnxL3Protocol::LeakBuckets, this);
+// }
 
-Time
-CcnxL3Protocol::GetBucketLeakInterval () const
-{
-  return m_bucketLeakInterval;
-}
+// Time
+// CcnxL3Protocol::GetBucketLeakInterval () const
+// {
+//   return m_bucketLeakInterval;
+// }
 
-void 
-CcnxL3Protocol::LeakBuckets ()
-{
-  // NS_LOG_FUNCTION (this);
+// void 
+// CcnxL3Protocol::LeakBuckets ()
+// {
+//   // NS_LOG_FUNCTION (this);
 
-  BOOST_FOREACH (const Ptr<CcnxFace> &face, m_faces)
-    {
-      face->LeakBucket (m_bucketLeakInterval);
-    }
+//   BOOST_FOREACH (const Ptr<CcnxFace> &face, m_faces)
+//     {
+//       face->LeakBucket (m_bucketLeakInterval);
+//     }
 
-  m_bucketLeakEvent = Simulator::Schedule (m_bucketLeakInterval,
-                                           &CcnxL3Protocol::LeakBuckets,
-                                           this);
-}
+//   m_bucketLeakEvent = Simulator::Schedule (m_bucketLeakInterval,
+//                                            &CcnxL3Protocol::LeakBuckets,
+//                                            this);
+// }
 
 } //namespace ns3
diff --git a/model/ccnx-l3-protocol.h b/model/ccnx-l3-protocol.h
index 8ac24d6..d3e1b44 100644
--- a/model/ccnx-l3-protocol.h
+++ b/model/ccnx-l3-protocol.h
@@ -23,13 +23,11 @@
 
 #include <list>
 #include <vector>
-#include <stdint.h>
+
 #include "ns3/ptr.h"
 #include "ns3/net-device.h"
 #include "ns3/nstime.h"
-#include "ns3/simulator.h"
 
-#include "ns3/ccnx-producer-helper.h"
 #include "ccnx-content-store.h"
 #include "ccnx-pit.h"
 #include "ccnx-fib.h"
@@ -181,17 +179,17 @@
   CcnxL3Protocol(const CcnxL3Protocol &); ///< copy constructor is disabled
   CcnxL3Protocol &operator = (const CcnxL3Protocol &); ///< copy operator is disabled
 
-  /// \brief Set buckets leak interval
-  void
-  SetBucketLeakInterval (Time interval);
+  // /// \brief Set buckets leak interval
+  // void
+  // SetBucketLeakInterval (Time interval);
 
-  /// \brief Get buckets leak interval
-  Time
-  GetBucketLeakInterval () const;
+  // /// \brief Get buckets leak interval
+  // Time
+  // GetBucketLeakInterval () const;
   
-  /// \brief Periodically generate pre-calculated number of tokens (leak buckets)
-  void
-  LeakBuckets ();
+  // /// \brief Periodically generate pre-calculated number of tokens (leak buckets)
+  // void
+  // LeakBuckets ();
 
   void
   GiveUpInterest (const CcnxPitEntry &pitEntry,
@@ -209,9 +207,9 @@
   Ptr<CcnxPit> m_pit; ///< \brief PIT (pending interest table)
   Ptr<CcnxFib> m_fib; ///< \brief FIB  
   Ptr<CcnxContentStore> m_contentStore; ///< \brief Content store (for caching purposes only)
-
-  Time    m_bucketLeakInterval;
-  EventId m_bucketLeakEvent;
+  
+  // Time    m_bucketLeakInterval;
+  // EventId m_bucketLeakEvent;
 };
   
 } // Namespace ns3
diff --git a/model/ccnx-name-components.cc b/model/ccnx-name-components.cc
index 323a3f8..fd0064f 100644
--- a/model/ccnx-name-components.cc
+++ b/model/ccnx-name-components.cc
@@ -93,7 +93,8 @@
   istream_iterator<char> eos; // end of stream
   
   std::string component = "";
-  for (istream_iterator<char> it (is); it != eos; it++)
+  istream_iterator<char> it (is);
+  for (; it != eos; it++)
     {
       if (*it == '/')
         {
@@ -107,6 +108,9 @@
   if (component != "")
       components.Add (component);
 
+  is.clear (); 
+  // NS_LOG_ERROR (components << ", bad: " << is.bad () <<", fail: " << is.fail ());
+  
   return is;
 }
 
diff --git a/wscript b/wscript
index 197cc0c..980468a 100644
--- a/wscript
+++ b/wscript
@@ -54,13 +54,10 @@
 
     headers.source = [
         "helper/ccnx-stack-helper.h",
-        "helper/ccnx-producer-helper.h",
-        "helper/ccnx-consumer-helper.h",
+        "helper/ccnx-app-helper.h",
         "helper/ccnx-header-helper.h",
 
         "apps/ccnx-app.h",
-        # "apps/ccnx-consumer.h",
-        # "apps/ccnx-producer.h",
 
         "model/hash-helper.h",
         "model/ccnx.h",
@@ -70,6 +67,9 @@
         "model/ccnx-content-object-header.h",
         "model/ccnx-name-components.h",
         "model/ccnx-fib.h",
+
+        "utils/spring-mobility-model.h",
+        "utils/spring-mobility-helper.h",
         
         "helper/ccnx-face-container.h",
         "model/rocketfuel-weights-reader.h",
@@ -95,9 +95,6 @@
         obj = bld.create_ns3_program('ccnx-grid', ['NDNabstraction', 'point-to-point-layout'])
         obj.source = 'examples/ccnx-grid.cc'
 
-        obj = bld.create_ns3_program('syntactic-topology', ['NDNabstraction', 'point-to-point-layout'])
-        obj.source = 'examples/syntactic-topology-ndnabstraction.cc'
-
         obj = bld.create_ns3_program('annotated-topology', ['NDNabstraction', 'point-to-point-layout'])
         obj.source = 'examples/annotated-topology-read-example.cc'