diff --git a/src/THcHodoscope.cxx b/src/THcHodoscope.cxx
index 36ae845b6f33ca7ec78d0d42f09607351c5b02f9..ac85bd85fac0cbe330cc1a3aa85120c08a91a6d9 100644
--- a/src/THcHodoscope.cxx
+++ b/src/THcHodoscope.cxx
@@ -29,6 +29,7 @@
 #include <cstdio>
 #include <cstdlib>
 #include <iostream>
+#include <fstream>
 
 using namespace std;
 
@@ -65,17 +66,26 @@ void THcHodoscope::Setup(const char* name, const char* description)
   if( IsZombie()) return;
 
   fDebug   = 1;  // Keep this at one while we're working on the code    
-  fNPlanes = 4;  // Should get this from parameters
+  // reading the number of planes from a param list! Still kludgy but it works
+  system("rm tmp.txt; cat PARAM/hhodo.param |grep hhodo_slop|wc -w>tmp.txt");
+  ifstream tmpfile;
+  tmpfile.open("tmp.txt");
+  tmpfile >> fNPlanes;
+  tmpfile.close();
+  fNPlanes = fNPlanes-2;
+  cout << "fNPlanes = " << fNPlanes << endl;
+  //  fNPlanes = 4;  // Should get this from parameters -> Now we do! GN
 
+  // Plane names
   fPlaneNames = new char* [fNPlanes];
   for(Int_t i=0;i<fNPlanes;i++) {fPlaneNames[i] = new char[3];}
   // Should get the plane names from parameters.  
+  // could try this: grep _zpos PARAM/hhodo.pos | sed 's/\_/\ /g' | awk '{print $2}'
   strcpy(fPlaneNames[0],"1x");  
   strcpy(fPlaneNames[1],"1y");
   strcpy(fPlaneNames[2],"2x");
   strcpy(fPlaneNames[3],"2y");
 
-  cout << "fNPlanes = " << fNPlanes << endl;
   // Probably shouldn't assume that description is defined
   char* desc = new char[strlen(description)+50];
   fPlanes = new THcScintillatorPlane* [fNPlanes];
@@ -83,8 +93,8 @@ void THcHodoscope::Setup(const char* name, const char* description)
     strcpy(desc, description);
     strcat(desc, " Plane ");
     strcat(desc, fPlaneNames[i]);
-
-    fPlanes[i] = new THcScintillatorPlane(fPlaneNames[i], desc, i+1, this); 
+    fPlanes[i] = new THcScintillatorPlane(fPlaneNames[i], desc, i+1,fNPlanes, this); 
+    //fPlanes[i] = new THcScintillatorPlane(fPlaneNames[i], desc, i+1, this); 
     cout << "Created Scintillator Plane " << fPlaneNames[i] << ", " << desc << endl;
   }
 }
@@ -292,8 +302,8 @@ Int_t THcHodoscope::ReadDatabase( const TDatime& date )
   Int_t plen=strlen(parname);
 
   fNPaddle = new Int_t [fNPlanes];
-  fSpacing = new Double_t [fNPlanes];
-  fCenter = new Double_t* [fNPlanes];
+  //  fSpacing = new Double_t [fNPlanes];
+  //fCenter = new Double_t* [fNPlanes];
 
   // An alternate way to get these variables
   // Can add Xscin_P_center when LoadParmValues supports arrays
@@ -311,27 +321,7 @@ Int_t THcHodoscope::ReadDatabase( const TDatime& date )
     gHcParms->LoadParmValues((DBRequest*)&list,prefix);
   }
 
