diff --git a/src/THcShower.cxx b/src/THcShower.cxx
index 9cfe34521fd448a1ba702166213041da301a3303..394955a115cdd2d153b0f084f92c6134baee91d2 100644
--- a/src/THcShower.cxx
+++ b/src/THcShower.cxx
@@ -163,6 +163,19 @@ THaAnalysisObject::EStatus THcShower::Init( const TDatime& date )
       return kInitError;
   }
 
+  if(fHasArray) {
+    cout << "THcShower::Init: adjustment of fiducial volume limits to the fly's eye part." << endl;
+    cout << "  Old limits:" << endl;
+    cout << "    Xmin = " << fvXmin << "  Xmax = " << fvXmax << endl;
+    cout << "    Ymin = " << fvYmin << "  Ymax = " << fvYmax << endl;
+    fvXmin = TMath::Max(fvXmin, fArray->fvXmin());
+    fvXmax = TMath::Min(fvXmax, fArray->fvXmax());
+    fvYmin = TMath::Max(fvYmin, fArray->fvYmin());
+    fvYmax = TMath::Min(fvYmax, fArray->fvYmax());
+    cout << "  New limits:" << endl;
+    cout << "    Xmin = " << fvXmin << "  Xmax = " << fvXmax << endl;
+    cout << "    Ymin = " << fvYmin << "  Ymax = " << fvYmax << endl;
+  }
 
   cout << "---------------------------------------------------------------\n";
   cout << "From THcShower::Init: initialized " << GetApparatus()->GetName()
diff --git a/src/THcShower.h b/src/THcShower.h
index a90b3ddcfc62c73bac6b15d9739c4a3be6d0f00c..df673cc5c6b1c1967fed48666652fbccfaf4355c 100644
--- a/src/THcShower.h
+++ b/src/THcShower.h
@@ -154,8 +154,8 @@ public:
   
   Int_t GetNBlocks(Int_t NLayer) const { return fNBlocks[NLayer];}
 
-  Double_t GetXPos(Int_t NLayer, Int_t NRaw) const {
-    return fXPos[NLayer][NRaw];
+  Double_t GetXPos(Int_t NLayer, Int_t NRow) const {
+    return fXPos[NLayer][NRow];
   }
 
   Double_t GetYPos(Int_t NLayer, Int_t Side) const {
@@ -247,8 +247,8 @@ protected:
   Int_t fNclust;             // Number of clusters
   Int_t fNtracks;            // Number of shower tracks, i.e. number of
                              // cluster-to-track association
-  Double_t fEtot;             // Total energy 
-  Double_t fEtotNorm;             // Total energy divided by spec central momentum 
+  Double_t fEtot;            // Total energy 
+  Double_t fEtotNorm;        // Total energy divided by spec central momentum 
 
   THcShowerClusterList* fClusterList;   // List of hit clusters
 
diff --git a/src/THcShowerArray.cxx b/src/THcShowerArray.cxx
index c64bbd967d12bfa8c5309b69a9e91aaf7f5b9ee2..0fce28e3dd0cbe3da882ac60e2568cc84bf2f666 100644
--- a/src/THcShowerArray.cxx
+++ b/src/THcShowerArray.cxx
@@ -85,6 +85,9 @@ Int_t THcShowerArray::ReadDatabase( const TDatime& date )
   prefix[1]='\0';
 
   cout << "Parent name: " << GetParent()->GetPrefix() << endl;
+  fNRows=fNColumns=0;
+  fXFront=fYFront=fZFront=0.;
+  fXStep=fYStep=0.;
   fUsingFADC=0;
   fPedSampLow=0;
   fPedSampHigh=9;
@@ -628,3 +631,31 @@ void THcShowerArray::InitializePedestals( )
     fPedCount[i] = 0;
   }
 } 
+
+//------------------------------------------------------------------------------
+
+// Fiducial volume limits.
+
+Double_t THcShowerArray::fvXmin() {
+  THcShower* fParent;
+  fParent = (THcShower*) GetParent();
+  return fXPos[0][0] - fXStep/2 + fParent->fvDelta;
+}
+
+Double_t THcShowerArray::fvYmax() {
+  THcShower* fParent;
+  fParent = (THcShower*) GetParent();
+  return fYPos[0][0] + fYStep/2 - fParent->fvDelta;
+}
+
+Double_t THcShowerArray::fvXmax() {
+  THcShower* fParent;
+  fParent = (THcShower*) GetParent();
+  return fXPos[fNRows-1][fNColumns-1] + fXStep/2 - fParent->fvDelta;
+}
+
+Double_t THcShowerArray::fvYmin() {
+  THcShower* fParent;
+  fParent = (THcShower*) GetParent();
+  return fYPos[fNRows-1][fNColumns-1] - fYStep/2 + fParent->fvDelta;
+}
diff --git a/src/THcShowerArray.h b/src/THcShowerArray.h
index d4eb98a9406497aceb6b3264b13ac85be7f3375c..b6f88f32f71b24e851cfe376d4d7a8ed5676e094 100644
--- a/src/THcShowerArray.h
+++ b/src/THcShowerArray.h
@@ -56,6 +56,11 @@ public:
     return 0.0;
   };
 
+  // Fiducial volume limits.
+  Double_t fvXmin(); 
+  Double_t fvYmax();
+  Double_t fvXmax();
+  Double_t fvYmin();
 
 protected: