diff --git a/ndn-traffic-client.cpp b/ndn-traffic-client.cpp
index 6df1ed1..b617b1c 100644
--- a/ndn-traffic-client.cpp
+++ b/ndn-traffic-client.cpp
@@ -10,8 +10,8 @@
 #include <fstream>
 #include <vector>
 #include <boost/asio.hpp>
-#include <boost/filesystem.hpp>
 #include <boost/bind.hpp>
+#include <boost/filesystem.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
 
 #include <ndn-cpp-dev/face.hpp>
@@ -34,7 +34,10 @@
   shutdownLogger()
   {
     if (logFile_.is_open())
+    {
+      log("Terminating Logging Operations" , true, true);
       logFile_.close();
+    }
   }
 
   static std::string
@@ -118,7 +121,7 @@
 {
 public:
 
-  NdnTrafficClient( char* programName ) : ioService_(new boost::asio::io_service), face_(ioService_)
+  NdnTrafficClient( char* programName ) : ioService_(new boost::asio::io_service), face_(ioService_), keyChain_()
   {
     std::srand(std::time(0));
     instanceId_ = toString(std::rand());
@@ -133,11 +136,6 @@
     totalInterestRoundTripTime_ = 0;
   }
 
-  NdnTrafficClient()
-  : keyChain_()
-  {
-  }
-
   class InterestTrafficConfiguration
   {
   public:
@@ -158,7 +156,7 @@
       mustBeFresh = -1;
       nonceDuplicationPercentage = -1;
       scope = -1;
-      interestLifetime = getDefaultInterestLifetime();
+      interestLifetime = -1;
       totalInterestSent = 0;
       totalInterestReceived = 0;
       minimumInterestRoundTripTime = std::numeric_limits<double>::max();
@@ -166,12 +164,6 @@
       totalInterestRoundTripTime = 0;
     }
 
-    int
-    getDefaultInterestLifetime()
-    {
-      return 4000;
-    }
-
     void
     printTrafficConfiguration( Logger& logger )
     {
@@ -181,13 +173,13 @@
         detail += "TrafficPercentage="+toString(trafficPercentage)+", ";
       if (name != "")
         detail += "Name="+name+", ";
-      if (nameAppendBytes>0)
+      if (nameAppendBytes > 0)
         detail += "NameAppendBytes="+toString(nameAppendBytes)+", ";
-      if (nameAppendSequenceNumber>0)
+      if (nameAppendSequenceNumber > 0)
         detail += "NameAppendSequenceNumber="+toString(nameAppendSequenceNumber)+", ";
-      if (minSuffixComponents>0)
+      if (minSuffixComponents >= 0)
         detail += "MinSuffixComponents="+toString(minSuffixComponents)+", ";
-      if (maxSuffixComponents>0)
+      if (maxSuffixComponents >= 0)
         detail += "MaxSuffixComponents="+toString(maxSuffixComponents)+", ";
       if (excludeBefore != "")
         detail += "ExcludeBefore="+excludeBefore+", ";
@@ -197,15 +189,15 @@
         detail += "ExcludeBeforeBytes="+toString(excludeBeforeBytes)+", ";
       if (excludeAfterBytes > 0)
         detail += "ExcludeAfterBytes="+toString(excludeAfterBytes)+", ";
-      if (childSelector > 0)
+      if (childSelector >= 0)
         detail += "ChildSelector="+toString(childSelector)+", ";
-      if (mustBeFresh > 0)
+      if (mustBeFresh >= 0)
         detail += "MustBeFresh="+toString(mustBeFresh)+", ";
       if (nonceDuplicationPercentage > 0)
         detail += "NonceDuplicationPercentage="+toString(nonceDuplicationPercentage)+", ";
-      if (scope > 0)
+      if (scope >= 0)
         detail += "Scope="+toString(scope)+", ";
-      if (interestLifetime > 0)
+      if (interestLifetime >= 0)
         detail += "InterestLifetime="+toString(interestLifetime)+", ";
       if (detail.length() >= 0)
         detail = detail.substr(0, detail.length()-2);
@@ -314,6 +306,12 @@
 
   };
 
+  int
+  getDefaultInterestLifetime()
+  {
+    return 4000;
+  }
+
   static std::string
   toString( int integerValue )
   {
@@ -322,6 +320,14 @@
     return stream.str();
   }
 
+  static std::string
+  toString( double doubleValue )
+  {
+    std::stringstream stream;
+    stream << doubleValue;
+    return stream.str();
+  }
+
   static int
   toInteger( std::string stringValue )
   {
@@ -379,9 +385,56 @@
     logger_.shutdownLogger();
     face_.shutdown();
     ioService_.reset();
+    logStatistics();
     exit(1);
   }
 
+  void
+  logStatistics()
+  {
+    int patternId;
+    double loss, average;
+
+    logger_.log("\n\n== Interest Traffic Report ==\n", false, true);
+    logger_.log("Total Traffic Pattern Types = "+toString((int)trafficPattern_.size()), false, true);
+    logger_.log("Total Interests Sent        = "+toString(totalInterestSent_), false, true);
+    logger_.log("Total Responses Received    = "+toString(totalInterestReceived_), false, true);
+    if (totalInterestSent_ > 0)
+      loss = (totalInterestSent_-totalInterestReceived_)*100.0/totalInterestSent_;
+    else
+      loss = 0;
+    logger_.log("Total Interest Loss         = "+toString(loss)+"%", false, true);
+    if (totalInterestReceived_ > 0)
+      average = totalInterestRoundTripTime_/totalInterestReceived_;
+    else
+      average = 0;
+    logger_.log("Total Round Trip Time       = "+toString(totalInterestRoundTripTime_)+"ms", false, true);
+    logger_.log("Average Round Trip Time     = "+toString(average)+"ms\n", false, true);
+
+    for (patternId=0; patternId<trafficPattern_.size(); patternId++)
+    {
+      logger_.log("Traffic Pattern Type #"+toString(patternId+1), false, true);
+      trafficPattern_[patternId].printTrafficConfiguration(logger_);
+      logger_.log("Total Interests Sent        = "+toString(trafficPattern_[patternId].totalInterestSent), false, true);
+      logger_.log("Total Responses Received    = "+toString(trafficPattern_[patternId].totalInterestReceived), false, true);
+      if (trafficPattern_[patternId].totalInterestSent > 0)
+      {
+        loss = (trafficPattern_[patternId].totalInterestSent-trafficPattern_[patternId].totalInterestReceived);
+        loss *= 100.0;
+        loss /= trafficPattern_[patternId].totalInterestSent;
+      }
+      else
+        loss = 0;
+      logger_.log("Total Interest Loss         = "+toString(loss)+"%", false, true);
+      if (trafficPattern_[patternId].totalInterestReceived > 0)
+        average = trafficPattern_[patternId].totalInterestRoundTripTime/trafficPattern_[patternId].totalInterestReceived;
+      else
+        average = 0;
+      logger_.log("Total Round Trip Time       = "+toString(trafficPattern_[patternId].totalInterestRoundTripTime)+"ms", false, true);
+      logger_.log("Average Round Trip Time     = "+toString(average)+"ms\n", false, true);
+    }
+  }
+
   bool
   checkTrafficPatternCorrectness()
   {
@@ -439,8 +492,13 @@
         logger_.shutdownLogger();
         exit(1);
       }
-      for (patternId = 0; patternId < trafficPattern_.size(); patternId++)
+      logger_.log("Traffic Configuration File Processing Completed\n", true, false);
+      for (patternId=0; patternId<trafficPattern_.size(); patternId++)
+      {
+        logger_.log("Traffic Pattern Type #"+toString(patternId+1), false, false);
         trafficPattern_[patternId].printTrafficConfiguration(logger_);
+        logger_.log("", false, false);
+      }
     }
     else
     {
@@ -547,6 +605,8 @@
       trafficPattern_[patternId].maximumInterestRoundTripTime = roundTripTime;
     totalInterestRoundTripTime_ += roundTripTime;
     trafficPattern_[patternId].totalInterestRoundTripTime += roundTripTime;
+    if (totalInterestSent_ == interestCount_)
+      signalHandler();
   }
 
   void
