diff --git a/apps/ndn-consumer.cc b/apps/ndn-consumer.cc
index c889b6d..794bcb9 100644
--- a/apps/ndn-consumer.cc
+++ b/apps/ndn-consumer.cc
@@ -78,6 +78,12 @@
 
     .AddTraceSource ("PathWeightsTrace", "PathWeightsTrace",
                     MakeTraceSourceAccessor (&Consumer::m_pathWeightsTrace))
+
+    .AddTraceSource ("LastRetransmittedInterestDataDelay", "Delay between last retransmitted Interest and received Data",
+                     MakeTraceSourceAccessor (&Consumer::m_lastRetransmittedInterestDataDelay))
+
+    .AddTraceSource ("FirstInterestDataDelay", "Delay between first transmitted Interest and received Data",
+                     MakeTraceSourceAccessor (&Consumer::m_firstInterestDataDelay))
     ;
 
   return tid;
@@ -172,21 +178,10 @@
 
   uint32_t seq=std::numeric_limits<uint32_t>::max (); //invalid
 
-  // std::cout << Simulator::Now ().ToDouble (Time::S) << "s max -> " << m_seqMax << "\n";
-  
   while (m_retxSeqs.size ())
     {
       seq = *m_retxSeqs.begin ();
       m_retxSeqs.erase (m_retxSeqs.begin ());
-
-      // NS_ASSERT (m_seqLifetimes.find (seq) != m_seqLifetimes.end ());
-      // if (m_seqLifetimes.find (seq)->time <= Simulator::Now ())
-      //   {
-          
-      //     NS_LOG_DEBUG ("Expire " << seq);
-      //     m_seqLifetimes.erase (seq); // lifetime expired. Trying to find another unexpired sequence number
-      //     continue;
-      //   }
       break;
     }
 
@@ -203,8 +198,6 @@
       seq = m_seq++;
     }
   
-  // std::cout << Simulator::Now ().ToDouble (Time::S) << "s -> " << seq << "\n";
-  
   //
   Ptr<NameComponents> nameWithSequence = Create<NameComponents> (m_interestName);
   (*nameWithSequence) (seq);
@@ -224,7 +217,8 @@
   NS_LOG_DEBUG ("Trying to add " << seq << " with " << Simulator::Now () << ". already " << m_seqTimeouts.size () << " items");  
   
   m_seqTimeouts.insert (SeqTimeout (seq, Simulator::Now ()));
-  m_seqLifetimes.insert (SeqTimeout (seq, Simulator::Now () + m_interestLifeTime)); // only one insert will work. if entry exists, nothing will happen... nothing should happen
+  m_seqLifetimes.insert (SeqTimeout (seq, Simulator::Now ()));
+  
   m_transmittedInterests (&interestHeader, this, m_face);
 
   m_rtt->SentSeq (SequenceNumber32 (seq), 1);
@@ -254,14 +248,26 @@
   uint32_t seq = boost::lexical_cast<uint32_t> (contentObject->GetName ().GetComponents ().back ());
   NS_LOG_INFO ("< DATA for " << seq);
 
-  // SeqTimeoutsContainer::iterator entry = m_seqTimeouts.find (seq);
+  SeqTimeoutsContainer::iterator entry = m_seqTimeouts.find (seq);
+  if (entry != m_seqTimeouts.end ())
+    {
+      m_lastRetransmittedInterestDataDelay (this, seq, Simulator::Now () - entry->time);
+    }
+  else
+    {
+      NS_ASSERT_MSG (entry != m_seqTimeouts.end (), "Something is now right");
+    }
 
-  //  NS_ASSERT_MSG (entry != m_seqTimeouts.end (),
-  //             "Comment out this assert, if it causes problems");
-
-  // if (entry != m_seqTimeouts.end ())
-  //   m_seqTimeouts.erase (entry);
-
+  entry = m_seqLifetimes.find (seq);
+  if (entry != m_seqLifetimes.end ())
+    {
+      m_firstInterestDataDelay (this, seq, Simulator::Now () - entry->time);
+    }
+  else
+    {
+      NS_ASSERT_MSG (entry != m_seqLifetimes.end (), "Something is now right");
+    }
+  
   m_seqLifetimes.erase (seq);
   m_seqTimeouts.erase (seq);
   m_retxSeqs.erase (seq);