-  for(Int_t i=0;i<fNPlanes;i++) {
-    fCenter[i] = new Double_t[fNPaddle[i]];
-    DBRequest list[]={
-      {Form("scin_%s_spacing",fPlaneNames[i]), &fSpacing[i], kDouble},
-      {Form("scin_%s_center",fPlaneNames[i]), fCenter[i], kDouble, fNPaddle[i]},
-      {0}
-    };
-    gHcParms->LoadParmValues((DBRequest*)&list,prefix);
-  }
-
-  if(fDebug>=1) {
-    cout << "Plane: " << " nr spacing" << endl;
-    for(Int_t i=0;i<fNPlanes;i++) {
-      cout << fPlaneNames[i] << "      " << fNPaddle[i] << "  " << fSpacing[i] <<endl;
-      for(Int_t ip=0;ip<fNPaddle[i];ip++) {
-	cout << " " << fCenter[i][ip];
-      }
-      cout <<  endl;
-    }
-  }
-
+/*
 #if 0
   fCenter = new Double_t* [fNPlanes];
   for(Int_t i=0;i<fNPlanes;i++) {
@@ -349,11 +339,37 @@ Int_t THcHodoscope::ReadDatabase( const TDatime& date )
     if (fDebug>=1)  cout << endl;
   }
 #endif
+*/
   // GN added
   // reading variables from *hodo.param
-  prefix[1]='\0';
-
+  fMaxScinPerPlane=fNPaddle[0];
+  for (Int_t i=1;i<fNPlanes;i++) {
+    fMaxScinPerPlane=(fMaxScinPerPlane > fNPaddle[i])? fMaxScinPerPlane : fNPaddle[i];
+  }
+// need this for "padded arrays" i.e. 4x16 lists of parameters (GN)
+  fMaxHodoScin=fMaxScinPerPlane*fNPlanes; 
+  if (fDebug>=1)  cout <<"fMaxScinPerPlane = "<<fMaxScinPerPlane<<" fMaxHodoScin = "<<fMaxHodoScin<<endl;
+
+  Double_t fHodoVelLight[fMaxHodoScin];
+  Double_t fHodoPosSigma[fMaxHodoScin];
+  Double_t fHodoNegSigma[fMaxHodoScin];
+  Double_t fHodoPosMinPh[fMaxHodoScin];
+  Double_t fHodoNegMinPh[fMaxHodoScin];
+  Double_t fHodoPosPhcCoeff[fMaxHodoScin];
+  Double_t fHodoNegPhcCoeff[fMaxHodoScin];
+  Double_t fHodoPosTimeOffset[fMaxHodoScin];
+  Double_t fHodoNegTimeOffset[fMaxHodoScin];
+  Int_t fHodoPosPedLimit[fMaxHodoScin];
+  Int_t fHodoNegPedLimit[fMaxHodoScin];
+  Int_t fTofUsingInvAdc;
+  Double_t fHodoPosInvAdcOffset[fMaxHodoScin];
+  Double_t fHodoNegInvAdcOffset[fMaxHodoScin];
+  Double_t fHodoPosInvAdcLinear[fMaxHodoScin];
+  Double_t fHodoNegInvAdcLinear[fMaxHodoScin];
+  Double_t fHodoPosInvAdcAdc[fMaxHodoScin];
+  Double_t fHodoNegInvAdcAdc[fMaxHodoScin];
 
