diff --git a/src/THcHodoscope.cxx b/src/THcHodoscope.cxx
index 1a8061b8184f9e89f588244d9a570edf85a118e9..e28702dbe8d375c9879b729726a90d42630dcb2d 100644
--- a/src/THcHodoscope.cxx
+++ b/src/THcHodoscope.cxx
@@ -42,6 +42,7 @@ hodoscope array, not just one plane.
 #include <iostream>
 #include <iomanip>
 #include <fstream>
+#include <cassert>
 
 using namespace std;
 using std::vector;
@@ -632,8 +633,7 @@ void THcHodoscope::DeleteArrays()
 }
 
 //_____________________________________________________________________________
-inline
-void THcHodoscope::ClearEvent()
+void THcHodoscope::Clear( Option_t* opt )
 {
   /*! \brief Clears variables
    *
@@ -652,13 +652,15 @@ void THcHodoscope::ClearEvent()
   fGoodStartTime = kFALSE;
   fGoodScinHits = 0;
  
-  for(Int_t ip=0;ip<fNPlanes;ip++) {
-    fPlanes[ip]->Clear();
-    fFPTime[ip]=0.;
-    fPlaneCenter[ip]=0.;
-    fPlaneSpacing[ip]=0.;
-    for(UInt_t iPaddle=0;iPaddle<fNPaddle[ip]; ++iPaddle) {
-      fScinHitPaddle[ip][iPaddle]=0;
+  if( *opt != 'I' ) {
+    for(Int_t ip=0;ip<fNPlanes;ip++) {
+      fPlanes[ip]->Clear();
+      fFPTime[ip]=0.;
+      fPlaneCenter[ip]=0.;
+      fPlaneSpacing[ip]=0.;
+      for(UInt_t iPaddle=0;iPaddle<fNPaddle[ip]; ++iPaddle) {
+	fScinHitPaddle[ip][iPaddle]=0;
+      }
     }
   }
   fdEdX.clear();
@@ -668,6 +670,7 @@ void THcHodoscope::ClearEvent()
   fClustPos.clear();
   fThreeScin.clear();
   fGoodScinHitsX.clear();
+  fGoodFlags.clear();
 }
 
 //_____________________________________________________________________________
@@ -675,7 +678,6 @@ Int_t THcHodoscope::Decode( const THaEvData& evdata )
 {
   /*! \brief Decodes raw data and processes raw data into hits for each instance of  THcScintillatorPlane
    *
-   *  - Calls THcHodoscope::ClearEvent
    *  - Reads raw data using THcHitList::DecodeToHitList
    *  - If one wants to subtract pedestals (assumed to be a set of data at beginning of run)
    *    + Must define "Pedestal_event" cut in the cuts definition file
@@ -686,7 +688,6 @@ Int_t THcHodoscope::Decode( const THaEvData& evdata )
    *
    *
    */
-  ClearEvent();
   // Get the Hall C style hitlist (fRawHitList) for this event
   Bool_t present = kTRUE;	// Suppress reference time warnings
   if(fPresentP) {		// if this spectrometer not part of trigger
@@ -977,11 +978,13 @@ Int_t THcHodoscope::CoarseProcess( TClonesArray& tracks )
 
   //  fDumpOut << " ntrack =  " << ntracks  << endl;
 
-  if (tracks.GetLast()+1 > 0 ) {
+  if (ntracks > 0 ) {
 
     // **MAIN LOOP: Loop over all tracks and get corrected time, tof, beta...
     vector<Double_t> nPmtHit(ntracks);
     vector<Double_t> timeAtFP(ntracks);
+    fdEdX.reserve(ntracks);
+    fGoodFlags.reserve(ntracks);
     for ( Int_t itrack = 0; itrack < ntracks; itrack++ ) { // Line 133
       nPmtHit[itrack]=0;
       timeAtFP[itrack]=0;
@@ -996,10 +999,15 @@ Int_t THcHodoscope::CoarseProcess( TClonesArray& tracks )
 	fSumPlaneTime[ip] = 0.;
       }
       std::vector<Double_t> dedx_temp;
-      fdEdX.push_back(dedx_temp); // Create array of dedx per hit
       std::vector<std::vector<GoodFlags> > goodflagstmp1;
+      goodflagstmp1.reserve(fNumPlanesBetaCalc);
+#if __cplusplus >= 201103L
+      fdEdX.push_back(std::move(dedx_temp)); // Create array of dedx per hit
+      fGoodFlags.push_back(std::move(goodflagstmp1));
+#else
+      fdEdX.push_back(dedx_temp); // Create array of dedx per hit
       fGoodFlags.push_back(goodflagstmp1);
-
+#endif
       Int_t nFPTime = 0;
       Double_t betaChiSq = -3;
       Double_t beta = 0;
@@ -1030,8 +1038,12 @@ Int_t THcHodoscope::CoarseProcess( TClonesArray& tracks )
       for(Int_t ip = 0; ip < fNumPlanesBetaCalc; ip++ ) {
 
 	std::vector<GoodFlags> goodflagstmp2;
+	goodflagstmp2.reserve(fNScinHits[ip]);
+#if __cplusplus >= 201103L
+	fGoodFlags[itrack].push_back(std::move(goodflagstmp2));
+#else
 	fGoodFlags[itrack].push_back(goodflagstmp2);
-
+#endif
 	fNScinHits[ip] = fPlanes[ip]->GetNScinHits();
 	TClonesArray* hodoHits = fPlanes[ip]->GetHits();
 
@@ -1170,16 +1182,20 @@ Int_t THcHodoscope::CoarseProcess( TClonesArray& tracks )
       }
 
       //---------------------------------------------------------------------------------------------
-      // ---------------------- Scond loop over scint. hits in a plane ------------------------------
+      // ---------------------- Second loop over scint. hits in a plane -----------------------------
       //---------------------------------------------------------------------------------------------
+ 
+      fdEdX[itrack].reserve(nhits);
+      fTOFCalc.reserve(nhits);
       for(Int_t ih=0; ih < nhits; ih++) {
 	THcHodoHit *hit = fTOFPInfo[ih].hit;
 	Int_t iphit = fTOFPInfo[ih].hitNumInPlane;
 	Int_t ip = fTOFPInfo[ih].planeIndex;
 	//         fDumpOut << " looping over hits = " << ih << " plane = " << ip+1 << endl;
-	GoodFlags flags;
 	// Flags are used by THcHodoEff
-	fGoodFlags[itrack][ip].push_back(flags);
+	fGoodFlags[itrack][ip].reserve(nhits);
+	fGoodFlags[itrack][ip].push_back(GoodFlags());
+	assert( iphit >= 0 && (size_t)iphit < fGoodFlags[itrack][ip].size() );
 	fGoodFlags[itrack][ip][iphit].onTrack = kFALSE;
 	fGoodFlags[itrack][ip][iphit].goodScinTime = kFALSE;
 	fGoodFlags[itrack][ip][iphit].goodTdcNeg = kFALSE;
@@ -1187,6 +1203,7 @@ Int_t THcHodoscope::CoarseProcess( TClonesArray& tracks )
 
 	fTOFCalc.push_back(TOFCalc());
 	// Do we set back to false for each track, or just once per event?
+	assert( ih >= 0 && (size_t)ih < fTOFCalc.size() );
 	fTOFCalc[ih].good_scin_time = kFALSE;
 	// These need a track index too to calculate efficiencies
 	fTOFCalc[ih].good_tdc_pos = kFALSE;
@@ -1285,6 +1302,7 @@ Int_t THcHodoscope::CoarseProcess( TClonesArray& tracks )
 	    }
 
 	    fdEdX[itrack].push_back(0.0);
+	    assert( fNScinHit[itrack] > 0 && (size_t)fNScinHit[itrack] < fdEdX[itrack].size()+1 );
 
 	    // --------------------------------------------------------------------------------------------
 	    if ( fTOFCalc[ih].good_tdc_pos ){
diff --git a/src/THcHodoscope.h b/src/THcHodoscope.h
index 217644c71ccc607f92b21efaba53758d04300f76..25635c6c6d6c56f5be54483077abeb23a4426bb4 100644
--- a/src/THcHodoscope.h
+++ b/src/THcHodoscope.h
@@ -43,6 +43,7 @@ public:
 
   virtual Int_t      Decode( const THaEvData& );
   virtual EStatus    Init( const TDatime& run_time );
+  virtual void       Clear( Option_t* opt="" );
 
   virtual Int_t      CoarseProcess( TClonesArray& tracks );
   virtual Int_t      FineProcess( TClonesArray& tracks );
@@ -340,9 +341,8 @@ protected:
     Int_t hitNumInPlane;
     THcHodoHit *hit;
     TOFPInfo () : onTrack(kFALSE), keep_pos(kFALSE), keep_neg(kFALSE),
-      time_pos(-99.0), time_neg(-99.0),
-
-scin_pos_time(0.0), scin_neg_time(0.0) {}
+		  time_pos(-99.0), time_neg(-99.0), scin_pos_time(0.0),
+		  scin_neg_time(0.0) {}
   };
   std::vector<TOFPInfo> fTOFPInfo;
 
@@ -380,11 +380,12 @@ scin_pos_time(0.0), scin_neg_time(0.0) {}
     Bool_t goodScinTime;
     Bool_t goodTdcNeg;
     Bool_t goodTdcPos;
+    GoodFlags() : onTrack(false), goodScinTime(false),
+		  goodTdcNeg(false), goodTdcPos(false) {}
   };
   std::vector<std::vector<std::vector<GoodFlags> > > fGoodFlags;
   //
 
-  void           ClearEvent();
   void           DeleteArrays();
   virtual Int_t  ReadDatabase( const TDatime& date );
   virtual Int_t  DefineVariables( EMode mode = kDefine );