diff --git a/apps/ccnx-consumer.cc b/apps/ccnx-consumer.cc
index 5e39fd3..0e6ec9e 100644
--- a/apps/ccnx-consumer.cc
+++ b/apps/ccnx-consumer.cc
@@ -42,9 +42,9 @@
                     MakePointerAccessor (&CcnxConsumer::m_face),
                     MakePointerChecker<CcnxLocalFace> ())
     .AddAttribute ("InterestName","CcnxName of the Interest (use CcnxNameComponents)",
-                    PointerValue (CreateObject<CcnxNameComponents> ()),
-                    MakePointerAccessor (&CcnxConsumer::m_interestName),
-                    MakePointerChecker<CcnxNameComponents> ())
+                    CcnxNameComponentsValue (CcnxNameComponents ()),
+                    MakeCcnxNameComponentsAccessor (&CcnxConsumer::m_interestName),
+                    MakeCcnxNameComponentsChecker ())
     .AddAttribute ("LifeTime", "LifeTime fo interest packet",
                     TimeValue (Seconds (4.0)),
                     MakeTimeAccessor (&CcnxConsumer::m_interestLifeTime),
@@ -62,9 +62,9 @@
                     MakeBooleanAccessor(&CcnxConsumer::m_childSelector),
                     MakeBooleanChecker())
     .AddAttribute ("Exclude", "only simple name matching is supported (use CcnxNameComponents)",
-                   PointerValue (CreateObject<CcnxNameComponents> ()),
-                   MakePointerAccessor (&CcnxConsumer::m_exclude),
-                   MakePointerChecker<CcnxNameComponents> ())
+                   CcnxNameComponentsValue (CcnxNameComponents ()),
+                   MakeCcnxNameComponentsAccessor (&CcnxConsumer::m_exclude),
+                   MakeCcnxNameComponentsChecker ())
     .AddAttribute ("Initial Nonce", "If 0 then nonce is not used",
                     UintegerValue(1),
                     MakeUintegerAccessor(&CcnxConsumer::m_initialNonce),
@@ -138,10 +138,10 @@
     uint32_t randomNonce = UniformVariable().GetInteger(1, std::numeric_limits<uint32_t>::max ());
     CcnxInterestHeader interestHeader;
     interestHeader.SetNonce(randomNonce);
-    interestHeader.SetName(m_interestName);
+    interestHeader.SetName(Create<CcnxNameComponents> (m_interestName));
     interestHeader.SetInterestLifetime(m_interestLifeTime);
     interestHeader.SetChildSelector(m_childSelector);
-    interestHeader.SetExclude(m_exclude);
+    interestHeader.SetExclude(Create<CcnxNameComponents> (m_exclude));
     interestHeader.SetMaxSuffixComponents(m_maxSuffixComponents);
     interestHeader.SetMinSuffixComponents(m_minSuffixComponents);
         
diff --git a/apps/ccnx-consumer.h b/apps/ccnx-consumer.h
index a9a311f..ab12105 100644
--- a/apps/ccnx-consumer.h
+++ b/apps/ccnx-consumer.h
@@ -66,12 +66,12 @@
     virtual void StopApplication (void);     // Called at time specified by Stop
         
     Time m_offTime;
-    Ptr<CcnxNameComponents> m_interestName;
+    CcnxNameComponents m_interestName;
     Time m_interestLifeTime;
     int32_t m_minSuffixComponents;
     int32_t m_maxSuffixComponents;
     bool m_childSelector;
-    Ptr<CcnxNameComponents> m_exclude;
+    CcnxNameComponents m_exclude;
     uint32_t m_initialNonce;
         
     EventId         m_sendEvent;    // Eventid of pending "send packet" event
diff --git a/apps/ccnx-interest-sender.h b/apps/ccnx-interest-sender.h
index 256edd8..ad8de28 100644
--- a/apps/ccnx-interest-sender.h
+++ b/apps/ccnx-interest-sender.h
@@ -44,63 +44,63 @@
 class CcnxInterestSender: public Application
 {
 public: 
-    static TypeId GetTypeId (void);
+  static TypeId GetTypeId (void);
         
-    CcnxInterestSender ();
+  CcnxInterestSender ();
         
-    virtual ~CcnxInterestSender ();
+  virtual ~CcnxInterestSender ();
         
 protected:
-    virtual void DoDispose (void);
+  virtual void DoDispose (void);
 private:
-    // inherited from Application base class.
-    virtual void StartApplication (void);    // Called at time specified by Start
-    virtual void StopApplication (void);     // Called at time specified by Stop
+  // inherited from Application base class.
+  virtual void StartApplication (void);    // Called at time specified by Start
+  virtual void StopApplication (void);     // Called at time specified by Stop
         
-    //Time m_onTime;
-    Time m_offTime;
-    CcnxNameComponents m_interestName;
+  //Time m_onTime;
+  Time m_offTime;
+  CcnxNameComponents m_interestName;
   
-    Time m_interestLifeTime;
-    int32_t m_minSuffixComponents;
-    int32_t m_maxSuffixComponents;
-    bool m_childSelector;
-    CcnxNameComponents m_exclude;
-    uint32_t m_initialNonce;
+  Time m_interestLifeTime;
+  int32_t m_minSuffixComponents;
+  int32_t m_maxSuffixComponents;
+  bool m_childSelector;
+  CcnxNameComponents m_exclude;
+  uint32_t m_initialNonce;
     
-    //EventId         m_startStopEvent;     // Event id for next start or stop event
-    EventId         m_sendEvent;    // Eventid of pending "send packet" event
-    TypeId          m_tid;
-    Ptr<CcnxLocalFace> m_face;
+  //EventId         m_startStopEvent;     // Event id for next start or stop event
+  EventId         m_sendEvent;    // Eventid of pending "send packet" event
+  TypeId          m_tid;
+  Ptr<CcnxLocalFace> m_face;
         
-    //helpers
-    void CancelEvents ();
+  //helpers
+  void CancelEvents ();
         
-    void Construct (Ptr<Node> n,
-                    std::string tid,
-                    const Time& offtime,
-                    Ptr<CcnxLocalFace> face,
-                    Ptr<CcnxNameComponents> nameComponents,
-                    const Time& lifetime,
-                    const int32_t& minSuffixComponents,
-                    const int32_t& maxSuffixComponents,
-                    const bool childSelector,
-                    Ptr<CcnxNameComponents> exclude,
-                    const uint32_t& initialNonce
-                    );
+  void Construct (Ptr<Node> n,
+                  std::string tid,
+                  const Time& offtime,
+                  Ptr<CcnxLocalFace> face,
+                  Ptr<CcnxNameComponents> nameComponents,
+                  const Time& lifetime,
+                  const int32_t& minSuffixComponents,
+                  const int32_t& maxSuffixComponents,
+                  const bool childSelector,
+                  Ptr<CcnxNameComponents> exclude,
+                  const uint32_t& initialNonce
+                  );
     
-    // Event handlers
-    void StartSending ();
-    void StopSending ();
-    void SendPacket ();
+  // Event handlers
+  void StartSending ();
+  void StopSending ();
+  void SendPacket ();
         
 private:
-    void ScheduleNextTx ();
-    //void ScheduleStartEvent ();
-    //void ScheduleStopEvent ();
-    void ConnectionSucceeded (Ptr<Socket>);
-    void ConnectionFailed (Ptr<Socket>);
-    void Ignore (Ptr<Socket>);
+  void ScheduleNextTx ();
+  //void ScheduleStartEvent ();
+  //void ScheduleStopEvent ();
+  void ConnectionSucceeded (Ptr<Socket>);
+  void ConnectionFailed (Ptr<Socket>);
+  void Ignore (Ptr<Socket>);
         
 };
 }
diff --git a/apps/ccnx-producer.cc b/apps/ccnx-producer.cc
index 7fcd1da..24126b9 100644
--- a/apps/ccnx-producer.cc
+++ b/apps/ccnx-producer.cc
@@ -119,7 +119,7 @@
 {
     NS_LOG_FUNCTION_NOARGS ();
         
-    Simulator::Cancel (m_sendEvent);
+    // Simulator::Cancel (m_sendEvent);
 }
     
 /*void 
diff --git a/helper/ccnx-consumer-helper.cc b/helper/ccnx-consumer-helper.cc
index 5add077..b99e0b6 100644
--- a/helper/ccnx-consumer-helper.cc
+++ b/helper/ccnx-consumer-helper.cc
@@ -30,7 +30,7 @@
 CcnxConsumerHelper::CcnxConsumerHelper (Ptr<CcnxNameComponents> interestName)
 {
     m_factory.SetTypeId ("ns3::CcnxConsumer");
-    m_factory.Set ("InterestName", PointerValue (interestName));
+    m_factory.Set ("InterestName", CcnxNameComponentsValue (*interestName));
 }
     
 void 
@@ -80,4 +80,4 @@
         
     return app;
 }
-}
\ No newline at end of file
+}
