diff --git a/src/THcAerogel.cxx b/src/THcAerogel.cxx
index 3fa912a6682e3224e230bc8ef713322159f38b66..475873c51711564b9edd357903a0b28da804a9c2 100644
--- a/src/THcAerogel.cxx
+++ b/src/THcAerogel.cxx
@@ -6,6 +6,7 @@
 */
 
 #include "THcAerogel.h"
+#include "THcHodoscope.h"
 #include "TClonesArray.h"
 #include "THcSignalHit.h"
 #include "THaEvData.h"
@@ -23,6 +24,7 @@
 #include "TMath.h"
 #include "THaTrackProj.h"
 #include "THcRawAdcHit.h"
+#include "THcHallCSpectrometer.h"
 
 #include <cstring>
 #include <cstdio>
@@ -190,6 +192,13 @@ THaAnalysisObject::EStatus THcAerogel::Init( const TDatime& date )
   EStatus status;
   if( (status = THaNonTrackingDetector::Init( date )) )
     return fStatus=status;
+ 
+ THcHallCSpectrometer *app=dynamic_cast<THcHallCSpectrometer*>(GetApparatus());
+   if(  !app ||
+      !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) {
+    static const char* const here = "ReadDatabase()";
+    Warning(Here(here),"Hodoscope \"%s\" not found. ","hod");
+  }
 
   fPresentP = 0;
   THaVar* vpresent = gHaVars->Find(Form("%s.present",GetApparatus()->GetName()));
@@ -274,11 +283,13 @@ Int_t THcAerogel::ReadDatabase( const TDatime& date )
   fGoodPosAdcPulseIntRaw = vector<Double_t> (fNelem, 0.0);
   fGoodPosAdcPulseAmp    = vector<Double_t> (fNelem, 0.0);
   fGoodPosAdcPulseTime   = vector<Double_t> (fNelem, 0.0);
+  fGoodPosAdcTdcDiffTime   = vector<Double_t> (fNelem, 0.0);
   fGoodNegAdcPed         = vector<Double_t> (fNelem, 0.0);
   fGoodNegAdcPulseInt    = vector<Double_t> (fNelem, 0.0);
   fGoodNegAdcPulseIntRaw = vector<Double_t> (fNelem, 0.0);
   fGoodNegAdcPulseAmp    = vector<Double_t> (fNelem, 0.0);
   fGoodNegAdcPulseTime   = vector<Double_t> (fNelem, 0.0);
+  fGoodNegAdcTdcDiffTime   = vector<Double_t> (fNelem, 0.0);
 
   // 6 GeV variables
   fPosTDCHits = new TClonesArray("THcSignalHit", fNelem*16);
@@ -452,12 +463,14 @@ Int_t THcAerogel::DefineVariables( EMode mode )
     {"goodPosAdcPulseIntRaw", "Good Negative ADC raw pulse integrals", "fGoodPosAdcPulseIntRaw"},
     {"goodPosAdcPulseAmp",    "Good Negative ADC pulse amplitudes",    "fGoodPosAdcPulseAmp"},
     {"goodPosAdcPulseTime",   "Good Negative ADC pulse times",         "fGoodPosAdcPulseTime"},
+    {"goodPosAdcTdcDiffTime",   "Good Positive hodo Start - ADC pulse times",         "fGoodPosAdcTdcDiffTime"},
 
     {"goodNegAdcPed",         "Good Negative ADC pedestals",           "fGoodNegAdcPed"},
     {"goodNegAdcPulseInt",    "Good Negative ADC pulse integrals",     "fGoodNegAdcPulseInt"},
     {"goodNegAdcPulseIntRaw", "Good Negative ADC raw pulse integrals", "fGoodNegAdcPulseIntRaw"},
     {"goodNegAdcPulseAmp",    "Good Negative ADC pulse amplitudes",    "fGoodNegAdcPulseAmp"},
     {"goodNegAdcPulseTime",   "Good Negative ADC pulse times",         "fGoodNegAdcPulseTime"},
+    {"goodNegAdcTdcDiffTime",   "Good Negative hodo Start - ADC pulse times",         "fGoodNegAdcTdcDiffTime"},
     { 0 }
   };
 
