diff --git a/helper/ccnb-parser/visitors/ccnb-parser-content-object-visitor.cc b/helper/ccnb-parser/visitors/ccnb-parser-content-object-visitor.cc
index 4325e67..94732f7 100644
--- a/helper/ccnb-parser/visitors/ccnb-parser-content-object-visitor.cc
+++ b/helper/ccnb-parser/visitors/ccnb-parser-content-object-visitor.cc
@@ -20,17 +20,22 @@
 
 #include "ccnb-parser-content-object-visitor.h"
 #include "ccnb-parser-name-components-visitor.h"
+#include "ccnb-parser-non-negative-integer-visitor.h"
+#include "ccnb-parser-timestamp-visitor.h"
 
 #include "../syntax-tree/ccnb-parser-block.h"
 #include "../syntax-tree/ccnb-parser-dtag.h"
 
 #include "ns3/ccnx-name-components.h"
 #include "ns3/assert.h"
+#include "ns3/log.h"
 
 #include "ns3/ccnx-content-object-header.h"
 
 #include <boost/foreach.hpp>
 
+NS_LOG_COMPONENT_DEFINE ("CcnbParserContentObjectVisitor");
+
 namespace ns3 {
 namespace CcnbParser {
 
@@ -41,6 +46,8 @@
   // uint32_t n.m_dtag;
   // std::list<Ptr<Block> > n.m_nestedBlocks;
   static NameComponentsVisitor nameComponentsVisitor;
+  static NonNegativeIntegerVisitor nonNegativeIntegerVisitor;
+  static TimestampVisitor          timestampVisitor;
   
   CcnxContentObjectHeader &contentObject = *(boost::any_cast<CcnxContentObjectHeader*> (param));
   
@@ -65,14 +72,51 @@
         contentObject.SetName (name);
         break;
       }
+
     case CCN_DTAG_Signature: // ignoring
       break;
-    case CCN_DTAG_SignedInfo: // ignoring
+
+    case CCN_DTAG_SignedInfo:
+      // process nested blocks
+      BOOST_FOREACH (Ptr<Block> block, n.m_nestedTags)
+        {
+          block->accept (*this, param);
+        }      
       break;
+      
+    case CCN_DTAG_Timestamp:
+      NS_LOG_DEBUG ("Timestamp");
+      if (n.m_nestedTags.size()!=1) // should be exactly one UDATA inside this tag
+        throw CcnbDecodingException ();
+
+      contentObject.SetTimestamp (
+               boost::any_cast<Time> (
+                                      (*n.m_nestedTags.begin())->accept(
+                                                                        timestampVisitor
+                                                                        )));
+      break;
+
+    case CCN_DTAG_FreshnessSeconds:
+      NS_LOG_DEBUG ("FreshnessSeconds");
+      
+      if (n.m_nestedTags.size()!=1) // should be exactly one UDATA inside this tag
+        throw CcnbDecodingException ();
+      contentObject.SetFreshness (
+          Seconds (
+               boost::any_cast<uint32_t> (
+                                          (*n.m_nestedTags.begin())->accept(
+                                                                           nonNegativeIntegerVisitor
+                                                                           ))));
+      
+      break;
+      
     case CCN_DTAG_Content: // !!! HACK
       // This hack was necessary for memory optimizations (i.e., content is virtual payload)
       NS_ASSERT_MSG (n.m_nestedTags.size() == 0, "Parser should have stopped just after processing <Content> tag");
       break;
+      
+    default: // ignore all other stuff
+      break;
     }
 }
 
diff --git a/helper/ccnx-encoding-helper.cc b/helper/ccnx-encoding-helper.cc
index e63c67c..538524c 100644
--- a/helper/ccnx-encoding-helper.cc
+++ b/helper/ccnx-encoding-helper.cc
@@ -194,6 +194,19 @@
   //                FreshnessSeconds?
   //                FinalBlockID?
   //                KeyLocator?
+  if (!contentObject.GetTimestamp ().IsZero())
+    {
+      written += AppendBlockHeader (start, CcnbParser::CCN_DTAG_Timestamp, CcnbParser::CCN_DTAG);
+      written += AppendTimestampBlob (start, contentObject.GetTimestamp ());
+      written += AppendCloser (start);
+    }
+  if (contentObject.GetFreshness () >= Seconds(0))
+    {
+      written += AppendBlockHeader (start, CcnbParser::CCN_DTAG_FreshnessSeconds, CcnbParser::CCN_DTAG);
+      written += AppendNumber (start, contentObject.GetFreshness ().ToInteger (Time::S));
+      written += AppendCloser (start);
+    }
+  
   written += AppendTaggedBlob (start, CcnbParser::CCN_DTAG_PublisherPublicKeyDigest, 0, 0); // <PublisherPublicKeyDigest />
   written += AppendCloser (start);                                     // </SignedInfo>
 
@@ -229,6 +242,19 @@
   //                FreshnessSeconds?
   //                FinalBlockID?
   //                KeyLocator?
+  if (!contentObject.GetTimestamp ().IsZero())
+    {
+      written += EstimateBlockHeader (CcnbParser::CCN_DTAG_Timestamp);
+      written += EstimateTimestampBlob (contentObject.GetTimestamp ());
+      written += 1;
+    }
+  if (contentObject.GetFreshness () >= Seconds(0))
+    {
+      written += EstimateBlockHeader (CcnbParser::CCN_DTAG_FreshnessSeconds);
+      written += EstimateNumber (contentObject.GetFreshness ().ToInteger (Time::S));
+      written += 1;
+    }
+
   written += EstimateTaggedBlob (CcnbParser::CCN_DTAG_PublisherPublicKeyDigest, 0); // <PublisherPublicKeyDigest />
   written += 1;                                     // </SignedInfo>
 
