diff --git a/test/content-object-test.cc b/test/content-object-test.cc
new file mode 100644
index 0000000..eff1304
--- /dev/null
+++ b/test/content-object-test.cc
@@ -0,0 +1,110 @@
+/* -*-  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 "ns3/test.h"
+#include "ns3/annotated-topology-reader.h"
+#include "ns3/ccnx-interest-header.h"
+#include "ns3/uinteger.h"
+#include "ns3/random-variable.h"
+#include <limits> 
+#include "ns3/ccnx-header-helper.h"
+#include "ns3/header.h"
+#include "ns3/ccnx-name-components.h"
+#include "ns3/nstime.h"
+#include "ns3/buffer.h"
+#include "ns3/log.h"
+#include "ns3/ccnx-content-object-header.h"
+#include <iostream>
+#include <fstream>
+#include <sstream>
+
+using namespace ns3;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("ContentObjectTest");
+
+class ContentObjectTest : public TestCase
+{
+public:
+    ContentObjectTest ();
+    virtual ~ContentObjectTest ();
+    
+private:
+    virtual void DoRun (void);
+};
+
+ContentObjectTest::ContentObjectTest ()
+: TestCase ("Content Obejct Serialization Test")
+{
+}
+
+ContentObjectTest::~ContentObjectTest ()
+{
+}
+
+void
+ContentObjectTest::DoRun(void)
+{
+    Packet::EnablePrinting ();
+	Packet::EnableChecking (); 
+    Packet packet (10);
+	
+    CcnxContentObjectHeader header;
+	CcnxContentObjectTail   trailer;
+	
+    Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
+    (*testname) ("iwant")("icecream");
+    header.SetName(testname);
+    
+	NS_LOG_INFO ("Source: \n" << header << trailer);
+    
+	packet.AddHeader (header);
+	packet.AddTrailer (trailer);
+    
+	// NS_LOG_INFO ("Deserialized packet: \n" << packet);
+    
+	NS_LOG_INFO ("Removing and deserializing individual headers");
+	
+    CcnxContentObjectHeader targetHeader;
+	CcnxContentObjectTail   targetTrailer;
+    
+	packet.RemoveHeader (targetHeader);
+	packet.RemoveTrailer (targetTrailer);
+    
+    
+    NS_TEST_ASSERT_MSG_EQ (targetHeader.GetName(), *testname, "Content Object name deserialization failed");
+    
+    NS_TEST_ASSERT_MSG_EQ (packet.GetSize(), 10, "Content Object size inequality");
+}
+
+class ContentObjectTestSuite : public TestSuite
+{
+public:
+    ContentObjectTestSuite ();
+};
+
+ContentObjectTestSuite::ContentObjectTestSuite ()
+: TestSuite ("content-object-test-suite", UNIT)
+{
+    SetDataDir (NS_TEST_SOURCEDIR);
+    AddTestCase (new ContentObjectTest);
+}
+
+static ContentObjectTestSuite suite;
diff --git a/test/interest-header-serialization-test.cc b/test/interest-header-serialization-test.cc
index dbdf0c3..62d83a4 100644
--- a/test/interest-header-serialization-test.cc
+++ b/test/interest-header-serialization-test.cc
@@ -43,15 +43,9 @@
 class InterestHeaderSerializationTest : public TestCase
 {
 public:
-    //static const uint32_t N_RUNS = 5;
-    //static const uint32_t N_BINS = 50;
-    //static const uint32_t N_MEASUREMENTS = 1000000;
-    
     InterestHeaderSerializationTest ();
     virtual ~InterestHeaderSerializationTest ();
     
-    //double ChiSquaredTest (UniformVariable &u);
-    
 private:
     virtual void DoRun (void);
 };
@@ -68,20 +62,8 @@
 void
 InterestHeaderSerializationTest::DoRun(void)
 {
-    //ReportStart();
-    //SetVerbose(true);
-    std::ostringstream msgStream;
-    msgStream << "Preved!";
+    Packet packet (0);
     
-    //NS_TEST_EXPECT_MSG_NE (true,false, "DIRECTORY = " <<NS_TEST_SOURCEDIR);
-    
-    /*ReportTestFailure ("DIRECTORY = ",  NS_TEST_SOURCEDIR, 
-                            "", "", 
-                            "", 0);*/
-    string str = NS_TEST_SOURCEDIR;
-    //str += "/hahaha";
-    //CreateDataDirFilename(str);
-    NS_LOG_INFO ("Test started");
     uint32_t randomNonce = UniformVariable().GetInteger(1, std::numeric_limits<uint32_t>::max ());
     Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
     (*testname) ("test") ("test2");
@@ -104,23 +86,14 @@
     interestHeader.SetMaxSuffixComponents(maxSuffixComponents);
     interestHeader.SetMinSuffixComponents(minSuffixComponents);
 
-    uint32_t size = interestHeader.GetSerializedSize();
-    //uint32_t size = 5;
-    NS_TEST_ASSERT_MSG_EQ (false, true, "GetSize = " << size);
-    Buffer buf(size);
-    Buffer::Iterator iter = buf.Begin ();
-    //interestHeader.
-    interestHeader.Serialize(iter);
-
-    iter = buf.Begin ();
+    //serialization
+    packet.AddHeader (interestHeader);
+	
+	//deserialization
     CcnxInterestHeader target;
-    target.Deserialize(iter);
+	packet.RemoveHeader (target);
+
     
-    /*if(target.GetNonce() == randomNonce)
-    {
-        
-        ReportCaseFailure();
-    }*/
     NS_TEST_ASSERT_MSG_EQ (target.GetNonce(), randomNonce, "Interest Header nonce deserialization failed");
     
     NS_TEST_ASSERT_MSG_EQ (target.GetName(), *testname, "Interest Header name deserialization failed");
