diff --git a/src/THcRawDCHit.cxx b/src/THcRawDCHit.cxx
index 1686664c0f4f9ed6a8199a3bfa61ce2e4dfff1a6..b31021cbbdf4b3d95263f267d9f962090d4f63a9 100644
--- a/src/THcRawDCHit.cxx
+++ b/src/THcRawDCHit.cxx
@@ -1,17 +1,19 @@
 /** \class  THcRawDCHit
     \ingroup DetSupport
 
- Class representing for drift chamber wire (or other device with      
-   a single multihit TDC channel per detector element                 
+ Class representing for drift chamber wire (or other device with
+   a single multihit TDC channel per detector element
 
 */
 
 #include "THcRawDCHit.h"
+#include <stdexcept>
 
 using namespace std;
 
 
 void THcRawDCHit::SetData(Int_t signal, Int_t data) {
+  if (fNHits >= fMaxNSamplesTDC) {throw std::runtime_error("Too many samples for `THcRawDCHit` TDC!");}
   fTDC[fNHits++] = data;
 }
 
@@ -114,4 +116,3 @@ THcRawDCHit& THcRawDCHit::operator=( const THcRawDCHit& rhs )
 
 //////////////////////////////////////////////////////////////////////////
 ClassImp(THcRawDCHit)
-
diff --git a/src/THcRawDCHit.h b/src/THcRawDCHit.h
index d323e90ef4ae187f287b4199f44e079bc84cf13f..7b30abe446f69876dd794fe2dcc3e12fbeb06628 100644
--- a/src/THcRawDCHit.h
+++ b/src/THcRawDCHit.h
@@ -3,15 +3,13 @@
 
 #include "THcRawHit.h"
 
-#define MAXHITS 16
-
 class THcRawDCHit : public THcRawHit {
 
 public:
   friend class THcDriftChamberPlane;
   friend class THcDC;
 
-  THcRawDCHit(Int_t plane=0, Int_t counter=0) : THcRawHit(plane, counter), 
+  THcRawDCHit(Int_t plane=0, Int_t counter=0) : THcRawHit(plane, counter),
     fNHits(0), fHasRef{kFALSE} {
   }
   THcRawDCHit& operator=( const THcRawDCHit& );
@@ -31,16 +29,18 @@ public:
   virtual Bool_t  IsSortable () const {return kTRUE; }
   virtual Int_t   Compare(const TObject* obj) const;
 
+  UInt_t GetMaxNSamplesTDC() {return fMaxNSamplesTDC;}
 
 protected:
+  static const UInt_t fMaxNSamplesTDC = 16;
   UInt_t fNHits;
-  Int_t fTDC[MAXHITS];
+  Int_t fTDC[fMaxNSamplesTDC];
   Int_t fReferenceTime;
   Int_t fHasRef;
 
 private:
 
   ClassDef(THcRawDCHit, 0);	// Raw Drift Chamber hit
-};  
+};
 
 #endif
diff --git a/src/THcRawHodoHit.cxx b/src/THcRawHodoHit.cxx
index 3f3d51dc8a84c5064d607936e742d5ec159689c9..5609f4c089f13ea816576987220e49e25c0ca9c3 100644
--- a/src/THcRawHodoHit.cxx
+++ b/src/THcRawHodoHit.cxx
@@ -3,10 +3,10 @@
 
 Raw Hodoscope Hit Info
 
-Class representing a single raw hit for a hodoscope paddle  
-                                                            
- Contains plane, counter and pos/neg adc and tdc values   
-                                                          
+Class representing a single raw hit for a hodoscope paddle
+
+ Contains plane, counter and pos/neg adc and tdc values
+
 
 */
 
@@ -15,6 +15,7 @@ Class representing a single raw hit for a hodoscope paddle
 #include <cstdlib>
 #include <iostream>
 #include <cassert>
+#include <stdexcept>
 
 #include "THcRawHodoHit.h"
 
