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
diff --git a/model/ndn_nonceheader.h b/model/ndn_nonceheader.h
new file mode 100644
index 0000000..f12abec
--- /dev/null
+++ b/model/ndn_nonceheader.h
@@ -0,0 +1,36 @@
+//
+//  ndn_nonceheader.h
+//  Abstraction
+//
+//  Created by Ilya Moiseenko on 04.08.11.
+//  Copyright 2011 UCLA. All rights reserved.
+//
+
+#include "ns3/header.h"
+#include <iostream>
+
+namespace ns3
+{
+    namespace NDNabstraction
+    {
+        class NonceHeader: public Header
+        {
+        public:
+            NonceHeader();
+            NonceHeader(uint32_t nonce);
+            uint32_t GetValue();
+            
+            
+            // Header serialization/deserialization
+            static TypeId GetTypeId ();
+            TypeId GetInstanceTypeId () const;
+            uint32_t GetSerializedSize () const;
+            void Serialize (Buffer::Iterator start) const;
+            uint32_t Deserialize (Buffer::Iterator start);
+            void Print (std::ostream &os) const;
+            
+        private:
+            uint32_t m_value;
+        };
+    }
+}
\ No newline at end of file
diff --git a/model/ndn_timeoutheader.cc b/model/ndn_timeoutheader.cc
new file mode 100644
index 0000000..77afdec
--- /dev/null
+++ b/model/ndn_timeoutheader.cc
@@ -0,0 +1,78 @@
+//
+//  ndn_timeoutheader.cpp
+//  Abstraction
+//
+//  Created by Ilya Moiseenko on 04.08.11.
+//  Copyright 2011 UCLA. All rights reserved.
+//
+
+#include "ndn_timeoutheader.h"
+
+namespace ns3 
+{
+namespace NDNabstraction
+{
+    NS_OBJECT_ENSURE_REGISTERED (TimeoutHeader);
+    
+    TimeoutHeader::TimeoutHeader()
+    {
+        m_value = 4000;
+    }
+    
+    TimeoutHeader::TimeoutHeader (uint32_t timeout) 
+    {
+        m_value = timeout;
+    }
+    
+    TypeId
+    TimeoutHeader::GetTypeId ()
+    {
+        static TypeId tid = TypeId ("ns3::NDNabstraction::TimeoutHeader")
+        .SetParent<Header> ()
+        .AddConstructor<TimeoutHeader> ()
+        ;
+        return tid;
+    }
+    
+    TypeId
+    TimeoutHeader::GetInstanceTypeId () const
+    {
+        return GetTypeId ();
+    }
+    
+    uint32_t
+    TimeoutHeader::GetSerializedSize () const
+    {
+        return 4;
+    }
+    
+    void
+    TimeoutHeader::Serialize (Buffer::Iterator i) const
+    {
+        i.WriteU32 ((uint32_t) m_value);
+    }
+    
+    uint32_t
+    TimeoutHeader::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
+    TimeoutHeader::Print (std::ostream &os) const
+    {
+        os << m_value;
+    }
+    
+    uint32_t
+    TimeoutHeader::GetValue()
+    {
+        return m_value;
+    }
+}    
+}
\ No newline at end of file
diff --git a/model/ndn_timeoutheader.h b/model/ndn_timeoutheader.h
new file mode 100644
index 0000000..ffa158b
--- /dev/null
+++ b/model/ndn_timeoutheader.h
@@ -0,0 +1,37 @@
+//
+//  ndn_timeoutheader.h
+//  Abstraction
+//
+//  Created by Ilya Moiseenko on 04.08.11.
+//  Copyright 2011 UCLA. All rights reserved.
+//
+
+#include "ns3/header.h"
+#include <iostream>
+
+namespace ns3
+{
+namespace NDNabstraction
+{
+        
+    class TimeoutHeader: public Header
+    {
+    public:
+        TimeoutHeader();
+        TimeoutHeader(uint32_t timeout);
+        uint32_t GetValue();
+        
+        
+        // Header serialization/deserialization
+        static TypeId GetTypeId ();
+        TypeId GetInstanceTypeId () const;
+        uint32_t GetSerializedSize () const;
+        void Serialize (Buffer::Iterator start) const;
+        uint32_t Deserialize (Buffer::Iterator start);
+        void Print (std::ostream &os) const;
+        
+    private:
+        uint32_t m_value;
+    };
+}
+}
\ No newline at end of file