@@ -525,6 +538,7 @@ void THcAerogel::Clear(Option_t* opt)
     fGoodPosAdcPulseIntRaw.at(ielem) = 0.0;
     fGoodPosAdcPulseAmp.at(ielem)    = 0.0;
     fGoodPosAdcPulseTime.at(ielem)   = kBig;
+    fGoodPosAdcTdcDiffTime.at(ielem)   = kBig;
     fPosNpe.at(ielem)                = 0.0;
   }
   for (UInt_t ielem = 0; ielem < fGoodNegAdcPed.size(); ielem++) {
@@ -533,6 +547,7 @@ void THcAerogel::Clear(Option_t* opt)
     fGoodNegAdcPulseIntRaw.at(ielem) = 0.0;
     fGoodNegAdcPulseAmp.at(ielem)    = 0.0;
     fGoodNegAdcPulseTime.at(ielem)   = kBig;
+    fGoodNegAdcTdcDiffTime.at(ielem)   = kBig;
     fNegNpe.at(ielem)                = 0.0;
   }
 
@@ -657,6 +672,8 @@ Int_t THcAerogel::ApplyCorrections( void )
 //_____________________________________________________________________________
 Int_t THcAerogel::CoarseProcess( TClonesArray&  ) //tracks
 {
+  Double_t StartTime = 0.0;
+  if( fglHod ) StartTime = fglHod->GetStartTime();
 
     // Loop over the elements in the TClonesArray
     for(Int_t ielem = 0; ielem < frPosAdcPulseInt->GetEntries(); ielem++) {
@@ -667,8 +684,9 @@ Int_t THcAerogel::CoarseProcess( TClonesArray&  ) //tracks
       Double_t pulseIntRaw  = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
       Double_t pulseAmp     = ((THcSignalHit*) frPosAdcPulseAmp->ConstructedAt(ielem))->GetData();
       Double_t pulseTime    = ((THcSignalHit*) frPosAdcPulseTime->ConstructedAt(ielem))->GetData();
+      Double_t adctdcdiffTime = StartTime-pulseTime;
       Bool_t   errorFlag    = ((THcSignalHit*) fPosAdcErrorFlag->ConstructedAt(ielem))->GetData();
-      Bool_t   pulseTimeCut = pulseTime > fAdcTimeWindowMin && pulseTime < fAdcTimeWindowMax;
+      Bool_t   pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin && adctdcdiffTime < fAdcTimeWindowMax;
 
       // By default, the last hit within the timing cut will be considered "good"
       if (!errorFlag && pulseTimeCut) {
@@ -677,6 +695,7 @@ Int_t THcAerogel::CoarseProcess( TClonesArray&  ) //tracks
     	fGoodPosAdcPulseIntRaw.at(npmt) = pulseIntRaw;
     	fGoodPosAdcPulseAmp.at(npmt)    = pulseAmp;
     	fGoodPosAdcPulseTime.at(npmt)   = pulseTime;
+    	fGoodPosAdcTdcDiffTime.at(npmt)   = adctdcdiffTime;
 
     	fPosNpe.at(npmt) = fPosGain[npmt]*fGoodPosAdcPulseInt.at(npmt);
  	fPosNpeSum += fPosNpe.at(npmt);
@@ -696,8 +715,9 @@ Int_t THcAerogel::CoarseProcess( TClonesArray&  ) //tracks
       Double_t pulseIntRaw  = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
       Double_t pulseAmp     = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(ielem))->GetData();
       Double_t pulseTime    = ((THcSignalHit*) frNegAdcPulseTime->ConstructedAt(ielem))->GetData();
+      Double_t adctdcdiffTime = StartTime-pulseTime;
       Bool_t   errorFlag    = ((THcSignalHit*) fNegAdcErrorFlag->ConstructedAt(ielem))->GetData();
-      Bool_t   pulseTimeCut = pulseTime > fAdcTimeWindowMin && pulseTime < fAdcTimeWindowMax;
+      Bool_t   pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin && adctdcdiffTime < fAdcTimeWindowMax;
 
       // By default, the last hit within the timing cut will be considered "good"
       if (!errorFlag && pulseTimeCut) {
@@ -706,6 +726,7 @@ Int_t THcAerogel::CoarseProcess( TClonesArray&  ) //tracks
     	fGoodNegAdcPulseIntRaw.at(npmt) = pulseIntRaw;
     	fGoodNegAdcPulseAmp.at(npmt)    = pulseAmp;
     	fGoodNegAdcPulseTime.at(npmt)   = pulseTime;
+    	fGoodNegAdcTdcDiffTime.at(npmt)   = adctdcdiffTime;
 
     	fNegNpe.at(npmt) = fNegGain[npmt]*fGoodNegAdcPulseInt.at(npmt);
  	fNegNpeSum += fNegNpe.at(npmt);
diff --git a/src/THcAerogel.h b/src/THcAerogel.h
index 6fb8e403f835a6f540907e46bb98e128dfa1e3d0..b084123101a0579cf55db6b13f47b16147fb12d3 100644
--- a/src/THcAerogel.h
+++ b/src/THcAerogel.h
@@ -11,6 +11,7 @@
 #include "THaNonTrackingDetector.h"
 #include "THcHitList.h"
 #include "THcAerogelHit.h"
+class THcHodoscope;
 
 class THcAerogel : public THaNonTrackingDetector, public THcHitList {
 
@@ -113,11 +114,13 @@ class THcAerogel : public THaNonTrackingDetector, public THcHitList {
   vector<Double_t> fGoodPosAdcPulseIntRaw;
   vector<Double_t> fGoodPosAdcPulseAmp;
   vector<Double_t> fGoodPosAdcPulseTime;
+  vector<Double_t> fGoodPosAdcTdcDiffTime;
   vector<Double_t> fGoodNegAdcPed;
   vector<Double_t> fGoodNegAdcPulseInt;
   vector<Double_t> fGoodNegAdcPulseIntRaw;
   vector<Double_t> fGoodNegAdcPulseAmp;
   vector<Double_t> fGoodNegAdcPulseTime;
+ vector<Double_t> fGoodNegAdcTdcDiffTime;
 
   // 6 GeV era variables
   Int_t     fAnalyzePedestals;
@@ -166,6 +169,7 @@ class THcAerogel : public THaNonTrackingDetector, public THcHitList {
 
   void Setup(const char* name, const char* description);
   virtual void  InitializePedestals( );
+ THcHodoscope* fglHod;		// Hodoscope to get start time
 
   ClassDef(THcAerogel,0)   // Generic aerogel class
 }
diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx
index 27d081d391ea449cd18c1327de3d3eafa69b0cbe..a8e4dc644925d90451d916606de8d7d7ac070083 100644
--- a/src/THcCherenkov.cxx
+++ b/src/THcCherenkov.cxx
@@ -6,6 +6,7 @@
 */
 
 #include "THcCherenkov.h"
+#include "THcHodoscope.h"
 #include "TClonesArray.h"
 #include "THcSignalHit.h"
 #include "THaEvData.h"
@@ -22,6 +23,7 @@
 #include "TClonesArray.h"
 #include "TMath.h"
 #include "THaTrackProj.h"
+#include "THcHallCSpectrometer.h"
 
 #include <algorithm>
 #include <cstring>
@@ -31,6 +33,7 @@
 #include <string>
 #include <iomanip>
 
+
 using namespace std;
 
 using std::cout;
@@ -65,6 +68,7 @@ THcCherenkov::THcCherenkov( const char* name, const char* description,
   fGoodAdcPulseIntRaw = vector<Double_t> (MaxNumCerPmt, 0.0);
   fGoodAdcPulseAmp    = vector<Double_t> (MaxNumCerPmt, 0.0);
   fGoodAdcPulseTime   = vector<Double_t> (MaxNumCerPmt, 0.0);
+  fGoodAdcTdcDiffTime   = vector<Double_t> (MaxNumCerPmt, 0.0);
 
   InitArrays();
 }
@@ -152,6 +156,13 @@ THaAnalysisObject::EStatus THcCherenkov::Init( const TDatime& date )
   if((status = THaNonTrackingDetector::Init( date )))
     return fStatus=status;
 
+  THcHallCSpectrometer *app=dynamic_cast<THcHallCSpectrometer*>(GetApparatus());
+   if(  !app ||
+      !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) {
+    static const char* const here = "ReadDatabase()";
+    Warning(Here(here),"Hodoscope \"%s\" not found. ","hod");
+  }
+
  fPresentP = 0;
   THaVar* vpresent = gHaVars->Find(Form("%s.present",GetApparatus()->GetName()));
   if(vpresent) {
@@ -290,7 +301,8 @@ Int_t THcCherenkov::DefineVariables( EMode mode )
     {"goodAdcPulseIntRaw",  "Good ADC raw pulse integrals", "fGoodAdcPulseIntRaw"},
     {"goodAdcPulseAmp",     "Good ADC pulse amplitudes",    "fGoodAdcPulseAmp"},
     {"goodAdcPulseTime",    "Good ADC pulse times",         "fGoodAdcPulseTime"},
-    { 0 }
+     {"goodAdcTdcDiffTime",    "Good Hodo Start - ADC pulse times",         "fGoodAdcTdcDiffTime"},
+   { 0 }
   };
 
   return DefineVarsFromList(vars, mode);
@@ -336,6 +348,7 @@ void THcCherenkov::Clear(Option_t* opt)
     fGoodAdcPulseIntRaw.at(ielem) = 0.0;
     fGoodAdcPulseAmp.at(ielem)    = 0.0;
     fGoodAdcPulseTime.at(ielem)   = kBig;
+    fGoodAdcTdcDiffTime.at(ielem)   = kBig;
     fNpe.at(ielem)                = 0.0;
   }
 
@@ -406,6 +419,8 @@ Int_t THcCherenkov::ApplyCorrections( void )
 //_____________________________________________________________________________
 Int_t THcCherenkov::CoarseProcess( TClonesArray&  )
 {
+  Double_t StartTime = 0.0;
+  if( fglHod ) StartTime = fglHod->GetStartTime();
 
   // Loop over the elements in the TClonesArray
   for(Int_t ielem = 0; ielem < frAdcPulseInt->GetEntries(); ielem++) {
@@ -416,8 +431,9 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray&  )
     Double_t pulseIntRaw  = ((THcSignalHit*) frAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
     Double_t pulseAmp     = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData();
     Double_t pulseTime    = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData();
-    Bool_t   errorFlag    = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData();
-    Bool_t   pulseTimeCut = pulseTime > fAdcTimeWindowMin && pulseTime < fAdcTimeWindowMax;
+   Double_t adctdcdiffTime = StartTime-pulseTime;
+     Bool_t   errorFlag    = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData();
+    Bool_t   pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin && adctdcdiffTime < fAdcTimeWindowMax;
 
     // By default, the last hit within the timing cut will be considered "good"
     if (!errorFlag && pulseTimeCut) {
@@ -426,6 +442,7 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray&  )
       fGoodAdcPulseIntRaw.at(npmt) = pulseIntRaw;
       fGoodAdcPulseAmp.at(npmt)    = pulseAmp;
       fGoodAdcPulseTime.at(npmt)   = pulseTime;
+      fGoodAdcTdcDiffTime.at(npmt)   = adctdcdiffTime;
 
       fNpe.at(npmt) = fGain[npmt]*fGoodAdcPulseInt.at(npmt);
       fNpeSum += fNpe.at(npmt);
diff --git a/src/THcCherenkov.h b/src/THcCherenkov.h
index 0c83a6c3aa066dd083dd538e93a373e70365d29a..3ea8c93565bc582d165cb431d3e7aa7768656d70 100644
--- a/src/THcCherenkov.h
+++ b/src/THcCherenkov.h
@@ -11,6 +11,7 @@
 #include "THaNonTrackingDetector.h"
 #include "THcHitList.h"
 #include "THcCherenkovHit.h"
+class THcHodoscope;
 
 class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
 
@@ -65,6 +66,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
   vector<Double_t> fGoodAdcPulseIntRaw;
   vector<Double_t> fGoodAdcPulseAmp;
   vector<Double_t> fGoodAdcPulseTime;
+  vector<Double_t> fGoodAdcTdcDiffTime;
   vector<Double_t> fNpe;
 
   Int_t     fNRegions;
@@ -110,6 +112,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
 
   void Setup(const char* name, const char* description);
   virtual void  InitializePedestals( );
+ THcHodoscope* fglHod;		// Hodoscope to get start time
 
   ClassDef(THcCherenkov,0)        // Generic cherenkov class
 };
diff --git a/src/THcShowerArray.cxx b/src/THcShowerArray.cxx
index aca7f40565b95969aed38658cc471221ee1036d4..80a69bc27d9aa9a414285e89bb4f8f96c19fd824 100644
--- a/src/THcShowerArray.cxx
+++ b/src/THcShowerArray.cxx
@@ -6,6 +6,7 @@
 */
 
 #include "THcShowerArray.h"
+#include "THcHodoscope.h"
 #include "TClonesArray.h"
 #include "THcSignalHit.h"
 #include "THcGlobals.h"
@@ -107,6 +108,12 @@ THaAnalysisObject::EStatus THcShowerArray::Init( const TDatime& date )
   // How to get information for parent
   //  if( GetParent() )
   //    fOrigin = GetParent()->GetOrigin();
+  THcHallCSpectrometer *app=dynamic_cast<THcHallCSpectrometer*>(GetApparatus());
+   if(  !app ||
+      !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) {
+    static const char* const here = "ReadDatabase()";
+    Warning(Here(here),"Hodoscope \"%s\" not found. ","hod");
+  }
 
   EStatus status;
   if( (status=THaSubDetector::Init( date )) )
@@ -346,6 +353,7 @@ Int_t THcShowerArray::ReadDatabase( const TDatime& date )
   fGoodAdcPulseInt         = vector<Double_t> (fNelem, 0.0);
   fGoodAdcPulseAmp         = vector<Double_t> (fNelem, 0.0);
   fGoodAdcPulseTime        = vector<Double_t> (fNelem, 0.0);
+  fGoodAdcTdcDiffTime        = vector<Double_t> (fNelem, 0.0);
 
 
   fBlock_ClusterID = new Int_t[fNelem];
@@ -431,6 +439,7 @@ Int_t THcShowerArray::DefineVariables( EMode mode )
     {"goodAdcPulseInt", "Good ADC Pulse Integrals", "fGoodAdcPulseInt"},     //this is defined as pulseInt, which is the pedestal subtracted pulse integrals, and is defined if threshold is passed
     {"goodAdcPulseAmp", "Good ADC Pulse Amplitudes", "fGoodAdcPulseAmp"},
     {"goodAdcPulseTime", "Good ADC Pulse Times", "fGoodAdcPulseTime"},     //this is defined as pulseInt, which is the pedestal subtracted pulse integrals, and is defined if threshold is passed
+    {"goodAdcTdcDiffTime", "Good Hodo Starttime - ADC Pulse Times", "fGoodAdcTdcDiffTime"},     
 
 
     {"e", "Energy Depositions per block", "fE"},       //defined as fE = fA_p*fGain = pulseInt * Gain
@@ -484,6 +493,7 @@ void THcShowerArray::Clear( Option_t* )
     fGoodAdcPulseInt.at(ielem)         = 0.0;
     fGoodAdcPulseAmp.at(ielem)         = 0.0;
     fGoodAdcPulseTime.at(ielem)        = kBig;
+    fGoodAdcTdcDiffTime.at(ielem)        = kBig;
     fNumGoodAdcHits.at(ielem)          = 0.0;
     fE.at(ielem)                       = 0.0;
   }
@@ -849,6 +859,8 @@ void THcShowerArray::FillADC_Standard()
 //_____________________________________________________________________________
 void THcShowerArray::FillADC_DynamicPedestal()
 {
+  Double_t StartTime = 0.0;
+  if( fglHod ) StartTime = fglHod->GetStartTime();
   for (Int_t ielem=0;ielem<frAdcPulseInt->GetEntries();ielem++) {
     
     Int_t npad           = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
@@ -857,8 +869,9 @@ void THcShowerArray::FillADC_DynamicPedestal()
     Double_t pulseInt    = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetData();
     Double_t pulseAmp    = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData();
     Double_t pulseTime   = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData();
+    Double_t adctdcdiffTime = StartTime-pulseTime;
     Bool_t errorflag     = ((THcSignalHit*) frAdcErrorFlag->ConstructedAt(ielem))->GetData();
-    Bool_t pulseTimeCut  = (pulseTime > fAdcTimeWindowMin) &&  (pulseTime < fAdcTimeWindowMax);
+    Bool_t pulseTimeCut  = (adctdcdiffTime > fAdcTimeWindowMin) &&  (adctdcdiffTime < fAdcTimeWindowMax);
 
     if (!errorflag && pulseTimeCut) {
       
@@ -874,6 +887,7 @@ void THcShowerArray::FillADC_DynamicPedestal()
        fGoodAdcPed.at(npad) = pulsePed;
        fGoodAdcPulseAmp.at(npad) = pulseAmp;
        fGoodAdcPulseTime.at(npad) = pulseTime;
+       fGoodAdcTdcDiffTime.at(npad) = adctdcdiffTime;
 
        fNumGoodAdcHits.at(npad) = npad + 1;
       }
diff --git a/src/THcShowerArray.h b/src/THcShowerArray.h
index 8c7033dd99a60d1ed9fdf64d14f5161944bcfd23..40edca47fbfc24e6dbc7665619cd9923d1c99a8e 100644
--- a/src/THcShowerArray.h
+++ b/src/THcShowerArray.h
@@ -27,6 +27,7 @@
 
 class THaEvData;
 class THaSignalHit;
+class THcHodoscope;
 
 class THcShowerArray : public THaSubDetector {
 
@@ -113,6 +114,7 @@ protected:
   vector<Double_t>      fGoodAdcPulseInt;       // [fNelem] good pedestal subtracted pulse integrals
   vector<Double_t>      fGoodAdcPulseAmp;
   vector<Double_t>      fGoodAdcPulseTime;
+  vector<Double_t>      fGoodAdcTdcDiffTime;
 
   vector<Double_t>      fE;                    //[fNelem] energy deposition in shower blocks
 
@@ -208,6 +210,7 @@ protected:
 
   virtual Int_t  ReadDatabase( const TDatime& date );
   virtual Int_t  DefineVariables( EMode mode = kDefine );
+ THcHodoscope* fglHod;		// Hodoscope to get start time
   ClassDef(THcShowerArray,0); // Fly;s Eye calorimeter array
 };
 
diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx
index be73ef5afe69965234cb0013902fee935be6e70e..6f75b54a902b996a119f42515e15a98e8bba8841 100644
--- a/src/THcShowerPlane.cxx
+++ b/src/THcShowerPlane.cxx
@@ -6,6 +6,7 @@ One plane of shower blocks with side readout
 */
 
 #include "THcShowerPlane.h"
+#include "THcHodoscope.h"
 #include "TClonesArray.h"
 #include "THcSignalHit.h"
 #include "THcGlobals.h"
@@ -152,6 +153,12 @@ THaAnalysisObject::EStatus THcShowerPlane::Init( const TDatime& date )
     cout << "****** THcShowerPlane::Accumulate will be skipped ******" << endl;
   }
 
+  if(  !app ||
+      !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) {
+    static const char* const here = "ReadDatabase()";
+    Warning(Here(here),"Hodoscope \"%s\" not found. ","hod");
+  }
+
   EStatus status;
   if( (status=THaSubDetector::Init( date )) )
     return fStatus = status;
@@ -253,11 +260,13 @@ Int_t THcShowerPlane::ReadDatabase( const TDatime& date )
   fGoodPosAdcPulseInt         = vector<Double_t> (fNelem, 0.0);
   fGoodPosAdcPulseAmp         = vector<Double_t> (fNelem, 0.0);
   fGoodPosAdcPulseTime        = vector<Double_t> (fNelem, 0.0);
+  fGoodPosAdcTdcDiffTime        = vector<Double_t> (fNelem, 0.0);
 
   fGoodNegAdcPed              = vector<Double_t> (fNelem, 0.0);
   fGoodNegAdcPulseInt         = vector<Double_t> (fNelem, 0.0);
   fGoodNegAdcPulseAmp         = vector<Double_t> (fNelem, 0.0);
   fGoodNegAdcPulseTime        = vector<Double_t> (fNelem, 0.0);
+  fGoodNegAdcTdcDiffTime        = vector<Double_t> (fNelem, 0.0);
 
   // Energy depositions per block (not corrected for track coordinate)
 
@@ -375,11 +384,13 @@ Int_t THcShowerPlane::DefineVariables( EMode mode )
     {"goodPosAdcPulseInt", "Good Positive ADC integrals",           "fGoodPosAdcPulseInt"},
     {"goodPosAdcPulseAmp", "Good Positive ADC amplitudes",          "fGoodPosAdcPulseAmp"},
     {"goodPosAdcPulseTime","Good Positive ADC times",               "fGoodPosAdcPulseTime"},
+    {"goodPosAdcTdcDiffTime","Good Positive Hodo Start time-ADC times",               "fGoodPosAdcTdcDiffTime"},
 
     {"goodNegAdcPed",      "Good Negative ADC pedestals",           "fGoodNegAdcPed"},
     {"goodNegAdcPulseInt", "Good Negative ADC integrals",           "fGoodNegAdcPulseInt"},
     {"goodNegAdcPulseAmp", "Good Negative ADC amplitudes",          "fGoodNegAdcPulseAmp"},
     {"goodNegAdcPulseTime","Good Negative ADC times",               "fGoodNegAdcPulseTime"},
+   {"goodNegAdcTdcDiffTime","Good Negative Hodo Start time-ADC times",               "fGoodNegAdcTdcDiffTime"},
 
     {"epos",       "Energy Depositions from Positive Side PMTs",    "fEpos"},
     {"eneg",       "Energy Depositions from Negative Side PMTs",    "fEneg"},
@@ -431,6 +442,7 @@ void THcShowerPlane::Clear( Option_t* )
     fGoodPosAdcPulseInt.at(ielem)         = 0.0;
     fGoodPosAdcPulseAmp.at(ielem)         = 0.0;
     fGoodPosAdcPulseTime.at(ielem)        = kBig;
+    fGoodPosAdcTdcDiffTime.at(ielem)        = kBig;
     fEpos.at(ielem)                       = 0.0;
     fNumGoodPosAdcHits.at(ielem)          = 0.0;
   }
@@ -441,6 +453,7 @@ void THcShowerPlane::Clear( Option_t* )
     fGoodNegAdcPulseInt.at(ielem)         = 0.0;
     fGoodNegAdcPulseAmp.at(ielem)         = 0.0;
     fGoodNegAdcPulseTime.at(ielem)        = kBig;
+    fGoodNegAdcTdcDiffTime.at(ielem)        = kBig;
     fEneg.at(ielem)                       = 0.0;
     fNumGoodNegAdcHits.at(ielem)          = 0.0;
   }
@@ -723,6 +736,8 @@ void THcShowerPlane::FillADC_Standard()
 //_____________________________________________________________________________
 void THcShowerPlane::FillADC_DynamicPedestal()
 {
+  Double_t StartTime = 0.0;
+  if( fglHod ) StartTime = fglHod->GetStartTime();
   Double_t AdcTimeWindowMin=static_cast<THcShower*>(fParent)->GetAdcTimeWindowMin();
   Double_t AdcTimeWindowMax=static_cast<THcShower*>(fParent)->GetAdcTimeWindowMax();
   for (Int_t ielem=0;ielem<frNegAdcPulseInt->GetEntries();ielem++) {
@@ -732,9 +747,10 @@ void THcShowerPlane::FillADC_DynamicPedestal()
     Double_t pulseAmp     = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(ielem))->GetData();
     Double_t pulseIntRaw  = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
     Double_t pulseTime    = ((THcSignalHit*) frNegAdcPulseTime->ConstructedAt(ielem))->GetData();
+    Double_t adctdcdiffTime = StartTime-pulseTime;
     Double_t threshold    = ((THcSignalHit*) frNegAdcThreshold->ConstructedAt(ielem))->GetData();
     Bool_t   errorflag    = ((THcSignalHit*) frNegAdcErrorFlag->ConstructedAt(ielem))->GetData();
-    Bool_t   pulseTimeCut = (pulseTime > AdcTimeWindowMin) && (pulseTime < AdcTimeWindowMax);
+    Bool_t   pulseTimeCut = (adctdcdiffTime > AdcTimeWindowMin) && (adctdcdiffTime < AdcTimeWindowMax);
     if (!errorflag && pulseTimeCut) {
       fGoodNegAdcPulseIntRaw.at(npad) =pulseIntRaw;
 
@@ -747,6 +763,7 @@ void THcShowerPlane::FillADC_DynamicPedestal()
 	fGoodNegAdcPed.at(npad) = pulsePed;
       fGoodNegAdcPulseAmp.at(npad) = pulseAmp;
       fGoodNegAdcPulseTime.at(npad) = pulseTime;
+      fGoodNegAdcTdcDiffTime.at(npad) = adctdcdiffTime;
 
       fTotNumGoodAdcHits++;
       fTotNumGoodNegAdcHits++;
@@ -765,8 +782,9 @@ void THcShowerPlane::FillADC_DynamicPedestal()
     Double_t pulseInt     = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetData();
     Double_t pulseIntRaw  = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
     Double_t pulseTime    = ((THcSignalHit*) frPosAdcPulseTime->ConstructedAt(ielem))->GetData();
-    Bool_t   errorflag    = ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(ielem))->GetData();
-    Bool_t   pulseTimeCut = (pulseTime > AdcTimeWindowMin) &&  (pulseTime < AdcTimeWindowMax);
+     Double_t adctdcdiffTime = StartTime-pulseTime;
+   Bool_t   errorflag    = ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(ielem))->GetData();
+    Bool_t   pulseTimeCut = (adctdcdiffTime > AdcTimeWindowMin) &&  (adctdcdiffTime < AdcTimeWindowMax);
     if (!errorflag && pulseTimeCut) {
       fGoodPosAdcPulseIntRaw.at(npad) = pulseIntRaw;
 
@@ -780,6 +798,7 @@ void THcShowerPlane::FillADC_DynamicPedestal()
 	fGoodPosAdcPed.at(npad) = pulsePed;
 	fGoodPosAdcPulseAmp.at(npad) = pulseAmp;
 	fGoodPosAdcPulseTime.at(npad) = pulseTime;
+	fGoodPosAdcTdcDiffTime.at(npad) = adctdcdiffTime;
 
 	fTotNumGoodAdcHits++;
 	fTotNumGoodPosAdcHits++;
diff --git a/src/THcShowerPlane.h b/src/THcShowerPlane.h
index ef68eca2e026c029127b9eaf94060e26dc8c2984..29a06e6156e3a0846a0276db17d8653b3a9df883 100644
--- a/src/THcShowerPlane.h
+++ b/src/THcShowerPlane.h
@@ -24,6 +24,7 @@ using namespace std;
 
 class THaEvData;
 class THaSignalHit;
+class THcHodoscope;
 
 class THcShowerPlane : public THaSubDetector {
 
@@ -153,11 +154,13 @@ protected:
   vector<Double_t>      fGoodPosAdcPulseInt;
   vector<Double_t>      fGoodPosAdcPulseAmp;
   vector<Double_t>      fGoodPosAdcPulseTime;
+  vector<Double_t>      fGoodPosAdcTdcDiffTime;
 
   vector<Double_t>      fGoodNegAdcPed;
   vector<Double_t>      fGoodNegAdcPulseInt;
   vector<Double_t>      fGoodNegAdcPulseAmp;
   vector<Double_t>      fGoodNegAdcPulseTime;
+ vector<Double_t>       fGoodNegAdcTdcDiffTime;
 
   vector<Double_t>      fGoodPosAdcPulseIntRaw;
   vector<Double_t>      fGoodNegAdcPulseIntRaw;
@@ -237,6 +240,8 @@ protected:
   vector<Int_t> fStatNumHit;
   Int_t fTotStatNumTrk;
   Int_t fTotStatNumHit;
+
+ THcHodoscope* fglHod;		// Hodoscope to get start time
   
   ClassDef(THcShowerPlane,0); // Calorimeter bars in a plane
 };