diff --git a/src/THcShower.cxx b/src/THcShower.cxx
index 88987ca51c2c5030b9ef14a771341723c0e018bf..ae23af024489e6cf8e2729c43a3dba4d17ed8210 100644
--- a/src/THcShower.cxx
+++ b/src/THcShower.cxx
@@ -372,8 +372,10 @@ Int_t THcShower::ReadDatabase( const TDatime& date )
   Double_t hcal_neg_cal_const[fNTotBlocks];
   Double_t hcal_neg_gain_cor[fNTotBlocks];
 
-  fAdcTimeWindowMin = new Double_t [fNTotBlocks];
-  fAdcTimeWindowMax = new Double_t [fNTotBlocks];
+  fPosAdcTimeWindowMin = new Double_t [fNTotBlocks];
+  fNegAdcTimeWindowMin = new Double_t [fNTotBlocks];
+  fPosAdcTimeWindowMax = new Double_t [fNTotBlocks];
+  fNegAdcTimeWindowMax = new Double_t [fNTotBlocks];
 
   DBRequest list[]={
     {"cal_pos_cal_const", hcal_pos_cal_const, kDouble, fNTotBlocks},
@@ -382,16 +384,20 @@ Int_t THcShower::ReadDatabase( const TDatime& date )
     {"cal_neg_cal_const", hcal_neg_cal_const, kDouble, fNTotBlocks},
     {"cal_neg_ped_limit", fShNegPedLimit, kInt,    fNTotBlocks,1},
     {"cal_neg_gain_cor",  hcal_neg_gain_cor,  kDouble, fNTotBlocks},
-    {"cal_AdcTimeWindowMin", fAdcTimeWindowMin, kDouble, static_cast<UInt_t>(fNTotBlocks),1},
-    {"cal_AdcTimeWindowMax", fAdcTimeWindowMax, kDouble, static_cast<UInt_t>(fNTotBlocks),1},
+    {"cal_pos_AdcTimeWindowMin", fPosAdcTimeWindowMin, kDouble, static_cast<UInt_t>(fNTotBlocks),1},
+    {"cal_neg_AdcTimeWindowMin", fNegAdcTimeWindowMin, kDouble, static_cast<UInt_t>(fNTotBlocks),1},
+    {"cal_pos_AdcTimeWindowMax", fPosAdcTimeWindowMax, kDouble, static_cast<UInt_t>(fNTotBlocks),1},
+    {"cal_neg_AdcTimeWindowMax", fNegAdcTimeWindowMax, kDouble, static_cast<UInt_t>(fNTotBlocks),1},
     {"cal_min_peds", &fShMinPeds, kInt,0,1},
     {0}
   };
   fShMinPeds=0.;
 
   for(UInt_t ip=0;ip<fNTotBlocks;ip++) {
-    fAdcTimeWindowMin[ip] = -1000.;
-    fAdcTimeWindowMax[ip] = 1000.;
+    fPosAdcTimeWindowMin[ip] = -1000.;
+    fNegAdcTimeWindowMin[ip] = -1000.;
+    fPosAdcTimeWindowMax[ip] = 1000.;
+    fNegAdcTimeWindowMax[ip] = 1000.;
    }
 
   gHcParms->LoadParmValues((DBRequest*)&list, prefix);
diff --git a/src/THcShower.h b/src/THcShower.h
index 28f35ad316c3041079cde7f7bbdbc120ec23392f..e708818d4eca6e2878cdccb5c992d915c67d195f 100644
--- a/src/THcShower.h
+++ b/src/THcShower.h
@@ -74,11 +74,17 @@ public:
   Int_t GetADCMode() {
     return fADCMode;
   }
