diff --git a/plugins/topology/patches/0001-topology-read-Several-extensions-of-TopologyReader.patch b/plugins/topology/patches/0001-topology-read-Several-extensions-of-TopologyReader.patch
new file mode 100644
index 0000000..ffaefe7
--- /dev/null
+++ b/plugins/topology/patches/0001-topology-read-Several-extensions-of-TopologyReader.patch
@@ -0,0 +1,146 @@
+From 19ebf81e3d32dbdda4ef06406c28566c6d771f9d Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Mon, 12 Dec 2011 18:01:12 -0800
+Subject: [PATCH 1/3] topology-read: Several extensions of TopologyReader
+
+---
+ src/topology-read/model/topology-reader.cc |   17 ++++++++++++++
+ src/topology-read/model/topology-reader.h  |   35 +++++++++++++++++++++++-----
+ 2 files changed, 46 insertions(+), 6 deletions(-)
+
+diff --git a/src/topology-read/model/topology-reader.cc b/src/topology-read/model/topology-reader.cc
+index b531a6d..82a8343 100644
+--- a/src/topology-read/model/topology-reader.cc
++++ b/src/topology-read/model/topology-reader.cc
+@@ -106,12 +106,23 @@ TopologyReader::Link::Link ()
+ {
+ }
+ 
++void
++TopologyReader::Link::SetNetDevices (Ptr<NetDevice> from, Ptr<NetDevice> to)
++{
++  m_fromNetDevice = from;
++  m_toNetDevice = to;
++}
+ 
+ Ptr<Node> TopologyReader::Link::GetFromNode (void) const
+ {
+   return m_fromPtr;
+ }
+ 
++Ptr<NetDevice> TopologyReader::Link::GetFromNetDevice (void) const
++{
++  return m_fromNetDevice;
++}
++
+ std::string
+ TopologyReader::Link::GetFromNodeName (void) const
+ {
+@@ -124,6 +135,12 @@ TopologyReader::Link::GetToNode (void) const
+   return m_toPtr;
+ }
+ 
++Ptr<NetDevice>
++TopologyReader::Link::GetToNetDevice (void) const
++{
++  return m_toNetDevice;
++}
++
+ std::string
+ TopologyReader::Link::GetToNodeName (void) const
+ {
+diff --git a/src/topology-read/model/topology-reader.h b/src/topology-read/model/topology-reader.h
+index 865b7d3..48c0c1d 100644
+--- a/src/topology-read/model/topology-reader.h
++++ b/src/topology-read/model/topology-reader.h
+@@ -32,6 +32,8 @@
+ 
+ namespace ns3 {
+ 
++class NetDevice;
++
+ /**
+  * \ingroup topology
+  *
+@@ -53,7 +55,7 @@ public:
+    */
+   class Link
+   {
+-public:
++  public:
+   /**
+    * \brief Constant iterator to scan the map of link attributes.
+    */
+@@ -66,14 +68,27 @@ public:
+      * \param toPtr Ptr to the node the link is directed to
+      * \param toName name of the node the link is directed to
+      */
+-    Link ( Ptr<Node> fromPtr, const std::string &fromName, Ptr<Node> toPtr, const std::string &toName );
++    Link (Ptr<Node> fromPtr, const std::string &fromName, Ptr<Node> toPtr, const std::string &toName);
+ 
+     /**
++     * \brief Set netdevices associated with the link
++     * \param from NetDevice associated with From node
++     * \param to NetDevice associated with To node
++     */
++    void
++    SetNetDevices (Ptr<NetDevice> from, Ptr<NetDevice> to);
++    
++    /**
+      * \brief Returns a Ptr<Node> to the "from" node of the link
+      * \return a Ptr<Node> to the "from" node of the link
+      */
+     Ptr<Node> GetFromNode (void) const;
+     /**
++     * \brief Returns a Ptr<NetDevice> of the "from" node of the link
++     * \return a Ptr<NetDevice> of the "from" node of the link
++     */
++    Ptr<NetDevice> GetFromNetDevice (void) const;
++    /**
+      * \brief Returns the name of the "from" node of the link
+      * \return the name of the "from" node of the link
+      */
+@@ -84,6 +99,11 @@ public:
+      */
+     Ptr<Node> GetToNode (void) const;
+     /**
++     * \brief Returns a Ptr<NetDevice> of the "to" node of the link
++     * \return a Ptr<NetDevice> of the "to" node of the link
++     */
++    Ptr<NetDevice> GetToNetDevice (void) const;
++    /**
+      * \brief Returns the name of the "to" node of the link
+      * \return the name of the "to" node of the link
+      */
+@@ -127,7 +147,9 @@ private:
+     Ptr< Node > m_fromPtr;
+     std::string m_toName;
+     Ptr< Node > m_toPtr;
+-    std::map<std::string, std::string> m_linkAttr;
++    Ptr< NetDevice > m_fromNetDevice;
++    Ptr< NetDevice > m_toNetDevice;
++    std::map<std::string, std::string > m_linkAttr;
+   };
+ 
+   /**
+@@ -195,13 +217,14 @@ private:
+    */
+   void AddLink (Link link);
+ 
++protected:
++  std::string m_fileName;
++  std::list<Link> m_linksList;
++
+ private:
+   TopologyReader (const TopologyReader&);
+   TopologyReader& operator= (const TopologyReader&);
+ 
+-  std::string m_fileName;
+-  std::list<Link> m_linksList;
+-
+   // end class TopologyReader
+ };
+ 
+-- 
+1.7.10.2
+
diff --git a/plugins/topology/patches/0002-topology-read-TopologyReader-and-derivatives-are-no-.patch b/plugins/topology/patches/0002-topology-read-TopologyReader-and-derivatives-are-no-.patch
new file mode 100644
index 0000000..db3f957
--- /dev/null
+++ b/plugins/topology/patches/0002-topology-read-TopologyReader-and-derivatives-are-no-.patch
@@ -0,0 +1,299 @@
+From cd1527f264045510fd79f3a6bd44ce5c48a8278d Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Tue, 13 Dec 2011 13:17:25 -0800
+Subject: [PATCH 2/3] topology-read: TopologyReader and derivatives are no
+ longer Objects
+
+To allow smart pointers, TopologyReader is just inherited from
+SimpleRefCount<TopologyReader> class
+---
+ src/topology-read/helper/topology-reader-helper.cc |    7 +++----
+ src/topology-read/helper/topology-reader-helper.h  |    5 ++---
+ src/topology-read/model/inet-topology-reader.cc    |   20 ++++++++++----------
+ src/topology-read/model/inet-topology-reader.h     |    2 +-
+ src/topology-read/model/orbis-topology-reader.cc   |   20 ++++++++++----------
+ src/topology-read/model/orbis-topology-reader.h    |    2 +-
+ .../model/rocketfuel-topology-reader.cc            |   20 ++++++++++----------
+ .../model/rocketfuel-topology-reader.h             |    3 +--
+ src/topology-read/model/topology-reader.cc         |   19 +++++++++----------
+ src/topology-read/model/topology-reader.h          |    8 +++-----
+ 10 files changed, 50 insertions(+), 56 deletions(-)
+
+diff --git a/src/topology-read/helper/topology-reader-helper.cc b/src/topology-read/helper/topology-reader-helper.cc
+index ea4a9b2..c4678d1 100644
+--- a/src/topology-read/helper/topology-reader-helper.cc
++++ b/src/topology-read/helper/topology-reader-helper.cc
+@@ -47,7 +47,6 @@ TopologyReaderHelper::SetFileType (const std::string fileType)
+   m_fileType = fileType;
+ }
+ 
+-
+ Ptr<TopologyReader>
+ TopologyReaderHelper::GetTopologyReader ()
+ {
+@@ -59,17 +58,17 @@ TopologyReaderHelper::GetTopologyReader ()
+       if (m_fileType == "Orbis")
+         {
+           NS_LOG_INFO ("Creating Orbis formatted data input.");
+-          m_inFile = CreateObject<OrbisTopologyReader> ();
++          m_inFile = Create<OrbisTopologyReader> ();
+         }
+       else if (m_fileType == "Inet")
+         {
+           NS_LOG_INFO ("Creating Inet formatted data input.");
+-          m_inFile = CreateObject<InetTopologyReader> ();
++          m_inFile = Create<InetTopologyReader> ();
+         }
+       else if (m_fileType == "Rocketfuel")
+         {
+           NS_LOG_INFO ("Creating Rocketfuel formatted data input.");
+-          m_inFile = CreateObject<RocketfuelTopologyReader> ();
++          m_inFile = Create<RocketfuelTopologyReader> ();
+         }
+       else
+         {
+diff --git a/src/topology-read/helper/topology-reader-helper.h b/src/topology-read/helper/topology-reader-helper.h
+index c4bfbbe..c1cc198 100644
+--- a/src/topology-read/helper/topology-reader-helper.h
++++ b/src/topology-read/helper/topology-reader-helper.h
+@@ -22,11 +22,10 @@
+ #ifndef TOPOLOGY_READER_HELPER_H
+ #define TOPOLOGY_READER_HELPER_H
+ 
+-#include "ns3/topology-reader.h"
+-#include <string>
+-
+ namespace ns3 {
+ 
++class TopologyReader;
++
+ /**
+  * \ingroup topology
+  *
+diff --git a/src/topology-read/model/inet-topology-reader.cc b/src/topology-read/model/inet-topology-reader.cc
+index ab1cc5d..10d1ac3 100644
+--- a/src/topology-read/model/inet-topology-reader.cc
++++ b/src/topology-read/model/inet-topology-reader.cc
+@@ -28,19 +28,19 @@
+ 
+ using namespace std;
+ 
+-namespace ns3 {
+-
+ NS_LOG_COMPONENT_DEFINE ("InetTopologyReader");
+ 
+-NS_OBJECT_ENSURE_REGISTERED (InetTopologyReader);
++namespace ns3 {
++
++// NS_OBJECT_ENSURE_REGISTERED (InetTopologyReader);
+ 
+-TypeId InetTopologyReader::GetTypeId (void)
+-{
+-  static TypeId tid = TypeId ("ns3::InetTopologyReader")
+-    .SetParent<Object> ()
+-  ;
+-  return tid;
+-}
++// TypeId InetTopologyReader::GetTypeId (void)
++// {
++//   static TypeId tid = TypeId ("ns3::InetTopologyReader")
++//     .SetParent<Object> ()
++//   ;
++//   return tid;
++// }
+ 
+ InetTopologyReader::InetTopologyReader ()
+ {
+diff --git a/src/topology-read/model/inet-topology-reader.h b/src/topology-read/model/inet-topology-reader.h
+index 31aa4a0..d235370 100644
+--- a/src/topology-read/model/inet-topology-reader.h
++++ b/src/topology-read/model/inet-topology-reader.h
+@@ -47,7 +47,7 @@ namespace ns3 {
+ class InetTopologyReader : public TopologyReader
+ {
+ public:
+-  static TypeId GetTypeId (void);
++  // static TypeId GetTypeId (void);
+ 
+   InetTopologyReader ();
+   virtual ~InetTopologyReader ();
+diff --git a/src/topology-read/model/orbis-topology-reader.cc b/src/topology-read/model/orbis-topology-reader.cc
+index 04dbaf9..bdcd139 100644
+--- a/src/topology-read/model/orbis-topology-reader.cc
++++ b/src/topology-read/model/orbis-topology-reader.cc
+@@ -29,19 +29,19 @@
+ 
+ using namespace std;
+ 
+-namespace ns3 {
+-
+ NS_LOG_COMPONENT_DEFINE ("OrbisTopologyReader");
+ 
+-NS_OBJECT_ENSURE_REGISTERED (OrbisTopologyReader);
++namespace ns3 {
++
++// NS_OBJECT_ENSURE_REGISTERED (OrbisTopologyReader);
+ 
+-TypeId OrbisTopologyReader::GetTypeId (void)
+-{
+-  static TypeId tid = TypeId ("ns3::OrbisTopologyReader")
+-    .SetParent<Object> ()
+-  ;
+-  return tid;
+-}
++// TypeId OrbisTopologyReader::GetTypeId (void)
++// {
++//   static TypeId tid = TypeId ("ns3::OrbisTopologyReader")
++//     .SetParent<Object> ()
++//   ;
++//   return tid;
++// }
+ 
+ OrbisTopologyReader::OrbisTopologyReader ()
+ {
+diff --git a/src/topology-read/model/orbis-topology-reader.h b/src/topology-read/model/orbis-topology-reader.h
+index 21b32cf..b25db15 100644
+--- a/src/topology-read/model/orbis-topology-reader.h
++++ b/src/topology-read/model/orbis-topology-reader.h
+@@ -44,7 +44,7 @@ namespace ns3 {
+ class OrbisTopologyReader : public TopologyReader
+ {
+ public:
+-  static TypeId GetTypeId (void);
++  // static TypeId GetTypeId (void);
+ 
+   OrbisTopologyReader ();
+   virtual ~OrbisTopologyReader ();
+diff --git a/src/topology-read/model/rocketfuel-topology-reader.cc b/src/topology-read/model/rocketfuel-topology-reader.cc
+index d048148..c103271 100644
+--- a/src/topology-read/model/rocketfuel-topology-reader.cc
++++ b/src/topology-read/model/rocketfuel-topology-reader.cc
+@@ -28,19 +28,19 @@
+ #include "ns3/unused.h"
+ #include "rocketfuel-topology-reader.h"
+ 
+-namespace ns3 {
+-
+ NS_LOG_COMPONENT_DEFINE ("RocketfuelTopologyReader");
+ 
+-NS_OBJECT_ENSURE_REGISTERED (RocketfuelTopologyReader);
++namespace ns3 {
++
++// NS_OBJECT_ENSURE_REGISTERED (RocketfuelTopologyReader);
+ 
+-TypeId RocketfuelTopologyReader::GetTypeId (void)
+-{
+-  static TypeId tid = TypeId ("ns3::RocketfuelTopologyReader")
+-    .SetParent<Object> ()
+-  ;
+-  return tid;
+-}
++// TypeId RocketfuelTopologyReader::GetTypeId (void)
++// {
++//   static TypeId tid = TypeId ("ns3::RocketfuelTopologyReader")
++//     .SetParent<Object> ()
++//   ;
++//   return tid;
++// }
+ 
+ RocketfuelTopologyReader::RocketfuelTopologyReader ()
+ {
+diff --git a/src/topology-read/model/rocketfuel-topology-reader.h b/src/topology-read/model/rocketfuel-topology-reader.h
+index afb667d..c512ea0 100644
+--- a/src/topology-read/model/rocketfuel-topology-reader.h
++++ b/src/topology-read/model/rocketfuel-topology-reader.h
+@@ -21,7 +21,6 @@
+ #ifndef ROCKETFUEL_TOPOLOGY_READER_H
+ #define ROCKETFUEL_TOPOLOGY_READER_H
+ 
+-#include "ns3/nstime.h"
+ #include "topology-reader.h"
+ 
+ namespace ns3 {
+@@ -43,7 +42,7 @@ namespace ns3 {
+ class RocketfuelTopologyReader : public TopologyReader
+ {
+ public:
+-  static TypeId GetTypeId (void);
++  // static TypeId GetTypeId (void);
+ 
+   RocketfuelTopologyReader ();
+   virtual ~RocketfuelTopologyReader ();
+diff --git a/src/topology-read/model/topology-reader.cc b/src/topology-read/model/topology-reader.cc
+index 82a8343..a2e66cb 100644
+--- a/src/topology-read/model/topology-reader.cc
++++ b/src/topology-read/model/topology-reader.cc
+@@ -19,24 +19,23 @@
+  * Author: Valerio Sartini (valesar@gmail.com)
+  */
+ 
+-#include "ns3/log.h"
+-
+ #include "topology-reader.h"
+ 
++#include "ns3/log.h"
+ 
+ namespace ns3 {
+ 
+ NS_LOG_COMPONENT_DEFINE ("TopologyReader");
+ 
+-NS_OBJECT_ENSURE_REGISTERED (TopologyReader);
++// NS_OBJECT_ENSURE_REGISTERED (TopologyReader);
+ 
+-TypeId TopologyReader::GetTypeId (void)
+-{
+-  static TypeId tid = TypeId ("ns3::TopologyReader")
+-    .SetParent<Object> ()
+-  ;
+-  return tid;
+-}
++// TypeId TopologyReader::GetTypeId (void)
++// {
++//   static TypeId tid = TypeId ("ns3::TopologyReader")
++//     .SetParent<Object> ()
++//   ;
++//   return tid;
++// }
+ 
+ TopologyReader::TopologyReader ()
+ {
+diff --git a/src/topology-read/model/topology-reader.h b/src/topology-read/model/topology-reader.h
+index 48c0c1d..94eb37a 100644
+--- a/src/topology-read/model/topology-reader.h
++++ b/src/topology-read/model/topology-reader.h
+@@ -22,13 +22,11 @@
+ #ifndef TOPOLOGY_READER_H
+ #define TOPOLOGY_READER_H
+ 
+-#include <string>
+ #include <map>
+ #include <list>
+ 
+-#include "ns3/object.h"
+ #include "ns3/node-container.h"
+-
++#include "ns3/simple-ref-count.h"
+ 
+ namespace ns3 {
+ 
+@@ -42,7 +40,7 @@ class NetDevice;
+  * This interface perform the shared tasks among all possible input file readers.
+  * Each different file format is handled by its own topology reader.
+  */
+-class TopologyReader : public Object
++class TopologyReader : public SimpleRefCount<TopologyReader>
+ {
+ 
+ public:
+@@ -157,7 +155,7 @@ private:
+    */
+   typedef std::list< Link >::const_iterator ConstLinksIterator;
+ 
+-  static TypeId GetTypeId (void);
++  // static TypeId GetTypeId (void);
+ 
+   TopologyReader ();
+   virtual ~TopologyReader ();
+-- 
+1.7.10.2
+
diff --git a/plugins/topology/patches/0003-topology-read-Making-default-constructor-for-Topolog.patch b/plugins/topology/patches/0003-topology-read-Making-default-constructor-for-Topolog.patch
new file mode 100644
index 0000000..1dcafa3
--- /dev/null
+++ b/plugins/topology/patches/0003-topology-read-Making-default-constructor-for-Topolog.patch
@@ -0,0 +1,35 @@
+From 4fd8af52681dc3ab641e93a28b8f2c044272bb16 Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Thu, 19 Jan 2012 16:57:13 -0800
+Subject: [PATCH 3/3] topology-read: Making default constructor for
+ TopologyReader::Link public.
+
+This is necessary for some STL containers operations.
+---
+ src/topology-read/model/topology-reader.h |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/topology-read/model/topology-reader.h b/src/topology-read/model/topology-reader.h
+index 94eb37a..d748989 100644
+--- a/src/topology-read/model/topology-reader.h
++++ b/src/topology-read/model/topology-reader.h
+@@ -59,6 +59,8 @@ public:
+    */
+     typedef std::map<std::string, std::string>::const_iterator ConstAttributesIterator;
+ 
++    Link (); // default constructor
++    
+     /**
+      * \brief Constructor
+      * \param fromPtr Ptr to the node the link is orginating from
+@@ -140,7 +142,6 @@ public:
+     ConstAttributesIterator AttributesEnd (void);
+ 
+ private:
+-    Link ();
+     std::string m_fromName;
+     Ptr< Node > m_fromPtr;
+     std::string m_toName;
+-- 
+1.7.10.2
+
diff --git a/plugins/topology/rocketfuel-weights-reader.cc b/plugins/topology/rocketfuel-weights-reader.cc
index acd3235..f1c4cc8 100644
--- a/plugins/topology/rocketfuel-weights-reader.cc
+++ b/plugins/topology/rocketfuel-weights-reader.cc
@@ -45,7 +45,6 @@
 
 #include <boost/foreach.hpp>
 #include <boost/lexical_cast.hpp>
-#include "../utils/spring-mobility-helper.h"
 
 #include <iomanip>
 #include <set>
@@ -60,7 +59,13 @@
   : AnnotatedTopologyReader (path)
 {
   NS_LOG_FUNCTION (this);
-  SetMobilityModel ("ns3::SpringMobilityModel");
+
+  // TypeId tid;
+  // bool ok = TypeId::LookupByNameFailSafe ("ns3::SpringMobilityModel", &tid);
+  // if (ok)
+  //   SetMobilityModel ("ns3::SpringMobilityModel");
+  // else
+  //   Use default mobility model (supplied by AnnotatedTopologyReader)
 }
     
 RocketfuelWeightsReader::~RocketfuelWeightsReader ()
@@ -174,7 +179,7 @@
 {
   ApplySettings ();
 
-  SpringMobilityHelper::InstallSprings (LinksBegin (), LinksEnd ());
+  // SpringMobilityHelper::InstallSprings (LinksBegin (), LinksEnd ());
 }
 
 } /* namespace ns3 */
diff --git a/wscript b/wscript
index 00eec0e..bded3d0 100644
--- a/wscript
+++ b/wscript
@@ -9,6 +9,9 @@
 
 def options(opt):
     opt.tool_options('boost', tooldir=["waf-tools"])
+    opt.add_option('--enable-ndn-plugins',
+                   help=("Enable NDN plugins (may require patching)"),
+                   dest='enable_ndn_plugins')
 
 def configure(conf):
     try:
@@ -23,6 +26,10 @@
         conf.env['ENABLE_NDN_ABSTRACT']=False;
         conf.env['MODULES_NOT_BUILT'].append('NDNabstraction')
         return
+
+    conf.env['NDN_plugins'] = []
+    if Options.options.enable_ndn_plugins:
+        conf.env['NDN_plugins'] = Options.options.enable_ndn_plugins.split(',')
     
     conf.env['ENABLE_NDN_ABSTRACT']=True;
 
@@ -89,6 +96,20 @@
         # "utils/annotated-topology-reader.h",
         ]
 
+    if 'topology' in bld.env['NDN_plugins']:
+        headers.source.extend ([
+            "plugins/topology/rocketfuel-weights-reader.h",
+            "plugins/topology/annotated-topology-reader.h",
+            ])
+        module.source.extend (bld.path.ant_glob(['plugins/topology/*.cc']))
+
+    if 'mobility' in bld.env['NDN_plugins']:
+        headers.source.extend ([
+            "plugins/mobility/spring-mobility-model.h",
+            "plugins/mobility/spring-mobility-helper.h",
+            ])
+        module.source.extend (bld.path.ant_glob(['plugins/mobility/*.cc']))
+    
     tests.source = bld.path.ant_glob('test/*.cc');
 
     if bld.env.ENABLE_EXAMPLES:
