diff --git a/core/data/CbmDefs.h b/core/data/CbmDefs.h
index c09e0d805381ef12acc3404d702fa23f97418a85..20121e14916e1a871584c13e0020a7b8e85c92e1 100644
--- a/core/data/CbmDefs.h
+++ b/core/data/CbmDefs.h
@@ -120,7 +120,9 @@ enum class ECbmDataType
   kTofDigi,
   kTofCalDigi,
   kTofHit,
-  kTofTrack,  // TOF
+  kTofTrack,
+  kTofUHit,
+  kTofTracklet,  // TOF
   kPsdPoint = ToIntegralType(ECbmModuleId::kPsd) * 100,
   kPsdDigi,
   kPsdHit,  // PSD
diff --git a/reco/detectors/tof/CbmTofExtendTracks.cxx b/reco/detectors/tof/CbmTofExtendTracks.cxx
index 810693da3ac2b901bc7a166ae33ce5f7df0efd39..07b9d5b69f1606b5ab0bd9ad3c7d13825a3dbbff 100644
--- a/reco/detectors/tof/CbmTofExtendTracks.cxx
+++ b/reco/detectors/tof/CbmTofExtendTracks.cxx
@@ -214,8 +214,8 @@ InitStatus CbmTofExtendTracks::Init()
     LOG(info) << "-I- CbmTofExtendTracks::Init: TofCalHit array!";
   }
 
-  // Get TOF Track Array
-  fTofTrackArrayIn = (TClonesArray*) ioman->GetObject("TofTracks");
+  // Get TOF Tracklet Array
+  fTofTrackArrayIn = (TClonesArray*) ioman->GetObject("TofTracklets");
   if (!fTofTrackArrayIn) {
     LOG(fatal) << "-W- CbmTofExtendTracks::Init: No TofTrack array!";
     return kERROR;
@@ -965,7 +965,7 @@ void CbmTofExtendTracks::ExecExtend(Option_t* /*opt*/, CbmEvent* tEvent)
     iNbStsStations,
     iNbMuchStations,
     iNbRichStations,
-    tEvent->GetNofData(ECbmDataType::kTofTrack));
+    tEvent->GetNofData(ECbmDataType::kTofTracklet));
 
   LOG(info) << "Station Multipliplicities:";
   for(UInt_t iSt=0; iSt<fvAllHitPointer.size();iSt++)
@@ -973,13 +973,13 @@ void CbmTofExtendTracks::ExecExtend(Option_t* /*opt*/, CbmEvent* tEvent)
   */
 
   // loop on tof tracklet
-  size_t iNTrks = tEvent->GetNofData(ECbmDataType::kTofTrack);
+  size_t iNTrks = tEvent->GetNofData(ECbmDataType::kTofTracklet);
 
   fvTrkCalHits.clear();
   fvTrkCalHits.resize(iNTrks);
   fvTrkPar.clear();
   for (size_t iTr = 0; iTr < iNTrks; iTr++) {
-    Int_t iTrkIndex      = static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kTofTrack, iTr));
+    Int_t iTrkIndex      = static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kTofTracklet, iTr));
     CbmTofTracklet* pTrk = dynamic_cast<CbmTofTracklet*>(fTofTrackArrayIn->At(iTrkIndex));
     //CbmTofTrackletParam* pTrkPar=new CbmTofTrackletParam(*pTrk->GetTrackParameter());
     //fvTrkPar.push_back(pTrkPar);
@@ -1223,23 +1223,24 @@ void CbmTofExtendTracks::FillHistograms(CbmEvent* tEvent)
   }
 
   // limit track multiplicity
-  Int_t NTrkTof = (Int_t) tEvent->GetNofData(ECbmDataType::kTofTrack);
+  Int_t NTrkTof = static_cast<Int_t>(tEvent->GetNofData(ECbmDataType::kTofTracklet));
   if (NTrkTof > fiNTrkTofMax) return;
 
   Int_t iLev = 0;
   //
-  fhMulCorTrkTof->Fill(tEvent->GetNofData(ECbmDataType::kTofTrack), tEvent->GetNofData(ECbmDataType::kTofHit));
+  fhMulCorTrkTof->Fill(tEvent->GetNofData(ECbmDataType::kTofTracklet), tEvent->GetNofData(ECbmDataType::kTofHit));
 
-  fhMulCorTrkSts->Fill(tEvent->GetNofData(ECbmDataType::kTofTrack), tEvent->GetNofData(ECbmDataType::kStsHit));
+  fhMulCorTrkSts->Fill(tEvent->GetNofData(ECbmDataType::kTofTracklet), tEvent->GetNofData(ECbmDataType::kStsHit));
 
-  fhMulCorTrkMuch->Fill(tEvent->GetNofData(ECbmDataType::kTofTrack), tEvent->GetNofData(ECbmDataType::kMuchPixelHit));
+  fhMulCorTrkMuch->Fill(tEvent->GetNofData(ECbmDataType::kTofTracklet),
+                        tEvent->GetNofData(ECbmDataType::kMuchPixelHit));
 
-  fhMulCorTrkRich->Fill(tEvent->GetNofData(ECbmDataType::kTofTrack), tEvent->GetNofData(ECbmDataType::kRichHit));
+  fhMulCorTrkRich->Fill(tEvent->GetNofData(ECbmDataType::kTofTracklet), tEvent->GetNofData(ECbmDataType::kRichHit));
 
 
   // correlation with TOF Tracklets
   for (Int_t iTr = 0; iTr < NTrkTof; iTr++) {
-    Int_t iTrkIndex      = static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kTofTrack, iTr));
+    Int_t iTrkIndex      = static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kTofTracklet, iTr));
     CbmTofTracklet* tTrk = dynamic_cast<CbmTofTracklet*>(fTofTrackArrayIn->At(iTrkIndex));
 
     // tTrk->PrintInfo();
@@ -1452,7 +1453,7 @@ void CbmTofExtendTracks::FillHistograms(CbmEvent* tEvent)
       }
 
       // pulls against original tracklets
-      Int_t iTrkInd        = static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kTofTrack, iTr));
+      Int_t iTrkInd        = static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kTofTracklet, iTr));
       CbmTofTracklet* pTrk = dynamic_cast<CbmTofTracklet*>(fTofTrackArrayIn->At(iTrkInd));
       dDX                  = tHit->GetX() - pTrk->GetFitX(tHit->GetZ());
       dDY                  = tHit->GetY() - pTrk->GetFitY(tHit->GetZ());
diff --git a/reco/detectors/tof/CbmTofFindTracks.cxx b/reco/detectors/tof/CbmTofFindTracks.cxx
index cb9e7158bc661a3d8c33bbad0253a11e7bb7474e..37dfa0815e7f37f200a8f10ae758cfc396a2bc9b 100644
--- a/reco/detectors/tof/CbmTofFindTracks.cxx
+++ b/reco/detectors/tof/CbmTofFindTracks.cxx
@@ -54,8 +54,6 @@
 #include <iostream>
 #include <vector>
 
-using std::cout;
-using std::endl;
 using std::vector;
 
 //const Int_t DetMask = 0x3FFFFF;  // check for consistency with v14a geometry
