diff --git a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.cpp b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.cpp
index eff8fe45d42645b1b32bf185c2ac7b46efe5722c..b798c239c803f687f63e6e3ca34196e958f4774e 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.cpp
@@ -137,7 +137,7 @@ void MigrationReportPacker::reportTestGoingToEnd(cta::log::LogContext & lc){
 void MigrationReportPacker::synchronousReportEndWithErrors(const std::string msg, int errorCode, cta::log::LogContext & lc){
   cta::log::ScopedParamContainer params(lc);
   params.add("type", "ReportEndofSessionWithErrors");
-  lc.log(cta::log::DEBUG, "In MigrationReportPacker::synchronousReportEndWithErrors(), reporting asynchronously.");
+  lc.log(cta::log::DEBUG, "In MigrationReportPacker::synchronousReportEndWithErrors(), reporting asynchronously session complete.");
   m_continue=false;
   m_archiveMount->complete();
   if(m_errorHappened) {
@@ -176,7 +176,8 @@ void MigrationReportPacker::ReportSuccessful::execute(MigrationReportPacker& rep
 //------------------------------------------------------------------------------
 void MigrationReportPacker::reportDriveStatus(cta::common::dataStructures::DriveStatus status, cta::log::LogContext & lc) {
   cta::log::ScopedParamContainer params(lc);
-  params.add("type", "ReportDriveStatus");
+  params.add("type", "ReportDriveStatus")
+        .add("Status", cta::common::dataStructures::toString(status));
   lc.log(cta::log::DEBUG, "In MigrationReportPacker::reportDriveStatus(), pushing a report.");
   cta::threading::MutexLocker ml(m_producterProtection);
   m_fifo.push(new ReportDriveStatus(status));
@@ -186,6 +187,9 @@ void MigrationReportPacker::reportDriveStatus(cta::common::dataStructures::Drive
 //ReportDriveStatus::execute
 //------------------------------------------------------------------------------
 void MigrationReportPacker::ReportDriveStatus::execute(MigrationReportPacker& parent){
+  cta::log::ScopedParamContainer params(parent.m_lc);
+  params.add("status", cta::common::dataStructures::toString(m_status));
+  parent.m_lc.log(cta::log::DEBUG, "In MigrationReportPacker::ReportDriveStatus::execute(): reporting drive status.");
   parent.m_archiveMount->setDriveStatus(m_status);
 }
 
@@ -266,6 +270,7 @@ void MigrationReportPacker::ReportTapeFull::execute(MigrationReportPacker& repor
 //------------------------------------------------------------------------------
 void MigrationReportPacker::ReportEndofSession::execute(MigrationReportPacker& reportPacker){
   reportPacker.m_continue=false;
+  reportPacker.m_lc.log(cta::log::DEBUG, "In MigrationReportPacker::ReportEndofSession::execute(): reporting session complete.");
   reportPacker.m_archiveMount->complete();
   if(!reportPacker.m_errorHappened){
     cta::log::ScopedParamContainer sp(reportPacker.m_lc);
@@ -298,6 +303,7 @@ void MigrationReportPacker::ReportEndofSession::execute(MigrationReportPacker& r
 //------------------------------------------------------------------------------
 void MigrationReportPacker::ReportEndofSessionWithErrors::execute(MigrationReportPacker& reportPacker){
   reportPacker.m_continue=false;
+  reportPacker.m_lc.log(cta::log::DEBUG, "In MigrationReportPacker::ReportEndofSessionWithErrors::execute(): reporting session complete.");
   reportPacker.m_archiveMount->complete();
   if(reportPacker.m_errorHappened) {
     cta::log::ScopedParamContainer sp(reportPacker.m_lc);
diff --git a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.hpp b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.hpp
index 66ae7de1ed025e85da6ac80136addb30516254f0..dd014536c7a2e4ff5e068f3294ef558c2311164c 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.hpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.hpp
@@ -140,7 +140,9 @@ private:
   public:
     ReportTestGoingToEnd() {}
     virtual void execute(MigrationReportPacker& reportPacker) override {
-      reportPacker.m_continue=false;reportPacker.m_archiveMount->complete();
+      reportPacker.m_continue=false;
+      reportPacker.m_lc.log(cta::log::DEBUG, "In MigrationReportPacker::ReportTestGoingToEnd::execute(): Reporting session complete.");
+      reportPacker.m_archiveMount->complete();
     }
   };
   
diff --git a/tapeserver/castor/tape/tapeserver/daemon/RecallReportPacker.cpp b/tapeserver/castor/tape/tapeserver/daemon/RecallReportPacker.cpp
index 21a8df7e9e375e2773a9527e5c98c93bbff6a45c..fc19a2aa011b926ab80125735cd5d3b63a7f4422 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/RecallReportPacker.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/RecallReportPacker.cpp
@@ -27,6 +27,7 @@
 
 #include <signal.h>
 #include <iostream>
+#include <cxxabi.h>
 
 namespace{
   struct failedReportRecallResult : public cta::exception::Exception{
@@ -221,7 +222,14 @@ void RecallReportPacker::WorkerThread::run(){
     std::unique_ptr<Report> rep(m_parent.m_fifo.pop());
     {
       cta::log::ScopedParamContainer spc(m_parent.m_lc);
-      spc.add("ReportType", debugType=typeid(*rep).name());
+      int demangleStatus;
+      char * demangledReportType = abi::__cxa_demangle(typeid(*rep.get()).name(), nullptr, nullptr, &demangleStatus);
+      if (!demangleStatus) {
+        spc.add("typeId", demangledReportType);
+      } else {
+        spc.add("typeId", typeid(*rep.get()).name());
+      }
+      free(demangledReportType);
       if (rep->goingToEnd())
         spc.add("goingToEnd", "true");
       m_parent.m_lc.log(cta::log::DEBUG, "Popping report");
diff --git a/tapeserver/castor/tape/tapeserver/daemon/TapeWriteSingleThread.cpp b/tapeserver/castor/tape/tapeserver/daemon/TapeWriteSingleThread.cpp
index 2985569d91247c94f316be0ff7764920d2d1479c..515d2c67eac8a01e52ee52c7649fadc21d2ae413 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/TapeWriteSingleThread.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/TapeWriteSingleThread.cpp
@@ -397,8 +397,6 @@ void castor::tape::tapeserver::daemon::TapeWriteSingleThread::run() {
           //we flush without asking
           tapeFlush("No more data to write on tape, unconditional flushing to the client",bytes,files,timer);
           m_stats.flushTime += timer.secs(cta::utils::Timer::resetCounter);
-          //end of session + log
-          m_reportPacker.reportEndOfSession(m_logContext);
           cta::log::LogContext::ScopedParam sp0(m_logContext, cta::log::Param("tapeThreadDuration", totalTimer.secs()));
           m_logContext.log(cta::log::DEBUG, "writing data to tape has finished");
           break;
@@ -432,6 +430,8 @@ void castor::tape::tapeserver::daemon::TapeWriteSingleThread::run() {
     logWithStats(cta::log::INFO, "Tape thread complete",params);
     // Report one last time the stats, after unloading/unmounting.
     m_watchdog.updateStats(m_stats);
+    //end of session + log
+    m_reportPacker.reportEndOfSession(m_logContext);
   } //end of try 
   catch(const cta::exception::Exception& e){
     //we end there because write session could not be opened