@@ -22,12 +23,16 @@ using namespace std;
 
 void THcRawHodoHit::SetData(Int_t signal, Int_t data) {
   if(signal==0) {
+    if (fNRawHits[0] >= fMaxNSamplesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC+!");}
     fADC_pos[fNRawHits[0]++] = data;
   } else if (signal==1) {
+    if (fNRawHits[1] >= fMaxNSamplesADC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` ADC-!");}
     fADC_neg[fNRawHits[1]++] = data;
   } else if(signal==2) {
+    if (fNRawHits[2] >= fMaxNSamplesTDC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` TDC+!");}
     fTDC_pos[fNRawHits[2]++] = data;
   } else if (signal==3) {
+    if (fNRawHits[3] >= fMaxNSamplesTDC) {throw std::runtime_error("Too many samples for `THcRawHodoHit` TDC-!");}
     fTDC_neg[fNRawHits[3]++] = data;
   }
 }
@@ -56,7 +61,7 @@ Int_t THcRawHodoHit::GetData(Int_t signal, UInt_t ihit) {
     return(-1);			// Actually should throw an exception
   }
   // We are return -1 as a error, but reference subtracted
-  // time can be negative.  
+  // time can be negative.
   if(fHasRef[signal]) {
     value -= fReferenceTime[signal];
   }
@@ -137,4 +142,3 @@ THcRawHodoHit& THcRawHodoHit::operator=( const THcRawHodoHit& rhs )
 
 //////////////////////////////////////////////////////////////////////////
 ClassImp(THcRawHodoHit)
-
diff --git a/src/THcRawHodoHit.h b/src/THcRawHodoHit.h
index 9df8dc08a23e39a4585bffe80e6ec1f507041499..a6d1480ce69bd94408db2ed7892a1e6e717f2b9e 100644
--- a/src/THcRawHodoHit.h
+++ b/src/THcRawHodoHit.h
@@ -3,8 +3,6 @@
 
 #include "THcRawHit.h"
 
-#define MAXHITS 16
-
 class THcRawHodoHit : public THcRawHit {
 
  public:
@@ -35,22 +33,26 @@ class THcRawHodoHit : public THcRawHit {
   Int_t GetRawData(Int_t signal, UInt_t ihit);
   Int_t GetReference(Int_t signal);
   Bool_t HasReference(Int_t signal);
-  
+
   //  virtual Bool_t  IsSortable () const {return kTRUE; }
   //  virtual Int_t   Compare(const TObject* obj) const;
+  UInt_t GetMaxNSamplesADC() {return fMaxNSamplesADC;}
   Int_t GetADCPos() {return GetData(0, 0);}
   Int_t GetADCNeg() {return GetData(1, 0);}
   Int_t GetTDCPos() {return GetData(2, 0);}
   Int_t GetTDCNeg() {return GetData(3, 0);}
 
+  UInt_t GetMaxNSamplesTDC() {return fMaxNSamplesTDC;}
   Int_t GetTDCPos(UInt_t ihit) {return GetData(2, ihit);}
   Int_t GetTDCNeg(UInt_t ihit) {return GetData(3, ihit);}
 
  protected:
-  Int_t fADC_pos[MAXHITS];
-  Int_t fADC_neg[MAXHITS];
-  Int_t fTDC_pos[MAXHITS];
-  Int_t fTDC_neg[MAXHITS];
+  static const UInt_t fMaxNSamplesADC = 160;
+  static const UInt_t fMaxNSamplesTDC = 16;
+  Int_t fADC_pos[fMaxNSamplesADC];
+  Int_t fADC_neg[fMaxNSamplesADC];
+  Int_t fTDC_pos[fMaxNSamplesTDC];
+  Int_t fTDC_neg[fMaxNSamplesTDC];
   Int_t fReferenceTime[4];
   Bool_t fHasRef[4];
   UInt_t fNRawHits[4];
@@ -58,6 +60,6 @@ class THcRawHodoHit : public THcRawHit {
  private:
 
   ClassDef(THcRawHodoHit, 0);	// Raw Hodoscope hit
-};  
+};
 
 #endif