diff --git a/src/THcScintillatorPlane.cxx b/src/THcScintillatorPlane.cxx
index ee48bb80abff2e36fdb2f4b5fe844afcbd290c6d..f3de6db6addbb7d9a15db29ceecea73cf64ecda4 100644
--- a/src/THcScintillatorPlane.cxx
+++ b/src/THcScintillatorPlane.cxx
@@ -38,6 +38,10 @@ THcScintillatorPlane::THcScintillatorPlane( const char* name,
   frNegTDCHits = new TClonesArray("THcSignalHit",16);
   frPosADCHits = new TClonesArray("THcSignalHit",16);
   frNegADCHits = new TClonesArray("THcSignalHit",16);
+  frPosADCSums = new TClonesArray("THcSignalHit",16);
+  frNegADCSums = new TClonesArray("THcSignalHit",16);
+  frPosADCPeds = new TClonesArray("THcSignalHit",16);
+  frNegADCPeds = new TClonesArray("THcSignalHit",16);
   fPlaneNum = planenum;
   fTotPlanes = planenum;
   fNScinHits = 0; 
@@ -60,6 +64,10 @@ THcScintillatorPlane::~THcScintillatorPlane()
   delete frNegTDCHits;
   delete frPosADCHits;
   delete frNegADCHits;
+  delete frPosADCSums;
+  delete frNegADCSums;
+  delete frPosADCPeds;
+  delete frNegADCPeds;
   delete fpTimes;
   delete [] fScinTime;
   delete [] fScinSigma;
@@ -155,10 +163,16 @@ Int_t THcScintillatorPlane::ReadDatabase( const TDatime& date )
     {Form("scin_%s_offset",GetName()), &fPosOffset, kDouble},
     {Form("scin_%s_center",GetName()), fPosCenter,kDouble,fNelem},
     {"tofusinginvadc",   &fTofUsingInvAdc,        kInt,            0,  1},       
+    {"hodo_adc_mode", &fADCMode, kInt, 0, 1},
+    {"hodo_pedestal_scale", &fADCPedScaleFactor, kDouble, 0, 1},
+    {"hodo_adc_diag_cut", &fADCDiagCut, kInt, 0, 1},
     {0}
   };
 
   fTofUsingInvAdc = 1;
+  fADCMode = kADCStandard;
+  fADCPedScaleFactor = 1.0;
+  fADCDiagCut = 50.0;
   gHcParms->LoadParmValues((DBRequest*)&list,prefix);
   // fetch the parameter from the temporary list
 
@@ -253,6 +267,10 @@ Int_t THcScintillatorPlane::DefineVariables( EMode mode )
     {"negtdcval", "List of Negative TDC Values",              "frNegTDCHits.THcSignalHit.GetData()"},
     {"posadcval", "List of Positive ADC Values",              "frPosADCHits.THcSignalHit.GetData()"},
     {"negadcval", "List of Negative ADC Values",              "frNegADCHits.THcSignalHit.GetData()"},
+    {"posadcsum", "List of Positive ADC Sample Sums",         "frPosADCSums.THcSignalHit.GetData()"},
+    {"negadcsum", "List of Negative ADC Sample Sums",         "frNegADCSums.THcSignalHit.GetData()"},
+    {"posadcped", "List of Positive ADC Pedestals",           "frPosADCPeds.THcSignalHit.GetData()"},
+    {"negadcped", "List of Negative ADC Pedestals",           "frNegADCPeds.THcSignalHit.GetData()"},
     {"fptime", "Time at focal plane",     "GetFpTime()"},
     {"nhits", "Number of paddle hits (passed TDC Min and Max cuts for either end)",           "GetNScinHits() "},
     {"ngoodhits", "Number of paddle hits (passed tof tolerance and used to determine the focal plane time )",           "GetNGoodHits() "},
@@ -339,6 +357,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
   frNegTDCHits->Clear();
   frPosADCHits->Clear();
   frNegADCHits->Clear();
+  frPosADCSums->Clear();
+  frNegADCSums->Clear();
+  frPosADCPeds->Clear();
+  frNegADCPeds->Clear();
   //stripped
   fNScinHits=0;
   fHodoHits->Clear();
@@ -362,8 +384,6 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
 
     Int_t index=padnum-1;
     // Need to be finding first hit in TDC range, not the first hit overall
-    Double_t adc_pos = hit->GetADCPos()-fPosPed[index];
-    Double_t adc_neg = hit->GetADCNeg()-fNegPed[index];
     if (hit->fNRawHits[2] > 0) 
       ((THcSignalHit*) frPosTDCHits->ConstructedAt(nrPosTDCHits++))->Set(padnum, hit->GetTDCPos()+fTdcOffset);
     if (hit->fNRawHits[3] > 0) 
@@ -371,10 +391,36 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
     // For making hit maps, we use >= 50 cut
     // For making raw hists, we don't want the cut
     // We can use a flag to turn on and off these without 50 cut