+  prefix[1]='\0';
   DBRequest list[]={
     {"start_time_center", &fStartTimeCenter, kDouble},
     {"start_time_slop", &fStartTimeSlop, kDouble},
@@ -361,66 +377,47 @@ Int_t THcHodoscope::ReadDatabase( const TDatime& date )
     {"scin_tdc_min", &fScinTdcMin, kDouble},
     {"scin_tdc_max", &fScinTdcMax, kDouble},
     {"tof_tolerance", &fTofTolerance, kDouble},
+    {"pathlength_central", &fPathLengthCentral, kDouble},
+    {"hodo_vel_light",&fHodoVelLight[0],kDouble,fMaxHodoScin},
+    {"hodo_pos_sigma",&fHodoPosSigma[0],kDouble,fMaxHodoScin},
+    {"hodo_neg_sigma",&fHodoNegSigma[0],kDouble,fMaxHodoScin},
+    {"hodo_pos_minph",&fHodoPosMinPh[0],kDouble,fMaxHodoScin},
+    {"hodo_neg_minph",&fHodoNegMinPh[0],kDouble,fMaxHodoScin},
+    {"hodo_pos_phc_coeff",&fHodoPosPhcCoeff[0],kDouble,fMaxHodoScin},
+    {"hodo_neg_phc_coeff",&fHodoNegPhcCoeff[0],kDouble,fMaxHodoScin},
+    {"hodo_pos_time_offset",&fHodoPosTimeOffset[0],kDouble,fMaxHodoScin},
+    {"hodo_neg_time_offset",&fHodoNegTimeOffset[0],kDouble,fMaxHodoScin},
+    {"hodo_pos_ped_limit",&fHodoPosPedLimit[0],kInt,fMaxHodoScin},
+    {"hodo_neg_ped_limit",&fHodoNegPedLimit[0],kInt,fMaxHodoScin},
+    {"tofusinginvadc",&fTofUsingInvAdc,kInt},
+    {"hodo_pos_invadc_offset",&fHodoPosInvAdcOffset[0],kDouble,fMaxHodoScin},
+    {"hodo_neg_invadc_offset",&fHodoNegInvAdcOffset[0],kDouble,fMaxHodoScin},
+    {"hodo_pos_invadc_linear",&fHodoPosInvAdcLinear[0],kDouble,fMaxHodoScin},
+    {"hodo_neg_invadc_linear",&fHodoNegInvAdcLinear[0],kDouble,fMaxHodoScin},
+    {"hodo_pos_invadc_adc",&fHodoPosInvAdcAdc[0],kDouble,fMaxHodoScin},
+    {"hodo_neg_invadc_adc",&fHodoNegInvAdcAdc[0],kDouble,fMaxHodoScin},
     {0}
   };
   gHcParms->LoadParmValues((DBRequest*)&list,prefix);
