diff --git a/tools/chunks/catchunks/options.hpp b/tools/chunks/catchunks/options.hpp
index b078277..d3a564e 100644
--- a/tools/chunks/catchunks/options.hpp
+++ b/tools/chunks/catchunks/options.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2018, Regents of the University of California,
+ * Copyright (c) 2016-2019, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -36,7 +36,7 @@
 struct Options
 {
   time::milliseconds interestLifetime = ndn::DEFAULT_INTEREST_LIFETIME;
-  int maxRetriesOnTimeoutOrNack = 3;
+  int maxRetriesOnTimeoutOrNack = 15;
   bool mustBeFresh = false;
   bool isQuiet = false;
   bool isVerbose = false;
diff --git a/tools/chunks/catchunks/pipeline-interests-aimd.cpp b/tools/chunks/catchunks/pipeline-interests-aimd.cpp
index eea122e..b802e34 100644
--- a/tools/chunks/catchunks/pipeline-interests-aimd.cpp
+++ b/tools/chunks/catchunks/pipeline-interests-aimd.cpp
@@ -47,7 +47,10 @@
   , m_highInterest(0)
   , m_recPoint(0)
   , m_nInFlight(0)
-  , m_nLossEvents(0)
+  , m_nLossDecr(0)
+  , m_nMarkDecr(0)
+  , m_nTimeouts(0)
+  , m_nSkippedRetx(0)
   , m_nRetransmitted(0)
   , m_nCongMarks(0)
   , m_nSent(0)
@@ -103,6 +106,7 @@
     if (segInfo.state != SegmentState::InRetxQueue) { // skip segments already in the retx queue
       Milliseconds timeElapsed = time::steady_clock::now() - segInfo.timeSent;
       if (timeElapsed.count() > segInfo.rto.count()) { // timer expired?
+        m_nTimeouts++;
         hasTimeout = true;
         enqueueForRetransmission(entry.first);
       }
@@ -191,6 +195,7 @@
       uint64_t retxSegNo = m_retxQueue.front();
       m_retxQueue.pop();
       if (m_segmentInfo.count(retxSegNo) == 0) {
+        m_nSkippedRetx++;
         continue;
       }
       // the segment is still in the map, that means it needs to be retransmitted
@@ -257,6 +262,7 @@
       if (m_options.disableCwa || m_highData > m_recPoint) {
         m_recPoint = m_highInterest;  // react to only one congestion event (timeout or congestion mark)
                                       // per RTT (conservative window adaptation)
+        m_nMarkDecr++;
         decreaseWindow();
 
         if (m_options.isVerbose) {
@@ -333,6 +339,7 @@
   if (isStopping())
     return;
 
+  m_nTimeouts++;
   enqueueForRetransmission(getSegmentFromPacket(interest));
   recordTimeout();
   schedulePackets();
@@ -347,7 +354,7 @@
 
     decreaseWindow();
     m_rttEstimator.backoffRto();
-    m_nLossEvents++;
+    m_nLossDecr++;
 
     if (m_options.isVerbose) {
       std::cerr << "Packet loss event, new cwnd = " << m_cwnd
@@ -433,11 +440,11 @@
 PipelineInterestsAimd::printSummary() const
 {
   PipelineInterests::printSummary();
-  std::cerr << "Total # of lost/retransmitted segments: " << m_nRetransmitted
-            << " (caused " << m_nLossEvents << " window decreases)\n"
-            << "Packet loss rate: "
-            << (m_nSent == 0 ? 0 : (static_cast<double>(m_nRetransmitted) / static_cast<double>(m_nSent) * 100))  << "%\n"
-            << "Total # of received congestion marks: " << m_nCongMarks << "\n"
+  std::cerr << "Congestion marks: " << m_nCongMarks << " (caused " << m_nMarkDecr << " window decreases)\n"
+            << "Timeouts: " << m_nTimeouts << " (caused " << m_nLossDecr << " window decreases)\n"
+            << "Retransmitted segments: " << m_nRetransmitted
+            << " (" << (m_nSent == 0 ? 0 : (static_cast<double>(m_nRetransmitted) / m_nSent * 100.0))  << "%)"
+            << ", skipped: " << m_nSkippedRetx << "\n"
             << "RTT ";
 
   if (m_rttEstimator.getMinRtt() == std::numeric_limits<double>::max() ||
diff --git a/tools/chunks/catchunks/pipeline-interests-aimd.hpp b/tools/chunks/catchunks/pipeline-interests-aimd.hpp
index 12edb95..4ef21ac 100644
--- a/tools/chunks/catchunks/pipeline-interests-aimd.hpp
+++ b/tools/chunks/catchunks/pipeline-interests-aimd.hpp
@@ -200,8 +200,12 @@
                        ///< it remains fixed until the next packet loss event happens
 
   int64_t m_nInFlight; ///< # of segments in flight
-  int64_t m_nLossEvents; ///< # of loss events occurred
-  int64_t m_nRetransmitted; ///< # of segments retransmitted
+  int64_t m_nLossDecr; ///< # of window decreases caused by packet loss
+  int64_t m_nMarkDecr; ///< # of window decreases caused by congestion marks
+  int64_t m_nTimeouts; ///< # of timed out segments
+  int64_t m_nSkippedRetx; ///< # of segments queued for retransmission but received before the
+                          ///< retransmission occurred
+  int64_t m_nRetransmitted; ///< # of retransmitted segments
   int64_t m_nCongMarks; ///< # of data packets with congestion mark
   int64_t m_nSent; ///< # of interest packets sent out (including retransmissions)
 
diff --git a/tools/chunks/catchunks/pipeline-interests.cpp b/tools/chunks/catchunks/pipeline-interests.cpp
index a6c7c21..3b0bff9 100644
--- a/tools/chunks/catchunks/pipeline-interests.cpp
+++ b/tools/chunks/catchunks/pipeline-interests.cpp
@@ -136,9 +136,9 @@
   duration<double, milliseconds::period> timeElapsed = steady_clock::now() - getStartTime();
   double throughput = (8 * m_receivedSize * 1000) / timeElapsed.count();
 
-  std::cerr << "\nAll segments have been received.\n"
+  std::cerr << "\n\nAll segments have been received.\n"
             << "Time elapsed: " << timeElapsed << "\n"
-            << "Total # of segments received: " << m_nReceived << "\n"
+            << "Segments received: " << m_nReceived << "\n"
             << "Total size: " << static_cast<double>(m_receivedSize) / 1000 << "kB" << "\n"
             << "Goodput: " << formatThroughput(throughput) << "\n";
 }
