diff --git a/src/THcShower.cxx b/src/THcShower.cxx
index bdaf6084e7ba152ccba87527dcb44f1dd9801509..fccca69fe4cf3a19cf790963ed78ecf017e5369a 100644
--- a/src/THcShower.cxx
+++ b/src/THcShower.cxx
@@ -36,6 +36,7 @@ THcShower::THcShower( const char* name, const char* description,
   THaNonTrackingDetector(name,description,apparatus),
   fPosAdcTimeWindowMin(0), fNegAdcTimeWindowMin(0),
   fPosAdcTimeWindowMax(0), fNegAdcTimeWindowMax(0),
+  fPedPosDefault(0),fPedNegDefault(0),
   fShPosPedLimit(0), fShNegPedLimit(0), fPosGain(0), fNegGain(0),
   fClusterList(0), fLayerNames(0), fLayerZPos(0), BlockThick(0),
   fNBlocks(0), fXPos(0), fYPos(0), fZPos(0), fPlanes(0), fArray(0)
@@ -53,6 +54,7 @@ THcShower::THcShower( ) :
   THaNonTrackingDetector(),
   fPosAdcTimeWindowMin(0), fNegAdcTimeWindowMin(0),
   fPosAdcTimeWindowMax(0), fNegAdcTimeWindowMax(0),
+  fPedPosDefault(0),fPedNegDefault(0),
   fShPosPedLimit(0), fShNegPedLimit(0), fPosGain(0), fNegGain(0),
   fClusterList(0), fLayerNames(0), fLayerZPos(0), BlockThick(0),
   fNBlocks(0), fXPos(0), fYPos(0), fZPos(0), fPlanes(0), fArray(0)
@@ -388,6 +390,8 @@ Int_t THcShower::ReadDatabase( const TDatime& date )
   fNegAdcTimeWindowMin = new Double_t [fNTotBlocks];
   fPosAdcTimeWindowMax = new Double_t [fNTotBlocks];
   fNegAdcTimeWindowMax = new Double_t [fNTotBlocks];
+  fPedPosDefault = new Int_t [fNTotBlocks];
+  fPedNegDefault = new Int_t [fNTotBlocks];
 
   DBRequest list[]={
     {"cal_pos_cal_const", hcal_pos_cal_const, kDouble, fNTotBlocks},
@@ -400,6 +404,8 @@ Int_t THcShower::ReadDatabase( const TDatime& date )
     {"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_PedNegDefault", fPedNegDefault, kInt, static_cast<UInt_t>(fNTotBlocks),1},
+    {"cal_PedPosDefault", fPedNegDefault, kInt, static_cast<UInt_t>(fNTotBlocks),1},
     {"cal_min_peds", &fShMinPeds, kInt,0,1},
     {0}
   };
@@ -410,6 +416,8 @@ Int_t THcShower::ReadDatabase( const TDatime& date )
     fNegAdcTimeWindowMin[ip] = -1000.;
     fPosAdcTimeWindowMax[ip] = 1000.;
     fNegAdcTimeWindowMax[ip] = 1000.;
+    fPedNegDefault[ip] = 0;
+    fPedPosDefault[ip] = 0;
    }
 
   gHcParms->LoadParmValues((DBRequest*)&list, prefix);
@@ -617,6 +625,8 @@ void THcShower::DeleteArrays()
   delete [] fNegAdcTimeWindowMin; fNegAdcTimeWindowMin = 0;
   delete [] fPosAdcTimeWindowMax; fPosAdcTimeWindowMax = 0;
   delete [] fNegAdcTimeWindowMax; fNegAdcTimeWindowMax = 0;
+  delete [] fPedNegDefault; fPedNegDefault = 0;
+  delete [] fPedPosDefault; fPedPosDefault = 0;
   delete [] fShPosPedLimit; fShPosPedLimit = 0;
   delete [] fShNegPedLimit; fShNegPedLimit = 0;
   delete [] fPosGain; fPosGain = 0;
diff --git a/src/THcShower.h b/src/THcShower.h
index 9b39f4e69ebd6d6ea893a59fc8068f801129a0b1..a0e425ddd6c7b74a2d35ad001caf68a8b6dc9b67 100644
--- a/src/THcShower.h
+++ b/src/THcShower.h
@@ -71,6 +71,17 @@ public:
     return ( Side == 0 ? fPosGain[nelem] : fNegGain[nelem]);
   }
 
