diff --git a/podd b/podd
index 1b2c04ad6976a7157f5cba98a5ea26278bca19ed..9001670be3944886c4936d2b2eac8a94935b4390 160000
--- a/podd
+++ b/podd
@@ -1 +1 @@
-Subproject commit 1b2c04ad6976a7157f5cba98a5ea26278bca19ed
+Subproject commit 9001670be3944886c4936d2b2eac8a94935b4390
diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx
index ba0a0fd86942dd391d9ce22d685c07209f6eee34..363630c6788729bc297caa2a7d093cab00be5ba1 100644
--- a/src/THcCherenkov.cxx
+++ b/src/THcCherenkov.cxx
@@ -220,6 +220,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},
                       {"_adc_to_npe", fGain, kDouble, (UInt_t)fNelem},
@@ -468,29 +470,39 @@ Int_t THcCherenkov::ApplyCorrections(void) { return (0); }
 //_____________________________________________________________________________
 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++) {
-
-    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 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( fglHod ) StartTime = fglHod->GetStartTime();
+  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 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 db17ef402f1ed115d66c537c276a9c78c33b06e2..fc9232901d76a12ff1492fc55ae4ff02d246f3de 100644
--- a/src/THcCherenkov.h
+++ b/src/THcCherenkov.h
@@ -115,6 +115,8 @@ public:
   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;
diff --git a/src/THcCoinTime.cxx b/src/THcCoinTime.cxx
index 20e3c1f9d6e9a751c1d2e6e7d115a15035b7fa8e..3e520f3176305643c234d2cb7ab57e2cbbd97e9d 100644
--- a/src/THcCoinTime.cxx
+++ b/src/THcCoinTime.cxx
@@ -180,6 +180,10 @@ Int_t THcCoinTime::DefineVariables( EMode mode )
     
     {"CoinTime_RAW_ROC1",    "ROC1 RAW Coincidence Time",  "fROC1_RAW_CoinTime"},
     {"CoinTime_RAW_ROC2",    "ROC2 RAW Coincidence Time",  "fROC2_RAW_CoinTime"},
+    {"DeltaSHMSPathLength","DeltaSHMSpathLength (cm)","DeltaSHMSpathLength"},
+    {"DeltaHMSPathLength", "DeltaHMSpathLength (cm)","DeltaHMSpathLength"},
+    {"had_coinCorr_Positron",    "",  "had_coinCorr_Positron"},
+    {"elec_coinCorr",    "",  "elec_coinCorr"},
     { 0 }
   };
 
@@ -216,6 +220,8 @@ Int_t THcCoinTime::Process( const THaEvData& evdata )
   //Gather relevant variables for Coincidence time calculation
   lightSpeed = 29.9792; // in cm/ns
 
+  elec_coinCorr=kBig;
+  had_coinCorr_Positron=kBig;
   //Particle Masses (HardCoded)
   elecMass =  0.510998/1000.0; // electron mass in GeV/c^2
   positronMass =  0.510998/1000.0;
@@ -240,6 +246,8 @@ Int_t THcCoinTime::Process( const THaEvData& evdata )
       Double_t SHMS_FPtime = theSHMSTrack->GetFPTime();    
       
       //HMS arm
+      Double_t hms_xptar = theHMSTrack->GetTTheta();           
+      Double_t hms_dP = theHMSTrack->GetDp();            
       Double_t hms_xfp = theHMSTrack->GetX();           
       Double_t hms_xpfp = theHMSTrack->GetTheta();      
       Double_t hms_ypfp = theHMSTrack->GetPhi();        
@@ -251,8 +259,10 @@ Int_t THcCoinTime::Process( const THaEvData& evdata )
       pTRIG1_TdcTime_ROC2 = fCoinDet->Get_CT_Trigtime(2);//SHMS
       pTRIG4_TdcTime_ROC2 = fCoinDet->Get_CT_Trigtime(3);//HMS
 
-	  DeltaSHMSpathLength = -0.11*atan2(shms_xptar,1)*1000 - 0.057*shms_dP;
-	  DeltaHMSpathLength = 12.462*hms_xpfp + 0.1138*hms_xpfp*hms_xfp - 0.0154*hms_xfp - 72.292*hms_xpfp*hms_xpfp - 0.0000544*hms_xfp*had_xfp - 116.52*hms_ypfp*hms_ypfp;
+      DeltaSHMSpathLength = .11*shms_xptar*1000 +0.057*shms_dP/100.;
+      DeltaHMSpathLength = -1.0*(12.462*hms_xpfp + 0.1138*hms_xpfp*hms_xfp - 0.0154*hms_xfp - 72.292*hms_xpfp*hms_xpfp - 0.0000544*hms_xfp*had_xfp - 116.52*hms_ypfp*hms_ypfp);
+      DeltaHMSpathLength = (.12*hms_xptar*1000 +0.17*hms_dP/100.);
+
           // default assume SHMS is electron arm
 	  Double_t ElecPathLength=SHMScentralPathLen +  DeltaSHMSpathLength;
 	  Double_t HadPathLength=HMScentralPathLen +  DeltaHMSpathLength;
@@ -266,7 +276,6 @@ Int_t THcCoinTime::Process( const THaEvData& evdata )
              had_P = theSHMSTrack->GetP();              //hadron golden track arm momentum
              sign=1;
 	  }
-
 	  //beta calculations beta = v/c = p/E
 	  elecArm_BetaCalc = elec_P / sqrt(elec_P*elec_P + elecMass*elecMass);
 	  hadArm_BetaCalc_proton = had_P / sqrt(had_P*had_P + protonMass*protonMass);
@@ -302,9 +311,10 @@ Int_t THcCoinTime::Process( const THaEvData& evdata )
 	  fROC2_ePiCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr - had_coinCorr_Pion) - eHad_CT_Offset;
 
 	  //POSITRON
-	  fROC1_ePosCoinTime = fROC1_RAW_CoinTime + sign*( elec_coinCorr + had_coinCorr_Positron) - eHad_CT_Offset ;	  
-	  fROC2_ePosCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr + had_coinCorr_Positron) - eHad_CT_Offset;
+	  fROC1_ePosCoinTime = fROC1_RAW_CoinTime + sign*( elec_coinCorr - had_coinCorr_Positron) - eHad_CT_Offset ;	  
+	  fROC2_ePosCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr - had_coinCorr_Positron) - eHad_CT_Offset;
 
+