diff --git a/model/ccnx-content-object-header.h b/model/ccnx-content-object-header.h
new file mode 100644
index 0000000..86bcc59
--- /dev/null
+++ b/model/ccnx-content-object-header.h
@@ -0,0 +1,106 @@
+/* -*-  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>
+ *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef _CCNX_CONTENT_OBJECT_HEADER_H_
+#define _CCNX_CONTENT_OBJECT_HEADER_H_
+
+#include "ns3/integer.h"
+#include "ns3/header.h"
+
+#include <string>
+#include <vector>
+#include <list>
+
+#include "name-components.h"
+
+namespace ns3
+{
+
+/**
+ * CCNx XML definition of ContentObject
+ * 
+ * Only few important fields are actually implemented in the simulation
+ *
+ *
+ * NDN ContentObjectHeader and routines to serialize/deserialize
+ *
+ *  Simplifications:
+ */
+  
+class CcnxContentObjectHeader : public Header
+{
+public:
+  /**
+   * Constructor
+   *
+   * Creates a null header
+   **/
+  CcnxContentObjectHeader ();
+
+  /**
+   * \brief Set interest name
+   *
+   * Sets name of the interest. For example, SetName( Name::Components("prefix")("postfix") );
+   **/
+  void
+  SetName (const Ptr<Name::Components> &name);
+
+  const Name::Components&
+  GetName () const;
+
+  // void
+  // SetSignature ();
+
+  // ?
+  // GetSignature () const;
+
+  // void
+  // SetSignedInfo ();
+
+  // ?
+  // GetSignedInfo () const;
+
+  // void
+  // SetContent ();
+
+  // ?
+  // GetContent ();
+  
+  //////////////////////////////////////////////////////////////////
+  
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+  virtual void Print (std::ostream &os) const;
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (Buffer::Iterator start) const;
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+private:
+  Ptr<Name::Components> m_name;
+  // m_signature;
+  // m_signedInfo;
+  // ? content
+};
+
+} // namespace NDNabstraction
+} // namespace ns3
+
+#endif // _CCNX_CONTENT_OBJECT_HEADER_H_