-    if ((hit->GetADCPos()-fPosPed[index]) >= 50) 
-      ((THcSignalHit*) frPosADCHits->ConstructedAt(nrPosADCHits++))->Set(padnum, adc_pos);
-    if ((hit->GetADCNeg()-fNegPed[index]) >= 50) 
-      ((THcSignalHit*) frNegADCHits->ConstructedAt(nrNegADCHits++))->Set(padnum, adc_neg);
+    // Value of 50 no long valid with different ADC type for FADC
+    Double_t adc_pos;
+    Double_t adc_neg;
+    if(fADCMode == kADCDynamicPedestal) {
+      adc_pos = hit->GetADCPos()-hit->GetPedestalPos()*fADCPedScaleFactor;
+      adc_neg = hit->GetADCNeg()-hit->GetPedestalNeg()*fADCPedScaleFactor;
+    } else if (fADCMode == kADCSampleIntegral) {
+      adc_pos = hit->GetIntegralPos()-fPosPed[index];
+      adc_neg = hit->GetIntegralNeg()-fNegPed[index];
+    } else if (fADCMode == kADCSampIntDynPed) {
+      adc_pos = hit->GetIntegralPos()-hit->GetPedestalPos()*fADCPedScaleFactor;
+      adc_neg = hit->GetIntegralNeg()-hit->GetPedestalNeg()*fADCPedScaleFactor;
+    } else {
+      adc_pos = hit->GetADCPos()-fPosPed[index];
+      adc_neg = hit->GetADCNeg()-fNegPed[index];
+    }
+    if (adc_pos >= fADCDiagCut) {
+      ((THcSignalHit*) frPosADCHits->ConstructedAt(nrPosADCHits))->Set(padnum, adc_pos);
+      Double_t samplesum=hit->GetIntegralPos();
+      Double_t pedestal=hit->GetPedestalPos();
+      ((THcSignalHit*) frPosADCSums->ConstructedAt(nrPosADCHits))->Set(padnum, samplesum);
+      ((THcSignalHit*) frPosADCPeds->ConstructedAt(nrPosADCHits++))->Set(padnum, pedestal);
+    }
+    if (adc_neg >= fADCDiagCut) {
+      ((THcSignalHit*) frNegADCHits->ConstructedAt(nrNegADCHits))->Set(padnum, adc_neg);
+      Double_t samplesum=hit->GetIntegralNeg();
+      Double_t pedestal=hit->GetPedestalNeg();
+      ((THcSignalHit*) frNegADCSums->ConstructedAt(nrNegADCHits))->Set(padnum, samplesum);
+      ((THcSignalHit*) frNegADCPeds->ConstructedAt(nrNegADCHits++))->Set(padnum, pedestal);
+    }
 
     Bool_t btdcraw_pos=kFALSE;
     Bool_t btdcraw_neg=kFALSE;
@@ -398,6 +444,7 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
     // Proceed if there is a valid TDC on either end of the bar
     if(btdcraw_pos || btdcraw_neg) {
 
+
       new( (*fHodoHits)[fNScinHits]) THcHodoHit(tdc_pos, tdc_neg,
 						adc_pos, adc_neg,
 						hit->fCounter, this);
diff --git a/src/THcScintillatorPlane.h b/src/THcScintillatorPlane.h
index 270db3104789aed25c96da5882001d9ae7e6b5e9..00f886e28c805f0bd6120d793bf070ea2b531eb5 100644
--- a/src/THcScintillatorPlane.h
+++ b/src/THcScintillatorPlane.h
@@ -66,6 +66,10 @@ class THcScintillatorPlane : public THaSubDetector {
   TClonesArray* frNegTDCHits;
   TClonesArray* frPosADCHits;
   TClonesArray* frNegADCHits;
+  TClonesArray* frPosADCSums;
+  TClonesArray* frNegADCSums;
+  TClonesArray* frPosADCPeds;
+  TClonesArray* frNegADCPeds;
   TClonesArray* fHodoHits;
 
   Int_t fPlaneNum;		/* Which plane am I 1-4 */
@@ -76,6 +80,14 @@ class THcScintillatorPlane : public THaSubDetector {
   Int_t fNGoodHits;                 /* number of hits in plane (used in determining focal plane time) */
 
   // Constants
+  Int_t fADCMode;		// 0: standard, 1: use FADC ped, 2: integrate sample
+                                // 3: integrate sample, subract dynamic pedestal
+  static const Int_t kADCStandard=0;
+  static const Int_t kADCDynamicPedestal=1;
+  static const Int_t kADCSampleIntegral=2;
+  static const Int_t kADCSampIntDynPed=3;
+  Double_t fADCPedScaleFactor;	// Multiply dynamic pedestal by this before subtracting
+  Int_t fADCDiagCut;		// Cut for ADC in hit maps.  Defaults to 50
   Int_t fTdcOffset;		/* Overall offset to raw tdc */
   Int_t fMaxHits;               /* maximum number of hits to be considered - useful for dimensioning arrays */
   Double_t fSpacing;            /* paddle spacing */