-  Double_t* GetAdcTimeWindowMin() {
-    return fAdcTimeWindowMin;
+  Double_t* GetPosAdcTimeWindowMin() {
+    return fPosAdcTimeWindowMin;
   }
-  Double_t* GetAdcTimeWindowMax() {
-    return fAdcTimeWindowMax;
+  Double_t* GetNegAdcTimeWindowMin() {
+    return fNegAdcTimeWindowMin;
+  }
+  Double_t* GetPosAdcTimeWindowMax() {
+    return fPosAdcTimeWindowMax;
+  }
+  Double_t* GetNegAdcTimeWindowMax() {
+    return fNegAdcTimeWindowMax;
   }
   Double_t GetAdcTdcOffset() {
     return fAdcTdcOffset;
@@ -155,8 +161,10 @@ protected:
   static const Int_t kADCDynamicPedestal=1;
   static const Int_t kADCSampleIntegral=2;
   static const Int_t kADCSampIntDynPed=3;
-  Double_t* fAdcTimeWindowMin;
-  Double_t* fAdcTimeWindowMax;
+  Double_t* fPosAdcTimeWindowMin;
+  Double_t* fNegAdcTimeWindowMin;
+  Double_t* fPosAdcTimeWindowMax;
+  Double_t* fNegAdcTimeWindowMax;
   Double_t fAdcTdcOffset;
 
   Int_t fAnalyzePedestals;   // Flag for pedestal analysis.
diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx
index 9dafbafd135bbadf983f0845fea2999f2196f480..568a7f394d30763e6a4b577bb2293ce016ab3e46 100644
--- a/src/THcShowerPlane.cxx
+++ b/src/THcShowerPlane.cxx
@@ -738,10 +738,13 @@ void THcShowerPlane::FillADC_DynamicPedestal()
 {
   Double_t StartTime = 0.0;
   if( fglHod ) StartTime = fglHod->GetStartTime();
-  Double_t* AdcTimeWindowMin=static_cast<THcShower*>(fParent)->GetAdcTimeWindowMin();
-  Double_t* AdcTimeWindowMax=static_cast<THcShower*>(fParent)->GetAdcTimeWindowMax();
+  Double_t* PosAdcTimeWindowMin=static_cast<THcShower*>(fParent)->GetPosAdcTimeWindowMin();
+  Double_t* NegAdcTimeWindowMin=static_cast<THcShower*>(fParent)->GetNegAdcTimeWindowMin();
+  Double_t* PosAdcTimeWindowMax=static_cast<THcShower*>(fParent)->GetPosAdcTimeWindowMax();
+  Double_t* NegAdcTimeWindowMax=static_cast<THcShower*>(fParent)->GetNegAdcTimeWindowMax();
   for (Int_t ielem=0;ielem<frNegAdcPulseInt->GetEntries();ielem++) {
     Int_t    npad         = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
+    Int_t    nblock	  = npad*(fLayerNum-1)+npad;
     Double_t pulseInt     = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetData();
     Double_t pulsePed     = ((THcSignalHit*) frNegAdcPed->ConstructedAt(ielem))->GetData();
     Double_t pulseAmp     = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(ielem))->GetData();
@@ -750,7 +753,7 @@ void THcShowerPlane::FillADC_DynamicPedestal()
     Double_t adctdcdiffTime = StartTime-pulseTime;
     Double_t threshold    = ((THcSignalHit*) frNegAdcThreshold->ConstructedAt(ielem))->GetData();
     Bool_t   errorflag    = ((THcSignalHit*) frNegAdcErrorFlag->ConstructedAt(ielem))->GetData();
-    Bool_t   pulseTimeCut = (adctdcdiffTime > AdcTimeWindowMin[npad]) && (adctdcdiffTime < AdcTimeWindowMax[npad]);
+    Bool_t   pulseTimeCut = (adctdcdiffTime > NegAdcTimeWindowMin[nblock]) && (adctdcdiffTime < NegAdcTimeWindowMax[nblock]);
     if (!errorflag && pulseTimeCut) {
       fGoodNegAdcPulseIntRaw.at(npad) =pulseIntRaw;
 
@@ -776,6 +779,7 @@ void THcShowerPlane::FillADC_DynamicPedestal()
   //
   for (Int_t ielem=0;ielem<frPosAdcPulseInt->GetEntries();ielem++) {
     Int_t    npad         = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
+    Int_t    nblock	  = npad*(fLayerNum-1)+npad;
     Double_t pulsePed     = ((THcSignalHit*) frPosAdcPed->ConstructedAt(ielem))->GetData();
     Double_t threshold    = ((THcSignalHit*) frPosAdcThreshold->ConstructedAt(ielem))->GetData();
     Double_t pulseAmp     = ((THcSignalHit*) frPosAdcPulseAmp->ConstructedAt(ielem))->GetData();
@@ -784,7 +788,7 @@ void THcShowerPlane::FillADC_DynamicPedestal()
     Double_t pulseTime    = ((THcSignalHit*) frPosAdcPulseTime->ConstructedAt(ielem))->GetData();
      Double_t adctdcdiffTime = StartTime-pulseTime;
    Bool_t   errorflag    = ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(ielem))->GetData();
-    Bool_t   pulseTimeCut = (adctdcdiffTime > AdcTimeWindowMin[npad]) &&  (adctdcdiffTime < AdcTimeWindowMax[npad]);
+    Bool_t   pulseTimeCut = (adctdcdiffTime > PosAdcTimeWindowMin[nblock]) &&  (adctdcdiffTime < PosAdcTimeWindowMax[nblock]);
     if (!errorflag && pulseTimeCut) {
       fGoodPosAdcPulseIntRaw.at(npad) = pulseIntRaw;