diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx
index b03eddaaafe54b4743d2feb8fa8cbfa39995ff27..4dacafa7ae7b736a79db2a666db0e824b1c9cdeb 100644
--- a/src/THcCherenkov.cxx
+++ b/src/THcCherenkov.cxx
@@ -136,6 +136,7 @@ void THcCherenkov::DeleteArrays()
   delete [] fPed;      fPed      = NULL;
   delete [] fThresh;   fThresh   = NULL;
 
+  delete [] fPedDefault; fPedDefault = 0;
   delete [] fAdcTimeWindowMin; fAdcTimeWindowMin = 0;
   delete [] fAdcTimeWindowMax; fAdcTimeWindowMax = 0;
   delete [] fRegionValue; fRegionValue = 0;
@@ -212,6 +213,7 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date )
   fPedMean  = new Double_t[fNelem];
   fAdcTimeWindowMin =  new Double_t[fNelem];
   fAdcTimeWindowMax=  new Double_t[fNelem];
+  fPedDefault=  new Int_t[fNelem];
   // Region parameters
   fRegionsValueMax = fNRegions * 8;
   fRegionValue     = new Double_t[fRegionsValueMax];
@@ -234,6 +236,7 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date )
     {"_debug_adc",        &fDebugAdc,         kInt, 0, 1},
     {"_adcTimeWindowMin", fAdcTimeWindowMin, kDouble,(UInt_t) fNelem,1},
     {"_adcTimeWindowMax", fAdcTimeWindowMax, kDouble, (UInt_t) fNelem,1},
+    {"_PedDefault", fPedDefault, kInt, (UInt_t) fNelem,1},
     {"_adc_tdc_offset",   &fAdcTdcOffset,     kDouble, 0, 1},
     {"_region",           &fRegionValue[0],   kDouble,  (UInt_t) fRegionsValueMax},
     {"_adcrefcut",        &fADC_RefTimeCut,   kInt,    0, 1},
@@ -242,6 +245,7 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date )
   for (Int_t i=0;i<fNelem;i++) {
     fAdcTimeWindowMin[i]=-1000.;
     fAdcTimeWindowMax[i]=1000.;
+    fPedDefault[i]=0;
   }
   fDebugAdc = 0; // Set ADC debug parameter to false unless set in parameter file
   fAdcTdcOffset = 0.0;
@@ -321,7 +325,8 @@ Int_t THcCherenkov::DefineVariables( EMode mode )
     {"goodAdcPulseAmp",     "Good ADC pulse amplitudes",    "fGoodAdcPulseAmp"},
     {"goodAdcPulseTime",    "Good ADC pulse times",         "fGoodAdcPulseTime"},
      {"goodAdcTdcDiffTime",    "Good Hodo Start - ADC pulse times",         "fGoodAdcTdcDiffTime"},
-   { 0 }
+       {"RefTime",      "Raw ADC RefTime (chan) ", "fRefTime"},        // Raw reference time
+  { 0 }
   };
 
   return DefineVarsFromList(vars, mode);
@@ -341,6 +346,7 @@ void THcCherenkov::Clear(Option_t* opt)
   fYAtCer = 0.0;
 
   fNpeSum = 0.0;
+  fRefTime=kBig;
 
   frAdcPedRaw->Clear();
   frAdcPulseIntRaw->Clear();
@@ -385,6 +391,9 @@ Int_t THcCherenkov::Decode( const THaEvData& evdata )
   }
   fNhits = DecodeToHitList(evdata, !present);
 
