diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx
index c0cdd177be1e14175f13544499b3f144177287ac..b03eddaaafe54b4743d2feb8fa8cbfa39995ff27 100644
--- a/src/THcCherenkov.cxx
+++ b/src/THcCherenkov.cxx
@@ -215,6 +215,8 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date )
   // Region parameters
   fRegionsValueMax = fNRegions * 8;
   fRegionValue     = new Double_t[fRegionsValueMax];
+  fAdcGoodElem = new Int_t[fNelem];
+  fAdcPulseAmpTest = new Double_t[fNelem];
 
   DBRequest list[]={
     {"_ped_limit",        fPedLimit,          kInt,     (UInt_t) fNelem, optional},
@@ -440,28 +442,38 @@ 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 ipmt = 0; ipmt < fNelem; ipmt++) {
+    fAdcPulseAmpTest[ipmt] = -1000.;
+    fAdcGoodElem[ipmt]=-1;
+   }
+   //
   for(Int_t ielem = 0; ielem < frAdcPulseInt->GetEntries(); ielem++) {
-
     Int_t    npmt         = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
-    Double_t pulsePed     = ((THcSignalHit*) frAdcPed->ConstructedAt(ielem))->GetData();
-    Double_t pulseInt     = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetData();
-    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 pulseAmp     = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData();
    Double_t adctdcdiffTime = StartTime-pulseTime;
      Bool_t   errorFlag    = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData();
     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;
+    }
+  }
+  // Loop over the npmt
+  for(Int_t npmt = 0; npmt < fNelem; npmt++) {
+    Int_t ielem = fAdcGoodElem[npmt];
+    if (ielem != -1) {
+    Double_t pulsePed     = ((THcSignalHit*) frAdcPed->ConstructedAt(ielem))->GetData();
+    Double_t pulseInt     = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetData();
+    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"
-    if (!errorFlag && pulseTimeCut) {
       fGoodAdcPed.at(npmt)         = pulsePed;
       fGoodAdcHitUsed.at(npmt)         = ielem+1;
       fGoodAdcPulseInt.at(npmt)    = pulseInt;
diff --git a/src/THcCherenkov.h b/src/THcCherenkov.h
index 47845c55575ec2d79630afbc8c667bd564d50be3..2edaf496825025a15cf428be520190dc96c12d2b 100644
--- a/src/THcCherenkov.h
+++ b/src/THcCherenkov.h
@@ -104,6 +104,8 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
   Double_t* fPedMean; 	  /* Can be supplied in parameters and then */
   Double_t* fPed;
   Double_t* fThresh;
+  Double_t* fAdcPulseAmpTest;
+  Int_t*    fAdcGoodElem;
 
   // 12 Gev FADC variables
   TClonesArray* frAdcPedRaw;