-  cout <<"******* Testing *** "<<fStartTimeCenter<<" "<<fStartTimeSlop;
-  cout <<" "<<fScinTdcToTime;
-  cout <<" "<<fScinTdcMin;
-  cout <<" "<<fScinTdcMax;
-  cout <<" "<<fTofTolerance;
-  cout <<endl<<endl;
-  //  fStartTimeCenter=DefineDoubleVariable("start_time_center");
-  //  fStartTimeSlop=DefineDoubleVariable("start_time_slop");
-  //fScinTdcToTime=DefineDoubleVariable("scin_tdc_to_time");
-  //fScinTdcMin=DefineIntVariable("scin_tdc_min");
-  //fScinTdcMax=DefineIntVariable("scin_tdc_max");
-  //fTofTolerance=DefineDoubleVariable("tof_tolerance");
-  fHodoSlop = new Double_t [fNPlanes];
-  DefineArray("hodo_slop",fNPlanes, &fHodoSlop[0]);
-  /*  if (fDebug>=1) {
-    cout <<"testing hodo_slop ";
-    for(Int_t i=0;i<fNPlanes;i++) {
-      if (fDebug>=1)    cout << " " << fHodoSlop[i];
-    }
-    if (fDebug>=1)  cout << endl;
-   }
-  */
- 
-  /* try to read *hodo_vel_light
-     NOTE: for HMS these were assigned as a 4x16 array (so we need to pad the planes 
-     that have less than 16 paddles per
-  */
-  Int_t max_paddles=fNPaddle[0];
-  for (Int_t i=1;i<fNPlanes;i++) {
-    max_paddles=(max_paddles > fNPaddle[i])? max_paddles : fNPaddle[i];
-  }
-  cout <<"maxpaddles = "<<max_paddles<<endl;
-  fHodoVelLight = new Double_t* [max_paddles];
-  prefix[1]='\0';
-  strcpy(parname,prefix);
-  strcat(parname,"hodo_vel_light");
-  Int_t k=0;
-  if (gHcParms->Find(parname)) {
-    Double_t* p = (Double_t *)gHcParms->Find(parname)->GetValuePointer();
-    cout <<parname<<" ";
-    for(Int_t i=0;i<max_paddles;i++) {
-      fHodoVelLight[i] = new Double_t [fNPlanes];
-      for(Int_t j=0;j<fNPlanes;j++) {
-	//	cout <<"i = "<<i<<" j = "<<j;
-	fHodoVelLight[i][j] = p[k];
-	k++;
-	if (fDebug>=1)    cout << " " << fHodoVelLight[i][j]<<endl;
+  if (fDebug >=1) {
+    cout <<"******* Testing Hodoscope Parameter Reading ***\n";
+    cout<<"StarTimeCenter = "<<fStartTimeCenter<<endl;
+    cout<<"StartTimeSlop = "<<fStartTimeSlop<<endl;
+    cout <<"ScintTdcToTime = "<<fScinTdcToTime<<endl;
+    cout <<"TdcMin = "<<fScinTdcMin<<" TdcMax = "<<fScinTdcMax<<endl;
+    cout <<"TofTolerance = "<<fTofTolerance<<endl;
+    cout <<"*** VelLight ***\n";
+    for (int i1=1;i1<=fNPlanes;i1++) {
+      cout<<"Plane "<<i1<<endl;
+      for (int i2=0;i2<fMaxScinPerPlane;i2++) {
+	cout<<fHodoVelLight[GetScinIndex(i1,i2)]<<" ";
       }
-      if (fDebug>=1)  cout << endl;
+      cout <<endl;
     }
+ 
+    cout <<endl<<endl;
   }
-  else {
-    cout <<"Could not find "<<parname<<" in the DataBase!!!\n";
-  }
-
   fIsInit = true;
-
   return kOK;
 }
 
@@ -428,9 +425,7 @@ Int_t THcHodoscope::ReadDatabase( const TDatime& date )
 Int_t THcHodoscope::DefineVariables( EMode mode )
 {
   // Initialize global variables and lookup table for decoder
-
   cout << "THcHodoscope::DefineVariables called " << GetName() << endl;
-
   if( mode == kDefine && fIsSetup ) return kOK;
   fIsSetup = ( mode == kDefine );
 
@@ -497,9 +492,9 @@ void THcHodoscope::DeleteArrays()
 {
   // Delete member arrays. Used by destructor.
 
-  delete [] fNPaddle;  fNPaddle = NULL;
-  delete [] fSpacing;  fSpacing = NULL;
-  delete [] fCenter;   fCenter = NULL; // This 2D. What is correct way to delete?
+  delete [] fNPaddle; fNPaddle = NULL;
+  //  delete [] fSpacing; fSpacing = NULL;
+  //delete [] fCenter;  fCenter = NULL; // This 2D. What is correct way to delete?
 
   //  delete [] fRA_c;    fRA_c    = NULL;
   //  delete [] fRA_p;    fRA_p    = NULL;
@@ -623,6 +618,20 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
 
   return 0;
 }
-
+//_____________________________________________________________________________
+Int_t THcHodoscope::GetScinIndex( Int_t nPlane, Int_t nPaddle ) {
+  // Return the index of a scintillator given the plane # and the paddle #
+  // This assumes that planes start counting from 1
+  // and paddles start counting from 0! (not ideal but that's what I have for now)
+  return fNPlanes*nPaddle+nPlane-1;
+}
+//_____________________________________________________________________________
+Int_t THcHodoscope::GetScinIndex( Int_t nSide, Int_t nPlane, Int_t nPaddle ) {
+  return nSide*fMaxHodoScin+fNPlanes*nPaddle+nPlane-1;
+}
+//_____________________________________________________________________________
+Double_t THcHodoscope::GetPathLengthCentral() {
+  return fPathLengthCentral;
+}
 ClassImp(THcHodoscope)
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/THcHodoscope.h b/src/THcHodoscope.h
index 2b8c8d86d6e3cd9c285f25940a898f03abeca95d..609b8ed853bd035f5b8ce14aef5728f7ea6265e8 100644
--- a/src/THcHodoscope.h
+++ b/src/THcHodoscope.h
@@ -32,7 +32,10 @@ public:
   virtual Int_t      ApplyCorrections( void );
 
   //  Int_t GetNHits() const { return fNhit; }
-  
+  Int_t GetScinIndex(Int_t nPlane, Int_t nPaddle);
+  Int_t GetScinIndex(Int_t nSide, Int_t nPlane, Int_t nPaddle);
+  Double_t GetPathLengthCentral();
+
   Int_t GetNTracks() const { return fTrackProj->GetLast()+1; }
   const TClonesArray* GetTrackHits() const { return fTrackProj; }
   
@@ -49,19 +52,33 @@ protected:
 
 
   // Potential Hall C parameters.  Mostly here for demonstration
-  Int_t fNPlanes;
+  Int_t fNPlanes,fMaxScinPerPlane,fMaxHodoScin; // number of planes; max number of scin/plane; product of the first two 
   Double_t fStartTimeCenter, fStartTimeSlop, fScinTdcToTime;
   Double_t fTofTolerance;
+  Double_t fPathLengthCentral;
   Int_t fScinTdcMin, fScinTdcMax; // min and max TDC values
-  Double_t* fHodoSlop;
-  Double_t** fHodoVelLight;
-  Double_t** fHodoPosSigma;
-  Double_t** fHodoNegSigma;
-
   char** fPlaneNames;
   Int_t* fNPaddle;		// Number of paddles per plane
-  Double_t* fSpacing;		// Paddle spacing in cm
-  Double_t** fCenter;           // Center position of each paddle
+
+  Double_t* fHodoVelLight;
+  Double_t* fHodoPosSigma;
+  Double_t* fHodoNegSigma;
+
+  Double_t* fHodoPosMinPh;
+  Double_t* fHodoNegMinPh;
+  Double_t* fHodoPosPhcCoeff;
+  Double_t* fHodoNegPhcCoeff;
+  Double_t* fHodoPosTimeOffset;
+  Double_t* fHodoNegTimeOffset;
+  Int_t* fHodoPosPedLimit;
+  Int_t* fHodoNegPedLimit;
+  Int_t fTofUsingInvAdc;
+  Double_t* fHodoPosInvAdcOffset;
+  Double_t* fHodoNegInvAdcOffset;
+  Double_t* fHodoPosInvAdcLinear;
+  Double_t* fHodoNegInvAdcLinear;
+  Double_t* fHodoPosInvAdcAdc;
+  Double_t* fHodoNegInvAdcAdc;
 
   THcScintillatorPlane** fPlanes; // List of plane objects
 
diff --git a/src/THcScintillatorPlane.cxx b/src/THcScintillatorPlane.cxx
index aaf6bd22c4c087bcc5791ce5bf31feef908ddcf3..774f8d34ad6cea7f1235e46ded6ab19866769644 100644
--- a/src/THcScintillatorPlane.cxx
+++ b/src/THcScintillatorPlane.cxx
@@ -37,6 +37,23 @@ THcScintillatorPlane::THcScintillatorPlane( const char* name,
   fPosADCHits = new TClonesArray("THcSignalHit",16);
   fNegADCHits = new TClonesArray("THcSignalHit",16);
   fPlaneNum = planenum;
+  fTotPlanes = planenum;
+}
+//______________________________________________________________________________
+THcScintillatorPlane::THcScintillatorPlane( const char* name, 
+					    const char* description,
+					    const Int_t planenum,
+					    const Int_t totplanes,
+					    THaDetectorBase* parent )
+  : THaSubDetector(name,description,parent)
+{
+  // Normal constructor with name and description
+  fPosTDCHits = new TClonesArray("THcSignalHit",16);
+  fNegTDCHits = new TClonesArray("THcSignalHit",16);
+  fPosADCHits = new TClonesArray("THcSignalHit",16);
+  fNegADCHits = new TClonesArray("THcSignalHit",16);
+  fPlaneNum = planenum;
+  fTotPlanes = totplanes;
 }
 
 //______________________________________________________________________________
@@ -88,7 +105,7 @@ Int_t THcScintillatorPlane::ReadDatabase( const TDatime& date )
   prefix[0]=tolower(GetParent()->GetPrefix()[0]);
   prefix[1]='\0';
 
-  strcpy(parname,prefix);
+  /*  strcpy(parname,prefix);
   strcat(parname,"scin_");
   strcat(parname,GetName());
   Int_t plen=strlen(parname);
@@ -101,11 +118,73 @@ Int_t THcScintillatorPlane::ReadDatabase( const TDatime& date )
   strcat(parname,"_spacing");
 
   fSpacing =  gHcParms->Find(parname)->GetValue(0);
-  
+  cout <<"fSpacing = "<<fSpacing<<endl;
+  */
+
+  // need this further down so read them first! GN
+  strcpy(parname,prefix);
+  strcat(parname,"scin_");
+  strcat(parname,GetName());
+  Int_t plen=strlen(parname);
+  strcat(parname,"_nr");
+  fNelem = *(Int_t *)gHcParms->Find(parname)->GetValuePointer();
+  //
+  char *tmpleft, *tmpright;
+  if (fPlaneNum==1 || fPlaneNum==3) {
+    tmpleft="left";
+    tmpright="right";
+  } 
+  else {
+    tmpleft="top";
+    tmpright="bot";
+  }
+
+  Double_t tmpdouble[fTotPlanes];
+    DBRequest list[]={
+     {Form("scin_%s_zpos",GetName()), &fZpos, kDouble},
+     {Form("scin_%s_dzpos",GetName()), &fDzpos, kDouble},
+     {Form("scin_%s_size",GetName()), &fSize, kDouble},
+     {Form("scin_%s_spacing",GetName()), &fSpacing, kDouble},
+     {Form("scin_%s_%s",GetName(),tmpleft), &fPosLeft,kDouble},
+     {Form("scin_%s_%s",GetName(),tmpright), &fPosRight,kDouble},
+     {Form("scin_%s_offset",GetName()), &fPosOffset, kDouble},
+     {Form("scin_%s_center",GetName()), &fPosCenter[0],kDouble,fNelem},
+     // this is from Xhodo.param...
+          {"hodo_slop",&tmpdouble[0],kDouble,fTotPlanes},
+     {0}
+    };
+   gHcParms->LoadParmValues((DBRequest*)&list,prefix);
+   // fetch the parameter from the temporary list
+   fHodoSlop=tmpdouble[fPlaneNum-1];
+   cout <<" plane num = "<<fPlaneNum<<endl;
+   cout <<" nelem     = "<<fNelem<<endl;
+   cout <<" zpos      = "<<fZpos<<endl;
+   cout <<" dzpos     = "<<fDzpos<<endl;
+   cout <<" spacing   = "<<fSpacing<<endl;
+   cout <<" size      = "<<fSize<<endl;
+   cout <<" hodoslop  = "<<fHodoSlop<<endl;
+   cout <<"PosLeft = "<<fPosLeft<<endl;
+   cout <<"PosRight = "<<fPosRight<<endl;
+   cout <<"PosOffset = "<<fPosOffset<<endl;
+   cout <<"PosCenter[0] = "<<fPosCenter[0]<<endl;
+
+
+  /* for(Int_t i=0;i<fNPlanes;i++) {
+    fCenter[i] = new Double_t[fNPaddle[i]];
+    DBRequest list[]={
+      {Form("scin_%s_spacing",fPlaneNames[i]), &fSpacing[i], kDouble},
+      {Form("scin_%s_center",fPlaneNames[i]), fCenter[i], kDouble, fNPaddle[i]},
+      {0}
+    };
+    gHcParms->LoadParmValues((DBRequest*)&list,prefix);
+  }
+  */
+  ///  Int_t tmpint = new Int_t [GetParent()->GetNPlanes()]; 
+  /// cout<<"Nplanes in scintplane!! = "<<fTotPlanes <<endl;
+
   // First letter of GetParent()->GetPrefix() tells us what prefix to
   // use on parameter names.  
 
-
   //  Find the number of elements
   
   // Think we will make special methods to pass most
@@ -333,4 +412,53 @@ void THcScintillatorPlane::InitializePedestals( )
     fNegPedCount[i] = 0;
   }
 }
+//____________________________________________________________________________
+Int_t THcScintillatorPlane::GetNelem() 
+{
+  return fNelem;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetSpacing()
+{
+  return fSpacing;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetSize()
+{
+  return fSize;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetHodoSlop()
+{
+  return fHodoSlop;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetZpos()
+{
+  return fZpos;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetDzpos()
+{
+  return fDzpos;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetPosLeft() {
+  return fPosLeft;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetPosRight() {
+  return fPosRight;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetPosOffset() {
+  return fPosOffset;
+}
+//____________________________________________________________________________
+Double_t THcScintillatorPlane::GetPosCenter(Int_t PaddleNo) {
+  return fPosCenter[PaddleNo];
+}
+//____________________________________________________________________________
+ClassImp(THcScintillatorPlane)
+////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/THcScintillatorPlane.h b/src/THcScintillatorPlane.h
index eefae3e258a40cce25ac37676b4b355dda4e84d7..7cb205c2fe91f51a2eafdf4cae4b174e414a6df2 100644
--- a/src/THcScintillatorPlane.h
+++ b/src/THcScintillatorPlane.h
@@ -23,6 +23,8 @@ class THcScintillatorPlane : public THaSubDetector {
  public:
   THcScintillatorPlane( const char* name, const char* description,
 			Int_t planenum, THaDetectorBase* parent = NULL);
+  THcScintillatorPlane( const char* name, const char* description,
+			Int_t planenum, Int_t totplanes, THaDetectorBase* parent = NULL);
   virtual ~THcScintillatorPlane();
 
   virtual void    Clear( Option_t* opt="" );
@@ -38,7 +40,16 @@ class THcScintillatorPlane : public THaSubDetector {
   virtual Int_t AccumulatePedestals(TClonesArray* rawhits, Int_t nexthit);
   virtual void  CalculatePedestals( );
 
-  Double_t fSpacing;
+  Int_t GetNelem(); // return number of paddles in this plane
+  Double_t GetSpacing(); // return the spacing of paddles 
+  Double_t GetSize();    // return paddle size
+  Double_t GetHodoSlop(); // return the hodo slop
+  Double_t GetZpos();   //return the z position
+  Double_t GetDzpos();
+  Double_t GetPosLeft();
+  Double_t GetPosRight();
+  Double_t GetPosOffset();
+  Double_t GetPosCenter(Int_t PaddleNo); // here we're counting from zero!
 
   TClonesArray* fParentHitList;
 
@@ -50,8 +61,20 @@ class THcScintillatorPlane : public THaSubDetector {
   TClonesArray* fNegADCHits;
 
   Int_t fPlaneNum;		/* Which plane am I 1-4 */
+  Int_t fTotPlanes;              /* so we can read variables that are not indexed by plane id */
   Int_t fNelem;			/* Need since we don't inherit from 
 				 detector base class */
+  Double_t fSpacing;            /* paddle spacing */
+  Double_t fSize;               /* paddle size */
+  Double_t fZpos;                /* z position */
+  Double_t fDzpos;
+  Double_t fHodoSlop;           /* max allowed slop for this plane */
+  Double_t fPosLeft;            /* NOTE: "left" = "top" for a Y scintillator */
+  Double_t fPosRight;           /* NOTE: "right" = "bottom" for a Y scintillator */
+  Double_t fPosOffset;
+  Double_t fPosCenter[16];         /* array with centers for all scintillators in the plane */
+
+  /* Pedestal Quantities */
   Int_t fNPedestalEvents;	/* Number of pedestal events */
   Int_t fMinPeds;		/* Only analyze/update if num events > */
   Int_t *fPosPedSum;		/* Accumulators for pedestals */