diff --git a/model/ndn_nonceheader.cc b/model/ndn_nonceheader.cc
new file mode 100644
index 0000000..7d26a7d
--- /dev/null
+++ b/model/ndn_nonceheader.cc
@@ -0,0 +1,79 @@
+//
+//  ndn_nonceheader.cpp
+//  Abstraction
+//
+//  Created by Ilya Moiseenko on 04.08.11.
+//  Copyright 2011 UCLA. All rights reserved.
+//
+
+#include "ndn_nonceheader.h"
+
+
+namespace ns3 
+{
+    namespace NDNabstraction
+    {
+        NS_OBJECT_ENSURE_REGISTERED (NonceHeader);
+        
+        NonceHeader::NonceHeader()
+        {
+            m_value = 0;
+        }
+        
+        NonceHeader::NonceHeader (uint32_t nonce) 
+        {
+            m_value = nonce;
+        }
+        
+        TypeId
+        NonceHeader::GetTypeId ()
+        {
+            static TypeId tid = TypeId ("ns3::NDNabstraction::NonceHeader")
+            .SetParent<Header> ()
+            .AddConstructor<NonceHeader> ()
+            ;
+            return tid;
+        }
+        
+        TypeId
+        NonceHeader::GetInstanceTypeId () const
+        {
+            return GetTypeId ();
+        }
+        
+        uint32_t
+        NonceHeader::GetSerializedSize () const
+        {
+            return 4;
+        }
+        
+        void
+        NonceHeader::Serialize (Buffer::Iterator i) const
+        {
+            i.WriteU32 ((uint32_t) m_value);
+        }
+        
+        uint32_t
+        NonceHeader::Deserialize (Buffer::Iterator start)
+        {
+            Buffer::Iterator i = start;
+            m_value = i.ReadU32 ();
+            
+            uint32_t dist = i.GetDistanceFrom (start);
+            NS_ASSERT (dist == GetSerializedSize ());
+            return dist;
+        }
+        
+        void
+        NonceHeader::Print (std::ostream &os) const
+        {
+            os << m_value;
+        }
+        
+        uint32_t
+        NonceHeader::GetValue()
+        {
+            return m_value;
+        }
+    }    
+}
\ No newline at end of file
