diff --git a/model/ccnx-name-components.cc b/model/ccnx-name-components.cc
index 1014f3d..303e987 100644
--- a/model/ccnx-name-components.cc
+++ b/model/ccnx-name-components.cc
@@ -29,6 +29,10 @@
 
 ATTRIBUTE_HELPER_CPP (CcnxNameComponents);
 
+CcnxNameComponents::CcnxNameComponents (/* root */)
+{
+}
+
 CcnxNameComponents::CcnxNameComponents (const string &s)
 {
   m_prefix.push_back (s);
diff --git a/model/name-components.cc b/model/name-components.cc
deleted file mode 100644
index 7dde99f..0000000
--- a/model/name-components.cc
+++ /dev/null
@@ -1,90 +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 "name-components.h"
-
-#include <iostream>
-
-using namespace std;
-
-namespace ns3 {
-
-CcnxNameComponents::CcnxNameComponents ()
-{
-  // m_value = ccn_charbuf_create ();
-  // ccn_name_init(m_value);
-}
-
-CcnxNameComponents::CcnxNameComponents (const string &s)
-{
-  // m_value = ccn_charbuf_create ();
-  // ccn_name_init(m_value);
-  // (*this) (s);
-  m_prefix.push_back (s);
-}
-
-CcnxNameComponents::~CcnxNameComponents ()
-{
-  // ccn_charbuf_destroy(&m_value);
-}
-
-const std::list<std::string> &
-CcnxNameComponents::GetComponents () const
-{
-  return m_prefix;
-}
-
-  
-// const ccn_charbuf*
-// Components::GetName () const
-// {
-//   return m_value;
-// }
-
-CcnxNameComponents&
-CcnxNameComponents::operator () (const string &s)
-{
-  // ccn_name_append_str (m_value,s.c_str());
-  m_prefix.push_back (s);
-  return *this;
-}
-
-// Components::operator const unsigned char* ()
-// {
-//   return m_value->buf;
-// }
-
-void
-CcnxNameComponents::Print (std::ostream &os) const
-{
-  for (const_iterator i=m_prefix.begin(); i!=m_prefix.end(); i++)
-    {
-      os << "/" << *i;
-    }
-}
-  
-std::ostream &
-operator << (std::ostream &os, const CcnxNameComponents &components)
-{
-  components.Print (os);
-  return os;
-}
-}
-
diff --git a/model/name-components.h b/model/name-components.h
deleted file mode 100644
index 55cd5ae..0000000
--- a/model/name-components.h
+++ /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>
- */
-
-#ifndef _NDN_NAME_COMPONENTS_H_
-#define _NDN_NAME_COMPONENTS_H_
-
-#include "ns3/simple-ref-count.h"
-#include "ns3/attribute.h"
-#include "ns3/attribute-helper.h"
-
-#include <string>
-#include <algorithm>
-#include <list>
-#include "ns3/object.h"
-
-namespace ns3 {
-
-class CcnxNameComponents : public Object
-
-{
-public:
-  CcnxNameComponents ();
-  CcnxNameComponents (const std::string &s);
-  ~CcnxNameComponents ();
-  
-  inline void
-  Add (const std::string &s);
-       
-  CcnxNameComponents&
-  operator () (const std::string &s);
-
-  const std::list<std::string> &
-  GetComponents () const;
-  
-  // virtual uint32_t
-  // GetSerializedSize (void) const;
-
-  // virtual void
-  // Serialize (Buffer::Iterator start) const;
-
-  // virtual uint32_t
-  // Deserialize (Buffer::Iterator start);
-
-  void Print (std::ostream &os) const;
-
-  inline size_t
-  size () const;
-
-  inline bool
-  operator== (const CcnxNameComponents &prefix) const;
-
-  inline bool
-  operator< (const CcnxNameComponents &prefix) const;
-  
-private:
-  std::list<std::string> m_prefix;
-
-  typedef std::list<std::string>::iterator iterator;
-  typedef std::list<std::string>::const_iterator const_iterator;
-};
-
-std::ostream & operator << (std::ostream &os, const CcnxNameComponents &components);
-
-size_t
-CcnxNameComponents::size () const
-{
-  return m_prefix.size ();
-}
-  
-void
-CcnxNameComponents::Add (const std::string &s)
-{
-  (*this) (s);
-}
-
-bool
-CcnxNameComponents::operator== (const CcnxNameComponents &prefix) const
-{
-  if (m_prefix.size () != prefix.m_prefix.size ())
-    return false;
-  
-  return std::equal (m_prefix.begin (), m_prefix.end (), prefix.m_prefix.begin ());
-}
-
-bool
-CcnxNameComponents::operator< (const CcnxNameComponents &prefix) const
-{
-  return std::lexicographical_compare (m_prefix.begin (), m_prefix.end (),
-                                       prefix.m_prefix.begin (), prefix.m_prefix.end ());
-}
-
-    
-/**
-* \class ns3::ComponentsValue
-* \brief hold objects of type ns3:CcnxNameComponents
-*/
-ATTRIBUTE_VALUE_DEFINE (CcnxNameComponents);
-ATTRIBUTE_ACCESSOR_DEFINE (CcnxNameComponents);
-ATTRIBUTE_CHECKER_DEFINE (CcnxNameComponents);
-} // namespace ns3
-
-#endif // _NDN_NAME_COMPONENTS_H_
-