@@ -563,6 +623,8 @@
     logLine += ", PatternID="+toString(patternId);
     logLine += ", Name="+interest.getName().toUri();
     logger_.log(logLine, true, false);
+    if (totalInterestSent_ == interestCount_)
+      signalHandler();
   }
 
   void
@@ -575,7 +637,6 @@
       std::srand(std::time(0));
       trafficKey = std::rand() % 100;
       cumulativePercentage = 0;
-      std::cout << trafficKey << std::endl;
       for (patternId=0; patternId<trafficPattern_.size(); patternId++)
       {
         cumulativePercentage += trafficPattern_[patternId].trafficPercentage;
@@ -590,9 +651,9 @@
             trafficPattern_[patternId].nameAppendSequenceNumber++;
           }
           Interest interest(interestName);
-          if (trafficPattern_[patternId].minSuffixComponents > 0)
+          if (trafficPattern_[patternId].minSuffixComponents >= 0)
             interest.setMinSuffixComponents(trafficPattern_[patternId].minSuffixComponents);
-          if (trafficPattern_[patternId].maxSuffixComponents > 0)
+          if (trafficPattern_[patternId].maxSuffixComponents >= 0)
             interest.setMaxSuffixComponents(trafficPattern_[patternId].maxSuffixComponents);
           Exclude exclude;
           if (trafficPattern_[patternId].excludeBefore != "" &&  trafficPattern_[patternId].excludeAfter != "")
@@ -633,7 +694,7 @@
 
           if (trafficPattern_[patternId].mustBeFresh == 0)
             interest.setMustBeFresh(false);
-          else if (trafficPattern_[patternId].mustBeFresh == 1)
+          else if (trafficPattern_[patternId].mustBeFresh > 0)
             interest.setMustBeFresh(true);
           if (trafficPattern_[patternId].nonceDuplicationPercentage > 0)
           {
@@ -649,8 +710,10 @@
             interest.setNonce(getNewNonce());
           if (trafficPattern_[patternId].scope >= 0)
             interest.setScope(trafficPattern_[patternId].scope);
-          if (trafficPattern_[patternId].interestLifetime > 0)
+          if (trafficPattern_[patternId].interestLifetime >= 0)
             interest.setInterestLifetime(trafficPattern_[patternId].interestLifetime);
+          else
+            interest.setInterestLifetime(getDefaultInterestLifetime());
           try {
             totalInterestSent_++;
             trafficPattern_[patternId].totalInterestSent++;
