diff --git a/RTCP/IONProc/src/ION_main.cc b/RTCP/IONProc/src/ION_main.cc
index c74a9781c65a6fb217a93270313dd3cae1591962..4fc72d854870c0610c766fa7d6ddc44c6c754511 100644
--- a/RTCP/IONProc/src/ION_main.cc
+++ b/RTCP/IONProc/src/ION_main.cc
@@ -461,7 +461,7 @@ void *master_thread(void *)
 	exit(1);
       }
 
-      LOG_DEBUG("lofar__fini: output thread joined");
+      LOG_DEBUG("lofar__fini: output section joined");
     }
 
 #if defined FLAT_MEMORY
diff --git a/RTCP/IONProc/src/OutputThread.cc b/RTCP/IONProc/src/OutputThread.cc
index c20cd2d15fd81db165b9fa0daedc680231bb7d12..65c54f66e8d8219c9b0721a7eb9e2538e31b1d1b 100644
--- a/RTCP/IONProc/src/OutputThread.cc
+++ b/RTCP/IONProc/src/OutputThread.cc
@@ -103,28 +103,35 @@ void OutputThread::mainLoop()
   doNotRunOnCore0();
 #endif
 
+  // set the maximum number of concurrent writers
   static Semaphore semaphore(1);
 
   while ((o = itsSendQueueActivity.remove()) >= 0) {
     struct OutputThread::SingleOutput &output = itsOutputs[o];
 
+    std::cout << "OutputThread: pop queue " << o << std::endl;
     data = output.sendQueue.remove();
 
+    std::cout << "OutputThread: lower semaphore " << std::endl;
+    semaphore.down();
+
     try {
-      semaphore.down();
+      std::cout << "OutputThread: write data for queue " << o << std::endl;
 
       // write header: nr of output
       itsStreamToStorage->write( &o, sizeof o );
 
       // write data, including serial nr
       data->write(itsStreamToStorage, true);
-
-      semaphore.up();
-      output.freeQueue.append(data);
     } catch (...) {
+      semaphore.up();
       output.freeQueue.append(data);
       throw;
     }
+
+    std::cout << "OutputThread: raise semaphore and wait for next element " << std::endl;
+    semaphore.up();
+    output.freeQueue.append(data);
   }
 }