+  Double_t GetPedDefault(Int_t NBlock, Int_t NLayer, Int_t Side) {
+    if (Side!=0&&Side!=1) {
+      cout << "*** Wrong Side in GetPedDefault:" << Side << " ***" << endl;
+      return -1;
+    }
+    Int_t nelem = 0;
+    for (Int_t i=0; i<NLayer; i++) nelem += fNBlocks[i];
+    nelem += NBlock;
+    return ( Side == 0 ? fPedPosDefault[nelem] : fPedNegDefault[nelem] );
+  }
+
   Double_t GetWindowMin(Int_t NBlock, Int_t NLayer, Int_t Side) {
     if (Side!=0&&Side!=1) {
       cout << "*** Wrong Side in GetWindowMin:" << Side << " ***" << endl;
@@ -187,7 +198,9 @@ protected:
   Double_t* fNegAdcTimeWindowMin;
   Double_t* fPosAdcTimeWindowMax;
   Double_t* fNegAdcTimeWindowMax;
-  Double_t fAdcTdcOffset;
+  Int_t* fPedPosDefault;
+  Int_t* fPedNegDefault;
+ Double_t fAdcTdcOffset;
 
   Int_t fAnalyzePedestals;   // Flag for pedestal analysis.
 
diff --git a/src/THcShowerArray.cxx b/src/THcShowerArray.cxx
index b1817da04863c6fd43c08fc0015ef20ffca363f0..2f1170e26d62bfec508b3dee665c2c470dbe664f 100644
--- a/src/THcShowerArray.cxx
+++ b/src/THcShowerArray.cxx
@@ -105,6 +105,7 @@ THcShowerArray::~THcShowerArray()
 
   delete [] fAdcTimeWindowMin; fAdcTimeWindowMin = 0;
   delete [] fAdcTimeWindowMax; fAdcTimeWindowMax = 0;
+  delete [] fPedDefault; fPedDefault = 0;
 }
 
 //_____________________________________________________________________________
@@ -280,6 +281,7 @@ Int_t THcShowerArray::ReadDatabase( const TDatime& date )
 
   fAdcTimeWindowMin = new Double_t [fNelem];
   fAdcTimeWindowMax = new Double_t [fNelem];
+  fPedDefault = new Int_t [fNelem];
 
   DBRequest list1[]={
     {"cal_arr_ped_limit", fPedLimit, kInt, static_cast<UInt_t>(fNelem),1},
@@ -287,12 +289,14 @@ Int_t THcShowerArray::ReadDatabase( const TDatime& date )
     {"cal_arr_gain_cor",  cal_arr_gain_cor,  kDouble, static_cast<UInt_t>(fNelem)},
     {"cal_arr_AdcTimeWindowMin", fAdcTimeWindowMin, kDouble, static_cast<UInt_t>(fNelem),1},
     {"cal_arr_AdcTimeWindowMax", fAdcTimeWindowMax, kDouble, static_cast<UInt_t>(fNelem),1},
+    {"cal_arr_PedDefault", fPedDefault, kInt, static_cast<UInt_t>(fNelem),1},
     {0}
   };
 
    for(Int_t ip=0;ip<fNelem;ip++) {
     fAdcTimeWindowMin[ip] = -1000.;
     fAdcTimeWindowMax[ip] = 1000.;
+    fPedDefault[ip] = 0;
    }
 
   gHcParms->LoadParmValues((DBRequest*)&list1, prefix);
@@ -873,6 +877,8 @@ void THcShowerArray::FillADC_DynamicPedestal()
 {
   Double_t StartTime = 0.0;
   if( fglHod ) StartTime = fglHod->GetStartTime();
+   Double_t OffsetTime = 0.0;
+   if( fglHod ) OffsetTime = fglHod->GetOffsetTime();
   for (Int_t ielem=0;ielem<frAdcPulseInt->GetEntries();ielem++) {
     
     Int_t npad           = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
@@ -881,15 +887,10 @@ void THcShowerArray::FillADC_DynamicPedestal()
     Double_t pulseInt    = ((THcSignalHit*) frAdcPulseInt->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*) frAdcErrorFlag->ConstructedAt(ielem))->GetData();
+    Double_t adctdcdiffTime = StartTime-pulseTime+OffsetTime;
     Bool_t pulseTimeCut  = (adctdcdiffTime > fAdcTimeWindowMin[npad]) &&  (adctdcdiffTime < fAdcTimeWindowMax[npad]);
-
-    if (!errorflag)
-      {
 	fGoodAdcMult.at(npad) += 1;
-      }
-    if (!errorflag && pulseTimeCut) {
+    if (pulseTimeCut) {
       
       fTotNumAdcHits++;
       fGoodAdcPulseIntRaw.at(npad) = pulseIntRaw;
@@ -982,6 +983,24 @@ Int_t THcShowerArray::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
       } else {
 	((THcSignalHit*) frAdcErrorFlag->ConstructedAt(nrAdcHits))->Set(padnum,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[padnum-1] !=0) {
+	  Double_t tPulseInt = AdcToC*(rawAdcHit.GetPulseIntRaw(thit) - fPedDefault[padnum-1]*PeakPedRatio);
+	  ((THcSignalHit*) frAdcPulseInt->ConstructedAt(nrAdcHits))->Set(padnum, tPulseInt);
+          ((THcSignalHit*) frAdcPedRaw->ConstructedAt(nrAdcHits))->Set(padnum, fPedDefault[padnum-1]);
+          ((THcSignalHit*) frAdcPed->ConstructedAt(nrAdcHits))->Set(padnum, float(fPedDefault[padnum-1])/float(NPedSamples)*AdcToV);
+	  
+	}
+	((THcSignalHit*) frAdcPulseAmp->ConstructedAt(nrAdcHits))->Set(padnum, 0.);
+	
+      }
+
+
       ++nrAdcHits;
     }
     ihit++;
diff --git a/src/THcShowerArray.h b/src/THcShowerArray.h
index f63d1d6a7654aa98e2aec9a5d49b665032d72cf4..229653f1adcfad1fb68255b7b8ed9aab5532b776 100644
--- a/src/THcShowerArray.h
+++ b/src/THcShowerArray.h
@@ -148,6 +148,7 @@ protected:
   static const Int_t kADCSampIntDynPed=3;
   Double_t *fAdcTimeWindowMin ;
   Double_t *fAdcTimeWindowMax ;
+  Int_t *fPedDefault ;
   Double_t fAdcThreshold ;
   Double_t fAdcTdcOffset;
 
diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx
index f82ae9b7016458440cf8ad96d4b95e184d71384a..e839139001f1b39cf22d519166c78760f04b10bb 100644
--- a/src/THcShowerPlane.cxx
+++ b/src/THcShowerPlane.cxx
@@ -612,6 +612,21 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
       } else {
 	((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(nrPosAdcHits))->Set(padnum,1);
       }
+     if (rawPosAdcHit.GetPulseAmpRaw(thit) <= 0) {
+	Double_t PeakPedRatio= rawPosAdcHit.GetF250_PeakPedestalRatio();
+	Int_t NPedSamples= rawPosAdcHit.GetF250_NPedestalSamples();
+	Double_t AdcToC =  rawPosAdcHit.GetAdcTopC();
+	Double_t AdcToV =  rawPosAdcHit.GetAdcTomV();
+	Int_t PedDefaultTemp = static_cast<THcShower*>(fParent)->GetPedDefault(padnum-1,fLayerNum-1,0);
+	if (PedDefaultTemp !=0) {
+	  Double_t tPulseInt = AdcToC*(rawPosAdcHit.GetPulseIntRaw(thit) - PedDefaultTemp*PeakPedRatio);
+	  ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(nrPosAdcHits))->Set(padnum, tPulseInt);
+          ((THcSignalHit*) frPosAdcPedRaw->ConstructedAt(nrPosAdcHits))->Set(padnum, PedDefaultTemp);
+          ((THcSignalHit*) frPosAdcPed->ConstructedAt(nrPosAdcHits))->Set(padnum, float(PedDefaultTemp)/float(NPedSamples)*AdcToV);
+	  
+	}
+	((THcSignalHit*) frPosAdcPulseAmp->ConstructedAt(nrPosAdcHits))->Set(padnum, 0.);	
+      }
       ++nrPosAdcHits;
       fTotNumAdcHits++;
       fTotNumPosAdcHits++;
@@ -637,6 +652,21 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
       } else {
 	((THcSignalHit*) frNegAdcErrorFlag->ConstructedAt(nrNegAdcHits))->Set(padnum,1);
       }
