diff --git a/src/THcHitList.cxx b/src/THcHitList.cxx
index 6b7ed91f86ceec5ee051edff16017f6ae773aaf5..6e47ea5bf470ab100802b5a0d653613b2698711f 100644
--- a/src/THcHitList.cxx
+++ b/src/THcHitList.cxx
@@ -259,10 +259,12 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	fRefIndexMaps[i].hashit = kFALSE;
 	Bool_t goodreftime=kFALSE;
 	Int_t reftime = 0;
+	Int_t prevtime = 0;
 	for(Int_t ihit=0; ihit<nrefhits; ihit++) {
 	  reftime = evdata.GetData(Decoder::kPulseTime,fRefIndexMaps[i].crate,
 				   fRefIndexMaps[i].slot, fRefIndexMaps[i].channel,ihit);
 	  reftime += 64*timeshift;
+	  if (ihit != (nrefhits-1)) prevtime = reftime;
 	  if(reftime >= fADC_RefTimeCut) {
 	    goodreftime = kTRUE;
 	    break;
@@ -270,6 +272,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	}
 	if(goodreftime || (nrefhits>0 && fADC_RefTimeBest)) {
 	  fRefIndexMaps[i].reftime = reftime;
+	  fRefIndexMaps[i].refdifftime = reftime-prevtime;
 	  fRefIndexMaps[i].hashit = kTRUE;
 	}
       } else {			// Assume this is a TDC
@@ -281,9 +284,11 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	// then fTDC_RefTimeCut
 	Bool_t goodreftime=kFALSE;
 	Int_t reftime = 0;
+	Int_t prevtime = 0;
 	for(Int_t ihit=0; ihit<nrefhits; ihit++) {
 	  reftime = evdata.GetData(fRefIndexMaps[i].crate,fRefIndexMaps[i].slot,
 				   fRefIndexMaps[i].channel,ihit);
+	  if( ihit != (nrefhits-1))prevtime=reftime;
 	  if(reftime >= fTDC_RefTimeCut) {
 	    goodreftime = kTRUE;
 	    break;
@@ -291,6 +296,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	}
 	if(goodreftime || (nrefhits>0 && fTDC_RefTimeBest)) {
 	    fRefIndexMaps[i].reftime = reftime;
+	    fRefIndexMaps[i].refdifftime = reftime-prevtime;
 	    fRefIndexMaps[i].hashit = kTRUE;
 	}
       }
@@ -354,8 +360,10 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  Int_t nrefhits = evdata.GetNumHits(d->crate,d->slot,d->refchan);
 	  Bool_t goodreftime=kFALSE;
 	  Int_t reftime=0;
+	  Int_t prevtime=0;
 	  for(Int_t ihit=0; ihit<nrefhits; ihit++) {
 	    reftime = evdata.GetData(d->crate, d->slot, d->refchan, ihit);
+	    if (ihit != (nrefhits-1))prevtime = reftime;
 	    if(reftime >= fTDC_RefTimeCut) {
 	      goodreftime = kTRUE;
 	      break;
@@ -365,6 +373,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  // hits make the RefTimeCut
 	  if(goodreftime || (nrefhits>0 && fTDC_RefTimeBest)) {
 	    rawhit->SetReference(signal, reftime);
+	    rawhit->SetReferenceDiff(signal, prevtime);
 	  } else if (!suppresswarnings) {
 	    cout << "HitList(event=" << evdata.GetEvNum() << "): refchan " << d->refchan <<
 	      " missing for (" << d->crate << ", " << d->slot <<
@@ -375,6 +384,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  if(d->refindex >=0 && d->refindex < fNRefIndex) {
 	    if(fRefIndexMaps[d->refindex].hashit) {
 	      rawhit->SetReference(signal, fRefIndexMaps[d->refindex].reftime);
+	      rawhit->SetReferenceDiff(signal, fRefIndexMaps[d->refindex].refdifftime);
 	    } else {
 	      if(!suppresswarnings) {
 		cout << "HitList(event=" << evdata.GetEvNum() << "): refindex " << d->refindex <<
@@ -437,6 +447,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 					       d->crate, d->slot, d->refchan);
 	  Bool_t goodreftime=kFALSE;
 	  Int_t reftime = 0;
+	  Int_t prevtime = 0;
 	  timeshift=0;
 	  if(fTISlot>0) {		// Get the trigger time for this module
 	    if(fTrigTimeShiftMap.find(d->slot)
@@ -451,6 +462,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  for(Int_t ihit=0; ihit<nrefhits; ihit++) {
 	    reftime = evdata.GetData(Decoder::kPulseTime, d->crate, d->slot, d->refchan, ihit);
 	    reftime += 64*timeshift;
+	     if (ihit != (nrefhits-1)) prevtime=reftime;
 	    if(reftime >= fADC_RefTimeCut) {
 	      goodreftime=kTRUE;
 	      break;
@@ -460,6 +472,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  // hits make the RefTimeCut
 	  if(goodreftime || (nrefhits>0 && fADC_RefTimeBest)) {
 	    rawhit->SetReference(signal, reftime);
+	    rawhit->SetReferenceDiff(signal, reftime-prevtime);
 	  } else if (!suppresswarnings) {
 #ifndef SUPPRESSMISSINGADCREFTIMEMESSAGES
 	    cout << "HitList(event=" << evdata.GetEvNum() << "): refchan " << d->refchan <<
@@ -472,6 +485,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  if(d->refindex >=0 && d->refindex < fNRefIndex) {
 	    if(fRefIndexMaps[d->refindex].hashit) {
 	      rawhit->SetReference(signal, fRefIndexMaps[d->refindex].reftime);
+	      rawhit->SetReferenceDiff(signal, fRefIndexMaps[d->refindex].refdifftime);
 	    } else {
 	      if(!suppresswarnings) {
 #ifndef SUPPRESSMISSINGADCREFTIMEMESSAGES
diff --git a/src/THcHitList.h b/src/THcHitList.h
index 423a75e9c0ffd07c749fc74a9ca776279482235f..568d089694f00dde79e79f4ca3e211353e0b30c1 100644
--- a/src/THcHitList.h
+++ b/src/THcHitList.h
@@ -62,6 +62,7 @@ protected:
     Int_t slot;
     Int_t channel;
     Int_t reftime;
+    Int_t refdifftime;
   };
   std::vector<RefIndexMap> fRefIndexMaps;
   // Should this be a sparse list instead in case user
diff --git a/src/THcRawAdcHit.cxx b/src/THcRawAdcHit.cxx
index d99e67455de0a2e77eadaa63a5eb029364e1fd01..0f60c651b4c8c39ff32e66843c554c01006a037c 100644
--- a/src/THcRawAdcHit.cxx
+++ b/src/THcRawAdcHit.cxx
@@ -261,6 +261,10 @@ void THcRawAdcHit::SetRefTime(Int_t refTime) {
   fHasRefTime = kTRUE;
 }
 
+void THcRawAdcHit::SetRefDiffTime(Int_t refDiffTime) {
+  fRefDiffTime = refDiffTime;
+}
+
 void THcRawAdcHit::SetSample(Int_t data) {
   if (fNSamples >= fMaxNSamples) {
     throw std::out_of_range(
@@ -498,6 +502,17 @@ Int_t THcRawAdcHit::GetRefTime() const {
   }
 }
 
+Int_t THcRawAdcHit::GetRefDiffTime() const {
+  if (fHasRefTime) {
+    return fRefDiffTime;
+  }
+  else {
+    TString msg = TString::Format(
+      "`THcRawAdcHit::GetRefTime`: Reference time not available!"
+    );
+    throw std::runtime_error(msg.Data());
+  }
+}
 
 Bool_t THcRawAdcHit::HasRefTime() const {
   return fHasRefTime;
diff --git a/src/THcRawAdcHit.h b/src/THcRawAdcHit.h
index 29cbbd1477d4302ead4920094ff4feec2dbcb805..fc31189397173fafc269911f8c9d6db98c04aec3 100644
--- a/src/THcRawAdcHit.h
+++ b/src/THcRawAdcHit.h
@@ -15,6 +15,7 @@ class THcRawAdcHit : public TObject {
     void SetData(Int_t data);
     void SetSample(Int_t data);
     void SetRefTime(Int_t refTime);
+    void SetRefDiffTime(Int_t refDiffTime);
     void SetDataTimePedestalPeak(
       Int_t data, Int_t time, Int_t pedestal, Int_t peak
     );
@@ -41,6 +42,7 @@ class THcRawAdcHit : public TObject {
     Int_t GetPulseTimeRaw(UInt_t iPulse=0) const;
     Int_t GetSampleRaw(UInt_t iSample=0) const;
     Int_t GetRefTime() const;
+    Int_t GetRefDiffTime() const;
 
     Double_t GetPed() const;
     Double_t GetPulseInt(UInt_t iPulse=0) const;
@@ -78,6 +80,7 @@ class THcRawAdcHit : public TObject {
     Int_t fPulseTime[fMaxNPulses];
     Int_t fSample[fMaxNSamples];
     Int_t fRefTime;
+    Int_t fRefDiffTime;
 
     Bool_t fHasMulti;
     Bool_t fHasRefTime;
diff --git a/src/THcRawDCHit.cxx b/src/THcRawDCHit.cxx
index a8e9eff231bb89fc87f18346583de812624f6a06..17b23b1a2d5ea7a11bd5258caf8af4ad6f2f457b 100644
--- a/src/THcRawDCHit.cxx
+++ b/src/THcRawDCHit.cxx
@@ -59,6 +59,17 @@ void THcRawDCHit::SetReference(Int_t signal, Int_t reference) {
   }
 }
 
+void THcRawDCHit::SetReferenceDiff(Int_t signal, Int_t reference) {
+  if (signal == 0) {
+    fTdcHit.SetRefDiffTime(reference);
+  }
+  else {
+    throw std::out_of_range(
+      "`THcRawDCHit::SetReference`: only signal `0` available!"
+    );
+  }
+}
+
 
 Int_t THcRawDCHit::GetData(Int_t signal) {
   if (signal == 0) {
@@ -95,6 +106,17 @@ Int_t THcRawDCHit::GetReference(Int_t signal) {
   }
 }
 
+Int_t THcRawDCHit::GetReferenceDiff(Int_t signal) {
+  if (signal == 0) {
+    return fTdcHit.GetRefDiffTime();
+  }
+  else {
+    throw std::out_of_range(
+      "`THcRawDCHit::GetReference`: only signal `0` available!"
+    );
+  }
+}
+
 
 THcRawHit::ESignalType THcRawDCHit::GetSignalType(Int_t signal) {
   if (signal == 0) {
diff --git a/src/THcRawDCHit.h b/src/THcRawDCHit.h
index b1f315f7a8ec5387f7e33cf32686ff46fbe44cb9..363ba2d4a6b0d517ebd36b3362e94821d3f4c114 100644
--- a/src/THcRawDCHit.h
+++ b/src/THcRawDCHit.h
@@ -18,10 +18,12 @@ class THcRawDCHit : public THcRawHit {
 
     virtual void SetData(Int_t signal, Int_t data);
     virtual void SetReference(Int_t signal, Int_t reference);
+    virtual void SetReferenceDiff(Int_t signal, Int_t reference);
 
     virtual Int_t GetData(Int_t signal);
     virtual Int_t GetRawData(Int_t signal);
     virtual Int_t GetReference(Int_t signal);
+    virtual Int_t GetReferenceDiff(Int_t signal);
     virtual ESignalType GetSignalType(Int_t signal);
     virtual Int_t GetNSignals();
 
diff --git a/src/THcRawHit.h b/src/THcRawHit.h
index e56674f96a66d32ab4fc71a76cb6d72a25f74a43..e1fb87701b3b253dea3b960aa84ae0409e964af4 100644
--- a/src/THcRawHit.h
+++ b/src/THcRawHit.h
@@ -39,6 +39,7 @@ public:
   virtual Int_t GetNSignals() { return 1;}
 
   virtual void SetReference(Int_t signal, Int_t reference) {};
+  virtual void SetReferenceDiff(Int_t signal, Int_t reference) {};
   virtual Bool_t HasReference(Int_t signal) {return kFALSE;};
   virtual Int_t GetReference(Int_t signal) {return 0;};
 
diff --git a/src/THcRawHodoHit.cxx b/src/THcRawHodoHit.cxx
index 2e7c84ce3145748a1665ea9b350348ed8a2a5719..848f88ddc908e29313a2dc362c279b1ad0c48826 100644
--- a/src/THcRawHodoHit.cxx
+++ b/src/THcRawHodoHit.cxx
@@ -105,6 +105,18 @@ void THcRawHodoHit::SetReference(Int_t signal, Int_t reference) {
   }
 }
 
+void THcRawHodoHit::SetReferenceDiff(Int_t signal, Int_t referenceDiff) {
+  if (signal < fNAdcSignals) {
+    fAdcHits[signal].SetRefDiffTime(referenceDiff);
+  } else if (signal < fNAdcSignals+fNTdcSignals) {
+    fTdcHits[signal-fNAdcSignals].SetRefDiffTime(referenceDiff);
+  } else {
+    throw std::out_of_range(
+      "`THcRawHodoHit::SetReference`: only signals `2` and `3` available!"
+    );
+  }
+}
+
 
 Int_t THcRawHodoHit::GetData(Int_t signal) {
   if (0 <= signal && signal < fNAdcSignals) {
@@ -147,6 +159,17 @@ Int_t THcRawHodoHit::GetReference(Int_t signal) {
   }
 }
 
+Int_t THcRawHodoHit::GetReferenceDiff(Int_t signal) {
+  if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
+    return fTdcHits[signal-fNAdcSignals].GetRefDiffTime();
+  }
+  else {
+    throw std::out_of_range(
+      "`THcRawHodoHit::GetReference`: only signals `2` and `3` available!"
+    );
+  }
+}
+
 
 THcRawHit::ESignalType THcRawHodoHit::GetSignalType(Int_t signal) {
   if (0 <= signal && signal < fNAdcSignals) {
diff --git a/src/THcRawHodoHit.h b/src/THcRawHodoHit.h
index dc2528f6e81267b295150d97a95534d34af475b9..025e0ae2c96cc1ce94fa35c6c17972c9a50ab261 100644
--- a/src/THcRawHodoHit.h
+++ b/src/THcRawHodoHit.h
@@ -25,10 +25,12 @@ class THcRawHodoHit : public THcRawHit {
       Int_t signal, Int_t data, Int_t time, Int_t pedestal, Int_t peak
     );
     virtual void SetReference(Int_t signal, Int_t reference);
+    virtual void SetReferenceDiff(Int_t signal, Int_t referenceDiff);
 
     virtual Int_t GetData(Int_t signal);
     virtual Int_t GetRawData(Int_t signal);
     virtual Int_t GetReference(Int_t signal);
+    virtual Int_t GetReferenceDiff(Int_t signal);
     virtual ESignalType GetSignalType(Int_t signal);
     virtual Int_t GetNSignals();
 
diff --git a/src/THcRawShowerHit.cxx b/src/THcRawShowerHit.cxx
index 1a32508ed78b6546db327c244291e68dd5f67609..043de13b4795d34acdd5b16b4e908cbf7d0a5e05 100644
--- a/src/THcRawShowerHit.cxx
+++ b/src/THcRawShowerHit.cxx
@@ -92,6 +92,16 @@ void THcRawShowerHit::SetReference(Int_t signal, Int_t reference) {
   }
 }
 
+void THcRawShowerHit::SetReferenceDiff(Int_t signal, Int_t reference) {
+  if (signal < fNAdcSignals) {
+    fAdcHits[signal].SetRefDiffTime(reference);
+  } else {
+    throw std::out_of_range(
+      "`THcRawHodoHit::SetReference`: only signals `2` and `3` available!"
+    );
+  }
+}
+
 
 Int_t THcRawShowerHit::GetData(Int_t signal) {
   if (0 <= signal && signal < fNAdcSignals) {
diff --git a/src/THcRawShowerHit.h b/src/THcRawShowerHit.h
index 9008831e54362303bed9a48474ed0ccbd5a6ac85..c1a4fd871f4f5424dd55af16afbc8ca4f0e97353 100644
--- a/src/THcRawShowerHit.h
+++ b/src/THcRawShowerHit.h
@@ -22,6 +22,7 @@ class THcRawShowerHit : public THcRawHit {
       Int_t signal, Int_t data, Int_t time, Int_t pedestal, Int_t peak
     );
     virtual void SetReference(Int_t signal, Int_t reference);
+    virtual void SetReferenceDiff(Int_t signal, Int_t reference);
 
     virtual Int_t GetData(Int_t signal);
     virtual Int_t GetRawData(Int_t signal);
diff --git a/src/THcRawTdcHit.cxx b/src/THcRawTdcHit.cxx
index d2ec274f8ca979f901d71c933a54193c13bd882a..38fb647078489d95cdf65f444ff5ce17cbff7bbf 100644
--- a/src/THcRawTdcHit.cxx
+++ b/src/THcRawTdcHit.cxx
@@ -95,6 +95,7 @@ THcRawTdcHit& THcRawTdcHit::operator=(const THcRawTdcHit& right) {
       fTime[iHit] = right.fTime[iHit];
     }
     fRefTime = right.fRefTime;
+    fRefDiffTime = right.fRefDiffTime;
     fHasRefTime = right.fHasRefTime;
     fNHits = right.fNHits;
   }
@@ -113,6 +114,7 @@ void THcRawTdcHit::Clear(Option_t* opt) {
     fTime[iHit] = 0;
   }
   fRefTime = 0;
+  fRefDiffTime = 0;
   fHasRefTime = kFALSE;
   fNHits = 0;
 }
@@ -138,6 +140,10 @@ void THcRawTdcHit::SetRefTime(Int_t refTime) {
   fHasRefTime = kTRUE;
 }
 
+void THcRawTdcHit::SetRefDiffTime(Int_t refDiffTime) {
+  fRefDiffTime = refDiffTime;
+}
+
 
 Int_t THcRawTdcHit::GetTimeRaw(UInt_t iHit) const {
   if (iHit < fNHits) {
@@ -177,6 +183,18 @@ Int_t THcRawTdcHit::GetRefTime() const {
   }
 }
 
+Int_t THcRawTdcHit::GetRefDiffTime() const {
+  if (fHasRefTime) {
+    return fRefDiffTime;
+  }
+  else {
+    TString msg = TString::Format(
+      "`THcRawTdcHit::GetRefDiffTime`: Reference time not available!"
+    );
+    throw std::runtime_error(msg.Data());
+  }
+}
+
 
 Bool_t THcRawTdcHit::HasRefTime() const {
   return fHasRefTime;
diff --git a/src/THcRawTdcHit.h b/src/THcRawTdcHit.h
index c930f2772f4fe96e7229e4cc05a2406ba9c8a08c..91e7eba4b5f4bd81522d836d2a88c9e9586c1fb6 100644
--- a/src/THcRawTdcHit.h
+++ b/src/THcRawTdcHit.h
@@ -14,10 +14,12 @@ class THcRawTdcHit : public TObject {
 
     void SetTime(Int_t time);
     void SetRefTime(Int_t refTime);
+    void SetRefDiffTime(Int_t refDiffTime);
 
     Int_t GetTimeRaw(UInt_t iHit=0) const;
     Int_t GetTime(UInt_t iHit=0) const;
     Int_t GetRefTime() const;
+    Int_t GetRefDiffTime() const;
 
     Bool_t HasRefTime() const;
 
@@ -30,6 +32,7 @@ class THcRawTdcHit : public TObject {
 
     Int_t fTime[fMaxNHits];
     Int_t fRefTime;
+    Int_t fRefDiffTime;
 
     Bool_t fHasRefTime;
     UInt_t fNHits;
diff --git a/src/THcScintillatorPlane.cxx b/src/THcScintillatorPlane.cxx
index 6dbc58b63a2d778239bb66e5dc3ea7c37f1ecd2f..f2605e43df4e154a190c7878e619ecbfd9e98e7c 100644
--- a/src/THcScintillatorPlane.cxx
+++ b/src/THcScintillatorPlane.cxx
@@ -544,6 +544,10 @@ Int_t THcScintillatorPlane::DefineVariables( EMode mode )
     {"NegTdcRefTime",   "Reference time of Neg TDC", "fNegTdcRefTime"},
     {"PosAdcRefTime",   "Reference time of Pos ADC", "fPosAdcRefTime"},
     {"NegAdcRefTime",   "Reference time of Neg aDC", "fNegAdcRefTime"},
+    {"PosTdcRefDiffTime",   "Reference Diff time of Pos TDC", "fPosTdcRefDiffTime"},
+    {"NegTdcRefDiffTime",   "Reference Diff time of Neg TDC", "fNegTdcRefDiffTime"},
+    {"PosAdcRefDiffTime",   "Reference Diff time of Pos ADC", "fPosAdcRefDiffTime"},
+    {"NegAdcRefDiffTime",   "Reference Diff time of Neg aDC", "fNegAdcRefDiffTime"},
    //{"ngoodhits", "Number of paddle hits (passed tof tolerance and used to determine the focal plane time )",           "GetNGoodHits() "},
     { 0 }
   };
@@ -657,6 +661,10 @@ void THcScintillatorPlane::Clear( Option_t* )
   fPosAdcRefTime = kBig;
   fNegTdcRefTime = kBig;
   fNegAdcRefTime = kBig;
+  fPosTdcRefDiffTime = kBig;
+  fPosAdcRefDiffTime = kBig;
+  fNegTdcRefDiffTime = kBig;
+  fNegAdcRefDiffTime = kBig;
 }
 
 //_____________________________________________________________________________
@@ -715,6 +723,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
   fPosAdcRefTime = kBig;
   fNegTdcRefTime = kBig;
   fNegAdcRefTime = kBig;
+  fPosTdcRefDiffTime = kBig;
+  fPosAdcRefDiffTime = kBig;
+  fNegTdcRefDiffTime = kBig;
+  fNegAdcRefDiffTime = kBig;
   Int_t nrPosTDCHits=0;
   Int_t nrNegTDCHits=0;
   Int_t nrPosADCHits=0;
@@ -802,7 +814,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
 
     THcRawTdcHit& rawPosTdcHit = hit->GetRawTdcHitPos();
     if (rawPosTdcHit.GetNHits() >0 && rawPosTdcHit.HasRefTime()) {
-    if (fPosTdcRefTime == kBig) fPosTdcRefTime=rawPosTdcHit.GetRefTime() ;
+      if (fPosTdcRefTime == kBig)  {
+	fPosTdcRefTime=rawPosTdcHit.GetRefTime() ;
+	fPosTdcRefDiffTime=rawPosTdcHit.GetRefDiffTime() ;
+      }
     if (fPosTdcRefTime != rawPosTdcHit.GetRefTime()) {
       cout <<  "THcScintillatorPlane: " << GetName() << " reftime problem at paddle num = " << padnum << " TDC pos hits = " << rawPosTdcHit.GetNHits() << endl;
         problem_flag=kTRUE;
@@ -817,7 +832,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
     }
     THcRawTdcHit& rawNegTdcHit = hit->GetRawTdcHitNeg();
     if (rawNegTdcHit.GetNHits() >0 && rawNegTdcHit.HasRefTime()) {
-    if (fNegTdcRefTime == kBig) fNegTdcRefTime=rawNegTdcHit.GetRefTime() ;
+      if (fNegTdcRefTime == kBig) {
+	fNegTdcRefTime=rawNegTdcHit.GetRefTime() ;
+	fNegTdcRefDiffTime=rawNegTdcHit.GetRefDiffTime() ;
+      }
     if (fNegTdcRefTime != rawNegTdcHit.GetRefTime()) {
         cout <<  "THcScintillatorPlane: " << GetName()<< " Neg TDC reftime problem at paddle num = " << padnum << " TDC neg hits = " << rawNegTdcHit.GetNHits() << endl;
         problem_flag=kTRUE;
@@ -833,7 +851,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
     }
     THcRawAdcHit& rawPosAdcHit = hit->GetRawAdcHitPos();
     if (rawPosAdcHit.GetNPulses() >0 && rawPosAdcHit.HasRefTime()) {
-    if (fPosAdcRefTime == kBig  ) fPosAdcRefTime=rawPosAdcHit.GetRefTime() ;
+      if (fPosAdcRefTime == kBig  ) {
+	fPosAdcRefTime=rawPosAdcHit.GetRefTime() ;
+	fPosAdcRefDiffTime=rawPosAdcHit.GetRefDiffTime() ;
+      }
     if (fPosAdcRefTime != rawPosAdcHit.GetRefTime()) {
       cout <<  "THcScintillatorPlane: " << GetName()<< " Pos ADC reftime problem at paddle num = " << padnum << " ADC pos hits = " << rawPosAdcHit.GetNPulses() << endl;
         problem_flag=kTRUE;
@@ -863,7 +884,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
     }
     THcRawAdcHit& rawNegAdcHit = hit->GetRawAdcHitNeg();
     if (rawNegAdcHit.GetNPulses()>0 && rawNegAdcHit.HasRefTime()) {
-    if (fNegAdcRefTime == kBig) fNegAdcRefTime=rawNegAdcHit.GetRefTime() ;
+      if (fNegAdcRefTime == kBig) {
+	fNegAdcRefTime=rawNegAdcHit.GetRefTime() ;
+	fNegAdcRefDiffTime=rawNegAdcHit.GetRefDiffTime() ;
+      }
     if (fNegAdcRefTime != rawNegAdcHit.GetRefTime()) {
       cout <<  "THcScintillatorPlane: " << GetName()<< " Neg ADC reftime problem at paddle num = " << padnum << " TDC pos hits = " << rawNegAdcHit.GetNPulses() << endl;
         problem_flag=kTRUE;
diff --git a/src/THcScintillatorPlane.h b/src/THcScintillatorPlane.h
index 63203738080d2948b19c9bd41dd494c8d5e36e1d..72e17194f935b7a59e56b6edb24588f1f9a616c1 100644
--- a/src/THcScintillatorPlane.h
+++ b/src/THcScintillatorPlane.h
@@ -185,6 +185,10 @@ class THcScintillatorPlane : public THaSubDetector {
   Double_t fPosAdcRefTime;
   Double_t fNegTdcRefTime;
   Double_t fNegAdcRefTime;
+  Double_t fPosTdcRefDiffTime;
+  Double_t fPosAdcRefDiffTime;
+  Double_t fNegTdcRefDiffTime;
+  Double_t fNegAdcRefDiffTime;
   Double_t fHitDistance;
   Double_t fScinXPos;
   Double_t fScinYPos;