@@ -87,6 +85,7 @@ CbmTofFindTracks::CbmTofFindTracks(const char* name, const char* /*title*/, CbmT
   , fTofHitArray(NULL)
   , fTofHitIndexArray()
   , fTofHitArrayOut(NULL)
+  , fTofUHitArrayOut(NULL)
   , fTrackArray(NULL)
   , fTrackArrayOut(nullptr)
   , fTofUHitArray(NULL)
@@ -240,24 +239,23 @@ InitStatus CbmTofFindTracks::Init()
 
   // Check for Track finder
   if (!fFinder) {
-    cout << "-W- CbmTofFindTracks::Init: No track finder selected!" << endl;
+    LOG(warning) << "-W- CbmTofFindTracks::Init: No track finder selected!";
     return kERROR;
   }
 
   // Check for Track fitter
   if (!fFitter) {
-    cout << "-W- CbmTofFindTracks::Init: No track fitter selected!" << endl;
+    LOG(warning) << "-W- CbmTofFindTracks::Init: No track fitter selected!";
     return kERROR;
   }
-  cout << Form("-D- CbmTofFindTracks::Init: track fitter at 0x%p", fFitter) << endl;
+  LOG(info) << Form("-D- CbmTofFindTracks::Init: track fitter at 0x%p", fFitter);
 
   fTrackletTools = new CbmTofTrackletTools();  // initialize tools
 
   // Get and check FairRootManager
   FairRootManager* ioman = FairRootManager::Instance();
   if (!ioman) {
-    cout << "-E- CbmTofFindTracks::Init: "
-         << "RootManager not instantiated!" << endl;
+    LOG(error) << "-E- CbmTofFindTracks::Init: RootManager not instantiated!";
     return kFATAL;
   }
 
@@ -288,16 +286,19 @@ InitStatus CbmTofFindTracks::Init()
   fTrackArray   = new TClonesArray("CbmTofTracklet", 100);
   fTofUHitArray = new TClonesArray("CbmTofHit", 100);
   //fTrackArray->BypassStreamer(kTRUE);  //needed?
-  //ioman->Register("TofTracks", "TOF", fTrackArray, kFALSE); //FIXME
+  //ioman->Register("TofTracklets", "TOF", fTrackArray, kFALSE); //FIXME
   if (fEventsColl) {
-    fTrackArrayOut  = new TClonesArray("CbmTofTracklet", 100);
-    fTofHitArrayOut = new TClonesArray("CbmTofHit", 100);
-    ioman->Register("TofTracks", "TOF", fTrackArrayOut, IsOutputBranchPersistent("TofTracks"));
+    fTrackArrayOut   = new TClonesArray("CbmTofTracklet", 100);
+    fTofHitArrayOut  = new TClonesArray("CbmTofHit", 100);
+    fTofUHitArrayOut = new TClonesArray("CbmTofHit", 100);
+    ioman->Register("TofTracklets", "TOF", fTrackArrayOut, IsOutputBranchPersistent("TofTracklets"));
     ioman->Register("TofCalHit", "TOF", fTofHitArrayOut, IsOutputBranchPersistent("TofCalHit"));
+    LOG(info) << "-W- TofTracklets array registered in EventsColl mode";
+    ioman->Register("TofUHit", "TOF", fTofUHitArrayOut, IsOutputBranchPersistent("TofTracklets"));
   }
   else {
-    ioman->Register("TofTracks", "TOF", fTrackArray, IsOutputBranchPersistent("TofTracks"));
-    cout << "-I- CbmTofFindTracks::Init:TofTrack array registered" << endl;
+    ioman->Register("TofTracklets", "TOF", fTrackArray, IsOutputBranchPersistent("TofTracklets"));
+    LOG(info) << "-W- CbmTofFindTracks::Init:TofTracklets array registered";
     LOG(info) << "Register TofCalHit at " << fTofHitArray;
     ioman->Register("TofCalHit", "TOF", fTofHitArray, IsOutputBranchPersistent("TofCalHit"));
 
@@ -1151,6 +1152,7 @@ void CbmTofFindTracks::Exec(Option_t* opt)
     Int_t iNbCalHits = 0;
     fTrackArrayOut->Delete();   //Clear("C");
     fTofHitArrayOut->Delete();  //Clear("C");
+    fTofUHitArrayOut->Delete();  //Clear("C");
     LOG(info) << "Process TS " << iTS << " with " << fEventsColl->GetEntriesFast() << " events";
     iTS++;
     for (Int_t iEvent = 0; iEvent < fEventsColl->GetEntriesFast(); iEvent++) {
@@ -1171,6 +1173,8 @@ void CbmTofFindTracks::Exec(Option_t* opt)
       ExecFind(opt, tEvent);
 
       // --- In event-by-event mode: copy tracks to output array and register them to event
+      LOG(info) << "Register " << fTrackArray->GetEntriesFast() << " tracks for event " << iEvent
+                << ", starting at ind " << iNbTrks;
       for (Int_t iTrk = 0; iTrk < fTrackArray->GetEntriesFast(); iTrk++) {
         CbmTofTracklet* pTrk = (CbmTofTracklet*) fTrackArray->At(iTrk);
         new ((*fTrackArrayOut)[iNbTrks]) CbmTofTracklet(*pTrk);
@@ -1179,7 +1183,7 @@ void CbmTofFindTracks::Exec(Option_t* opt)
         {
           pTrk->SetTofHitIndex(iHit, fTofHitIndexArray[pTrk->GetTofHitIndex(iHit)]);
         }
-        tEvent->AddData(ECbmDataType::kTofTrack, iNbTrks);
+        tEvent->AddData(ECbmDataType::kTofTracklet, iNbTrks);
         iNbTrks++;
       }
       // Update TofHitArrayIn
@@ -1187,6 +1191,14 @@ void CbmTofFindTracks::Exec(Option_t* opt)
         CbmTofHit* tHit = dynamic_cast<CbmTofHit*>(fTofHitArray->At(iHit));
         new ((*fTofHitArrayOut)[iNbCalHits++]) CbmTofHit(*tHit);
       }
+      // Add TofUHitArrayOut
+      int iNbUHits = fTofUHitArrayOut->GetEntries();
+      for (Int_t iHit = 0; iHit < fTofUHitArray->GetEntriesFast(); iHit++) {
+        CbmTofHit* tHit = dynamic_cast<CbmTofHit*>(fTofUHitArray->At(iHit));
+        new ((*fTofUHitArrayOut)[iNbUHits++]) CbmTofHit(*tHit);
+        tEvent->AddData(ECbmDataType::kTofUHit, iNbUHits);
+      }
+
       fTrackArray->Delete();
       //fTrackArray->Clear();
     }
@@ -1296,7 +1308,7 @@ void CbmTofFindTracks::ExecFind(Option_t* /*opt*/, CbmEvent* tEvent)
   /* call moved to Clusterizer
   if (fiCalOpt > 99) {
     //LOG(info) << "Call TofCalibrator with pBeam  "<<pBeamHit;
-    if (NULL != pBeamHit) fTofCalibrator->FillHitCalHist(pBeamHit, fiCalOpt, tEvent, fTofHitArrayIn); 
+    if (NULL != pBeamHit) fTofCalibrator->FillHitCalHist(pBeamHit, fiCalOpt, tEvent, fTofHitArrayIn);
   }
   */
 
@@ -1337,7 +1349,7 @@ void CbmTofFindTracks::ExecFind(Option_t* /*opt*/, CbmEvent* tEvent)
 // -----   Public method Finish   ------------------------------------------
 void CbmTofFindTracks::Finish()
 {
-  if (fiEvent < 1000) return;  // preserve calibration histos in event display
+  if (fiEvent < 2) return;  // preserve calibration histos in event display
   FairLogger::GetLogger()->SetLogScreenLevel("info");
   if (fiCalOpt > 0) fTofCalibrator->UpdateCalHist(fiCalOpt);
   if (fbDoHistos) WriteHistos();
@@ -1429,13 +1441,13 @@ void CbmTofFindTracks::CreateHistograms()
   fhTrklXY0_2    = new TH2F(Form("hTrklXY0_2"), Form("Tracklet XY at z=0 for hmulmax-2 ; x (cm); y (cm)"), 100, -X0MAX,
                          X0MAX, 100, -X0MAX, X0MAX);
 
-  fhTrklX0_TX = new TH2F(Form("hTrklX0_TX"), Form("Tracklet X0 vs TX at z=0 for hmulmax ; tx (); x0 (cm)"), 100, 0.,
+  fhTrklX0_TX = new TH2F(Form("hTrklX0_TX"), Form("Tracklet X0 vs TX at z=0 for hmulmax ; tx (); x0 (cm)"), 100, -0.4,
                          0.4, 100, -X0MAX, X0MAX);
-  fhTrklY0_TX = new TH2F(Form("hTrklY0_TX"), Form("Tracklet Y0 vs TX at z=0 for hmulmax ; tx (); y0 (cm)"), 100, 0.,
+  fhTrklY0_TX = new TH2F(Form("hTrklY0_TX"), Form("Tracklet Y0 vs TX at z=0 for hmulmax ; tx (); y0 (cm)"), 100, -0.4,
                          0.4, 100, -X0MAX, X0MAX);
-  fhTrklX0_TY = new TH2F(Form("hTrklX0_TY"), Form("Tracklet X0 vs TY at z=0 for hmulmax ; ty (); x0 (cm)"), 100, 0.,
+  fhTrklX0_TY = new TH2F(Form("hTrklX0_TY"), Form("Tracklet X0 vs TY at z=0 for hmulmax ; ty (); x0 (cm)"), 100, -0.4,
                          0.4, 100, -X0MAX, X0MAX);
-  fhTrklY0_TY = new TH2F(Form("hTrklY0_TY"), Form("Tracklet Y0 vs TY at z=0 for hmulmax ; ty (); y0 (cm)"), 100, 0.,
+  fhTrklY0_TY = new TH2F(Form("hTrklY0_TY"), Form("Tracklet Y0 vs TY at z=0 for hmulmax ; ty (); y0 (cm)"), 100, -0.4,
                          0.4, 100, -X0MAX, X0MAX);
 
   Double_t DT0MAX = 5.;
@@ -1737,8 +1749,8 @@ void CbmTofFindTracks::FillHistograms(CbmEvent* tEvent)
           CbmTofHit* pHit = (CbmTofHit*) fTofHitArray->At(iH);
           //if (0 == fMapStationRpcId[iSt]) pHit->SetTime(pTrk->GetT0());  // set time of fake hit, abandoned
           /*
-          cout << " -D- CbmTofFindTracks::FillHistograms: "<< iSt <<", "
-            <<fMapStationRpcId[iSt]<<", "<< iH <<", "<< iH0 <<", "<<pHit->ToString() << endl;
+          LOG(info) << " -D- CbmTofFindTracks::FillHistograms: "<< iSt <<", "
+            <<fMapStationRpcId[iSt]<<", "<< iH <<", "<< iH0 <<", "<<pHit->ToString();
           */
           Double_t dDZ  = pHit->GetZ() - tPar->GetZ();                    // z- Distance to reference point
           Double_t dDX  = pHit->GetX() - pTrk->GetFitX(pHit->GetZ());     // - tPar->GetX() - tPar->GetTx()*dDZ;
@@ -2095,7 +2107,7 @@ void CbmTofFindTracks::FillHistograms(CbmEvent* tEvent)
           CbmTofTracklet* pTrk1 = (CbmTofTracklet*) fTrackArray->At(iTrk1);
           if (NULL == pTrk1) continue;
           if (pTrk1->GetNofHits() > fMinNofHits) {  // for further analysis request min # of  matched hits
-            //cout << " -D- iT "<<iTrk<<", iT1 "<<iTrk1<<endl;
+            //LOG(info) << " -D- iT "<<iTrk<<", iT1 "<<iTrk1;
             fhTrklT0Mul->Fill(iTMul, pTrk->GetFitT(0.) - pTrk1->GetFitT(0.));
           }
         }
@@ -2114,7 +2126,7 @@ void CbmTofFindTracks::FillHistograms(CbmEvent* tEvent)
     //    Int_t iSmType = CbmTofAddress::GetSmType( pHit->GetAddress() & DetMask ); (FU) not used
     Int_t iAddr = (pHit->GetAddress() & DetMask);
     fhAllHitsSmTypes->Fill(GetStationOfAddr(iAddr));
-    //cout << " -D- " << iSmType <<", " << fTypeStation[iSmType] << endl;
+    //LOG(info) << " -D- " << iSmType <<", " << fTypeStation[iSmType];
     if (GetStationOfAddr(iAddr) > -1) fhAllHitsStation->Fill(GetStationOfAddr(iAddr));
   }
   // vertex stuff
@@ -2211,8 +2223,8 @@ void CbmTofFindTracks::PrintSetup()
 
 Double_t CbmTofFindTracks::GetTOff(Int_t iAddr)
 {
-  //cout << Form(" <D> GetTOff for 0x%08x at HistoIndex %d: %7.1f ", iAddr, fMapRpcIdParInd[iAddr],
-  //(Double_t)fhPullT_Smt_Off->GetBinContent( fMapRpcIdParInd[iAddr] + 1)) <<endl;
+  //LOG(info) << Form(" <D> GetTOff for 0x%08x at HistoIndex %d: %7.1f ", iAddr, fMapRpcIdParInd[iAddr],
+  //(Double_t)fhPullT_Smt_Off->GetBinContent( fMapRpcIdParInd[iAddr] + 1));
   return (Double_t) fhPullT_Smt_Off->GetBinContent(fMapRpcIdParInd[iAddr] + 1);
 }
 
diff --git a/reco/detectors/tof/CbmTofFindTracks.h b/reco/detectors/tof/CbmTofFindTracks.h
index 6633f84380f37e50944ae065fa76de1080713510..f9f7815cad3c4a7dce97506282c10922297d25c4 100644
--- a/reco/detectors/tof/CbmTofFindTracks.h
+++ b/reco/detectors/tof/CbmTofFindTracks.h
@@ -213,6 +213,7 @@ private:
   TClonesArray* fTofHitArray;            // Output array of recalibrated TOF hits
   std::vector<Int_t> fTofHitIndexArray;  // Index of hit in TS
   TClonesArray* fTofHitArrayOut;         // Output array of recalibrated TOF hits
+  TClonesArray* fTofUHitArrayOut;        // Output array of recalibrated TOF hits
   TClonesArray* fTrackArray;             // Output array of CbmTofTracks
   TClonesArray* fTrackArrayOut;          // Output array of CbmTofTracks in CbmEvent mode
   TClonesArray* fTofUHitArray;           // Output array of unused TOF hits