+     if (rawNegAdcHit.GetPulseAmpRaw(thit) <= 0) {
+	Double_t PeakPedRatio= rawNegAdcHit.GetF250_PeakPedestalRatio();
+	Int_t NPedSamples= rawNegAdcHit.GetF250_NPedestalSamples();
+	Double_t AdcToC =  rawNegAdcHit.GetAdcTopC();
+	Double_t AdcToV =  rawNegAdcHit.GetAdcTomV();
+	Int_t PedDefaultTemp = static_cast<THcShower*>(fParent)->GetPedDefault(padnum-1,fLayerNum-1,1);
+	if (PedDefaultTemp !=0) {
+	  Double_t tPulseInt = AdcToC*(rawNegAdcHit.GetPulseIntRaw(thit) - PedDefaultTemp*PeakPedRatio);
+	  ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(nrNegAdcHits))->Set(padnum, tPulseInt);
+          ((THcSignalHit*) frNegAdcPedRaw->ConstructedAt(nrNegAdcHits))->Set(padnum, PedDefaultTemp);
+          ((THcSignalHit*) frNegAdcPed->ConstructedAt(nrNegAdcHits))->Set(padnum, float(PedDefaultTemp)/float(NPedSamples)*AdcToV);
+	  
+	}
+	((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(nrNegAdcHits))->Set(padnum, 0.);	
+      }
       ++nrNegAdcHits;
       fTotNumAdcHits++;
       fTotNumNegAdcHits++;