+  //THcHallCSpectrometer *app = dynamic_cast<THcHallCSpectrometer*>(GetApparatus());
+  // cout << "Cerenkov  Event num = " << evdata.GetEvNum() << " spec = " << app->GetName() << endl;
+
   if(gHaCuts->Result("Pedestal_event")) {
     AccumulatePedestals(fRawHitList);
     fAnalyzePedestals = 1;	// Analyze pedestals first normal events
@@ -400,11 +409,14 @@ Int_t THcCherenkov::Decode( const THaEvData& evdata )
   UInt_t nrAdcHits = 0;
 
   while(ihit < fNhits) {
-
+ 
     THcCherenkovHit* hit         = (THcCherenkovHit*) fRawHitList->At(ihit);
     Int_t            npmt        = hit->fCounter;
     THcRawAdcHit&    rawAdcHit   = hit->GetRawAdcHitPos();
-
+    if (rawAdcHit.GetNPulses() >0 && rawAdcHit.HasRefTime()) {
+      fRefTime=rawAdcHit.GetRefTime() ;
+    }
+    //if (rawAdcHit.GetNPulses()>0) cout << "Cer npmt = " << " ped = " << rawAdcHit.GetPed() << endl;
     for (UInt_t thit = 0; thit < rawAdcHit.GetNPulses(); thit++) {
 
       ((THcSignalHit*) frAdcPedRaw->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPedRaw());
@@ -422,6 +434,23 @@ Int_t THcCherenkov::Decode( const THaEvData& evdata )
       if (rawAdcHit.GetPulseAmpRaw(thit) > 0)  ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(nrAdcHits))->Set(npmt, 0);
       if (rawAdcHit.GetPulseAmpRaw(thit) <= 0) ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(nrAdcHits))->Set(npmt, 1);
 
+      if (rawAdcHit.GetPulseAmpRaw(thit) <= 0) {
+	Double_t PeakPedRatio= rawAdcHit.GetF250_PeakPedestalRatio();
+	Int_t NPedSamples= rawAdcHit.GetF250_NPedestalSamples();
+	Double_t AdcToC =  rawAdcHit.GetAdcTopC();
+	Double_t AdcToV =  rawAdcHit.GetAdcTomV();
+	if (fPedDefault[npmt-1] !=0) {
+	  Double_t tPulseInt = AdcToC*(rawAdcHit.GetPulseIntRaw(thit) - fPedDefault[npmt-1]*PeakPedRatio);
+	  ((THcSignalHit*) frAdcPulseInt->ConstructedAt(nrAdcHits))->Set(npmt, tPulseInt);
+          ((THcSignalHit*) frAdcPedRaw->ConstructedAt(nrAdcHits))->Set(npmt, fPedDefault[npmt-1]);
+          ((THcSignalHit*) frAdcPed->ConstructedAt(nrAdcHits))->Set(npmt, float(fPedDefault[npmt-1])/float(NPedSamples)*AdcToV);
+	  
+	}
+	((THcSignalHit*) frAdcPulseAmp->ConstructedAt(nrAdcHits))->Set(npmt, 0.);
+	
+      }
+
+	
       ++nrAdcHits;
       fTotNumAdcHits++;
       fNumAdcHits.at(npmt-1) = npmt;
@@ -442,7 +471,9 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray&  )
 {
   Double_t StartTime = 0.0;
   if( fglHod ) StartTime = fglHod->GetStartTime();
-  for(Int_t ipmt = 0; ipmt < fNelem; ipmt++) {
+   Double_t OffsetTime = 0.0;
+   // if( fglHod ) OffsetTime = fglHod->GetOffsetTime();
+ for(Int_t ipmt = 0; ipmt < fNelem; ipmt++) {
     fAdcPulseAmpTest[ipmt] = -1000.;
     fAdcGoodElem[ipmt]=-1;
    }
@@ -451,17 +482,18 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray&  )
     Int_t    npmt         = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
     Double_t pulseTime    = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData();
     Double_t pulseAmp     = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData();
-   Double_t adctdcdiffTime = StartTime-pulseTime;
-     Bool_t   errorFlag    = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData();
+    Bool_t   errorFlag    = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData();
+    Double_t adctdcdiffTime = StartTime-pulseTime-OffsetTime;
     Bool_t   pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin[npmt] && adctdcdiffTime < fAdcTimeWindowMax[npmt];
-    if (!errorFlag)
-      {
-	fGoodAdcMult.at(npmt) += 1;
-      }
-    if (!errorFlag && pulseTimeCut && pulseAmp > fAdcPulseAmpTest[npmt]) {
-       fAdcGoodElem[npmt]=ielem;
-       fAdcPulseAmpTest[npmt] = pulseAmp;
-    }
+ 	fGoodAdcMult.at(npmt) += 1;
+	if (!errorFlag) {
+	  if (pulseTimeCut && pulseAmp > fAdcPulseAmpTest[npmt]) {
+             fAdcGoodElem[npmt]=ielem;
+              fAdcPulseAmpTest[npmt] = pulseAmp;
+	  }
+        } else {
+	  if (pulseTimeCut) fAdcGoodElem[npmt]=ielem;
+        }
   }
   // Loop over the npmt
   for(Int_t npmt = 0; npmt < fNelem; npmt++) {
@@ -472,8 +504,7 @@ 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();
-   Double_t adctdcdiffTime = StartTime-pulseTime;
-    // By default, the last hit within the timing cut will be considered "good"
+    Double_t adctdcdiffTime = StartTime-pulseTime-OffsetTime;
       fGoodAdcPed.at(npmt)         = pulsePed;
       fGoodAdcHitUsed.at(npmt)         = ielem+1;
       fGoodAdcPulseInt.at(npmt)    = pulseInt;
@@ -481,8 +512,8 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray&  )
       fGoodAdcPulseAmp.at(npmt)    = pulseAmp;
       fGoodAdcPulseTime.at(npmt)   = pulseTime;
       fGoodAdcTdcDiffTime.at(npmt)   = adctdcdiffTime;
-
-      fNpe.at(npmt) = fGain[npmt]*fGoodAdcPulseInt.at(npmt);
+      
+      fNpe.at(npmt) = fGain[npmt]*pulseInt;
       fNpeSum += fNpe.at(npmt);
 
       fTotNumGoodAdcHits++;
diff --git a/src/THcCherenkov.h b/src/THcCherenkov.h
index 2edaf496825025a15cf428be520190dc96c12d2b..63136fdb13ee892337ab45f7f2e24cd4c322402d 100644
--- a/src/THcCherenkov.h
+++ b/src/THcCherenkov.h
@@ -58,6 +58,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
   Int_t     fTotNumGoodAdcHits;
   Int_t     fTotNumTracksMatched;
   Int_t     fTotNumTracksFired;
+  Double_t  fRefTime;
   Double_t  fNpeSum;
   Double_t* fGain;
 
@@ -91,6 +92,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
   Double_t  fNpeThresh;
   Double_t*  fAdcTimeWindowMin;
   Double_t*  fAdcTimeWindowMax;
+  Int_t*  fPedDefault;
   Double_t  fAdcTdcOffset;
   Double_t* fRegionValue;