@@ -744,6 +774,8 @@ void THcShowerPlane::FillADC_DynamicPedestal()
 {
   Double_t StartTime = 0.0;
   if( fglHod ) StartTime = fglHod->GetStartTime();
+   Double_t OffsetTime = 0.0;
+   if( fglHod ) OffsetTime = fglHod->GetOffsetTime();
   for (Int_t ielem=0;ielem<frNegAdcPulseInt->GetEntries();ielem++) {
    Int_t    npad         = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
    Double_t pulseInt     = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetData();
@@ -751,18 +783,11 @@ void THcShowerPlane::FillADC_DynamicPedestal()
     Double_t pulseAmp     = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(ielem))->GetData();
     Double_t pulseIntRaw  = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
     Double_t pulseTime    = ((THcSignalHit*) frNegAdcPulseTime->ConstructedAt(ielem))->GetData();
-    Double_t adctdcdiffTime = StartTime-pulseTime;
+    Double_t adctdcdiffTime = StartTime-pulseTime+OffsetTime;
     Double_t threshold    = ((THcSignalHit*) frNegAdcThreshold->ConstructedAt(ielem))->GetData();
-    Bool_t   errorflag    = ((THcSignalHit*) frNegAdcErrorFlag->ConstructedAt(ielem))->GetData();
     Bool_t   pulseTimeCut = (adctdcdiffTime > static_cast<THcShower*>(fParent)->GetWindowMin(npad,fLayerNum-1,1)) && (adctdcdiffTime < static_cast<THcShower*>(fParent)->GetWindowMax(npad,fLayerNum-1,1) );
-
-    
- 
-    if (!errorflag)
-      {
 	fGoodNegAdcMult.at(npad) += 1;
-      }
-    if (!errorflag && pulseTimeCut) {
+    if (pulseTimeCut) {
       fGoodNegAdcPulseIntRaw.at(npad) =pulseIntRaw;
 
       if(fGoodNegAdcPulseIntRaw.at(npad) >  threshold && fGoodNegAdcPulseInt.at(npad)==0) {
@@ -793,18 +818,10 @@ void THcShowerPlane::FillADC_DynamicPedestal()
     Double_t pulseInt     = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetData();
     Double_t pulseIntRaw  = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
     Double_t pulseTime    = ((THcSignalHit*) frPosAdcPulseTime->ConstructedAt(ielem))->GetData();
-     Double_t adctdcdiffTime = StartTime-pulseTime;
-   Bool_t   errorflag    = ((THcSignalHit*) frPosAdcErrorFlag->ConstructedAt(ielem))->GetData();
+     Double_t adctdcdiffTime = StartTime-pulseTime+OffsetTime;
    Bool_t   pulseTimeCut = (adctdcdiffTime > static_cast<THcShower*>(fParent)->GetWindowMin(npad,fLayerNum-1,0)) && (adctdcdiffTime < static_cast<THcShower*>(fParent)->GetWindowMax(npad,fLayerNum-1,0) );
-
-
-
-    if (!errorflag)
-      {
 	fGoodPosAdcMult.at(npad) += 1;
-      }
-    
-    if (!errorflag && pulseTimeCut) {
+    if (pulseTimeCut) {
       fGoodPosAdcPulseIntRaw.at(npad) = pulseIntRaw;
 
       if(fGoodPosAdcPulseIntRaw.at(npad) >  threshold && fGoodPosAdcPulseInt.at(npad)==0) {