diff --git a/src/THcDC.cxx b/src/THcDC.cxx
index a5c8036ade374d5aa7ac73cc6d11d29b212169ac..11eeca664b139eff5a558f3c436658df145e0b0d 100644
--- a/src/THcDC.cxx
+++ b/src/THcDC.cxx
@@ -83,11 +83,17 @@ THcDC::THcDC(
 
   fNChamHits = 0;
   fPlaneEvents = 0;
+
+  //The version defaults to 0 (old HMS style). 1 is new HMS style and 2 is SHMS style.
+  fVersion = 0;
 }
 
 //_____________________________________________________________________________
 void THcDC::Setup(const char* name, const char* description)
 {
+
+	Bool_t optional = true;
+
   // Create the chamber and plane objects using parameters.
   static const char* const here = "Setup";
 
@@ -116,6 +122,7 @@ void THcDC::Setup(const char* name, const char* description)
     {"dc_tdc_time_per_channel",&fNSperChan, kDouble},
     {"dc_wire_velocity",&fWireVelocity,kDouble},
     {"dc_plane_names",&planenamelist, kString},
+	{"dc_version", &fVersion, kInt, 0, optional},
     {0}
   };
 
diff --git a/src/THcDC.h b/src/THcDC.h
index 744be7267f01c5985151af2a2560443b3852ef6b..097ca472d200092473e18d675ee79ec58fefd4dd 100644
--- a/src/THcDC.h
+++ b/src/THcDC.h
@@ -63,6 +63,7 @@ public:
   Int_t GetDriftTimeSign(Int_t plane) const { return fDriftTimeSign[plane-1];}
   Int_t GetReadoutLR(Int_t plane) const { return fReadoutLR[plane-1];}
   Int_t GetReadoutTB(Int_t plane) const { return fReadoutTB[plane-1];}
+  Int_t GetVersion() const {return fVersion;}
 
 
   Double_t GetPlaneTimeZero(Int_t plane) const { return fPlaneTimeZero[plane-1];}
@@ -128,6 +129,7 @@ protected:
   Double_t fYtTrCriterion;
   Double_t fXptTrCriterion;
   Double_t fYptTrCriterion;
+  Int_t fVersion;
 
   // Each of these will be dimensioned with the number of chambers
   Double_t* fXCenter;
diff --git a/src/THcDCHit.h b/src/THcDCHit.h
index 8a2b0e14a5c7328d545492b0d1ccf764b7f14f40..8e880cdba7fc27c58c221852a01d3fd878d7d3a5 100644
--- a/src/THcDCHit.h
+++ b/src/THcDCHit.h
@@ -56,59 +56,107 @@ public:
   Int_t    GetChamberNum() const { return fWirePlane->GetChamberNum(); }
   void     SetCorrectedStatus(Int_t c) { fCorrected = c; }
 
-  //Set this correctly
   Int_t GetReadoutSide() {
 	  Int_t pln = fWirePlane->GetPlaneNum();
 	  Int_t tb = fWirePlane->GetReadoutTB();
 	  Int_t wn = fWire->GetNum();
-
-	  //check if x board
-	  if ((pln>=3 && pln<=4) || (pln>=9 && pln<=10)){
-		  if (tb>0){
-			  if (wn < 49){
-				  fReadoutSide = 4;
+	  Int_t version = fWirePlane->GetVersion();
+
+	  //if new HMS
+	  if (version == 1){
+		  if ((pln>=3 && pln<=4) || (pln>=9 && pln<=10)){
+			  if (tb>0){
+				  if (wn < 60){
+					  fReadoutSide = 2;
+				  }
+				  else {
+					  fReadoutSide = 4;
+				  }
 			  }
 			  else {
-				  fReadoutSide = 2;
+				  if (wn < 44){
+					  fReadoutSide = 4;
+				  }
+				  else {
+					  fReadoutSide = 2;
+				  }
 			  }
 		  }
-		  else {
-			  if (wn < 33){
-				  fReadoutSide = 2;
+		  else{
+			  if (tb>0){
+				  if (wn < 51){
+					  fReadoutSide = 2;
+				  }
+				  else if (wn >= 51 && wn <= 64){
+					  fReadoutSide = 1;
+				  }
+				  else {
+					  fReadoutSide =4;
+				  }
 			  }
 			  else {
-				  fReadoutSide = 4;
+				  if (wn < 33){
+					  fReadoutSide = 4;
+				  }
+				  else if (wn >=33 && wn<=46){
+					  fReadoutSide = 1;
+				  }
+				  else {
+					  fReadoutSide = 2;
+				  }
 			  }
 		  }
 	  }
-	  //else is u board
-	  else{
-		  if (tb>0){
-		  	if (wn < 41){
-		  		fReadoutSide = 4;
-		  	}
-		  	else if (wn >= 41 && wn <= 63){
-		  		fReadoutSide = 3;
-		  	}
-		  	else if (wn >=64 && wn <=69){
-		  		fReadoutSide = 1;
-		  	}
-		  	else {
-		  		fReadoutSide = 2;
-		  	}
-		  }
-		  else {
-			  if (wn < 39){
-				  fReadoutSide = 2;
+
+	  else{//appplies SHMS DC configuration
+		  //check if x board
+		  if ((pln>=3 && pln<=4) || (pln>=9 && pln<=10)){
+			  if (tb>0){
+				  if (wn < 49){
+					  fReadoutSide = 4;
+				  }
+				  else {
+					  fReadoutSide = 2;
+				  }
 			  }
-			  else if (wn >=39 && wn<=44){
-				  fReadoutSide = 1;
+			  else {
+				  if (wn < 33){
+					  fReadoutSide = 2;
+				  }
+				  else {
+					  fReadoutSide = 4;
+				  }
 			  }
-			  else if (wn>=45 && wn<=67){
-				  fReadoutSide = 3;
+		  }
+		  //else is u board
+		  else{
+			  if (tb>0){
+				  if (wn < 41){
+					  fReadoutSide = 4;
+				  }
+				  else if (wn >= 41 && wn <= 63){
+					  fReadoutSide = 3;
+				  }
+				  else if (wn >=64 && wn <=69){
+					  fReadoutSide = 1;
+				  }
+				  else {
+					  fReadoutSide = 2;
+				  }
 			  }
 			  else {
-				  fReadoutSide = 4;
+				  if (wn < 39){
+					  fReadoutSide = 2;
+				  }
+				  else if (wn >=39 && wn<=44){
+					  fReadoutSide = 1;
+				  }
+				  else if (wn>=45 && wn<=67){
+					  fReadoutSide = 3;
+				  }
+				  else {
+					  fReadoutSide = 4;
+				  }
 			  }
 		  }
 	  }
diff --git a/src/THcDriftChamber.cxx b/src/THcDriftChamber.cxx
index 0f27508ac2c1ef38c1eab1609f6c1dc69a6f571d..0062a5e66688a55695e5471e59c987990ec7a63c 100644
--- a/src/THcDriftChamber.cxx
+++ b/src/THcDriftChamber.cxx
@@ -144,6 +144,7 @@ Int_t THcDriftChamber::ReadDatabase( const TDatime& date )
     {Form("dc_%d_zpos",fChamberNum), &fZPos, kDouble},
     {0}
   };
+
   fRemove_Sppt_If_One_YPlane = 0; // Default
   fStubMaxXPDiff = 0.05;	  // The HMS default.  Not used for SOS.
   gHcParms->LoadParmValues((DBRequest*)&list,prefix);
@@ -912,12 +913,13 @@ void THcDriftChamber::CorrectHitTimes()
 				 x*plane->GetReadoutCorr()/fWireVelocity;
 
 		  // This applies the wire velocity correction for new SHMS chambers --hszumila, SEP17
-		  if (abs(plane->GetReadoutLR())==1){
+		  THcDC* fParent;
+		  fParent = (THcDC*) GetParent();
+		  Int_t version = fParent->GetVersion();
+		  if (version!= 0){
 			  Int_t pln = hit->GetPlaneNum();
 			  Int_t readoutSide = hit->GetReadoutSide();
 
-			  THcDC* fParent;
-			  fParent = (THcDC*) GetParent();
 			  Double_t posn = hit->GetPos();
 			  //The following values are determined from param file as permutations on planes 5 and 10
 			  Int_t readhoriz = plane->GetReadoutLR();
diff --git a/src/THcDriftChamberPlane.cxx b/src/THcDriftChamberPlane.cxx
index 863cecd2b76e5d557de42b6c2a781eef6dc66efd..75506a94a64860b4b18878e21ecdda47ffad1a5f 100644
--- a/src/THcDriftChamberPlane.cxx
+++ b/src/THcDriftChamberPlane.cxx
@@ -102,6 +102,9 @@ Int_t THcDriftChamberPlane::ReadDatabase( const TDatime& date )
     {"_using_tzero_per_wire", &fUsingTzeroPerWire, kInt,0,1},
     {0}
   };
+
+
+
   gHcParms->LoadParmValues((DBRequest*)&list,prefix);
 
   Double_t *DriftMap = new Double_t[NumDriftMapBins];
@@ -131,6 +134,7 @@ Int_t THcDriftChamberPlane::ReadDatabase( const TDatime& date )
   fDriftTimeSign = fParent->GetDriftTimeSign(fPlaneNum);
   fReadoutLR = fParent->GetReadoutLR(fPlaneNum);
   fReadoutTB = fParent->GetReadoutTB(fPlaneNum);
+  fVersion = fParent->GetVersion();
 
   fNSperChan = fParent->GetNSperChan();
 
diff --git a/src/THcDriftChamberPlane.h b/src/THcDriftChamberPlane.h
index 35d3a68f41d908f2c1091f6c295f278443deee7e..85ef9accf27db6e16f01dc6bdd60aac955d977e7 100644
--- a/src/THcDriftChamberPlane.h
+++ b/src/THcDriftChamberPlane.h
@@ -71,6 +71,7 @@ public:
   Double_t     CalcWireFromPos(Double_t pos);
   Int_t        GetReadoutLR() const { return fReadoutLR;}
   Int_t        GetReadoutTB() const { return fReadoutTB;}
+  Int_t        GetVersion() const {return fVersion;}
 
 protected:
 
@@ -79,6 +80,7 @@ protected:
   TClonesArray* fHits;
   TClonesArray* fWires;
 
+  Int_t fVersion;
   Int_t fWireOrder;
   Int_t fPlaneNum;
   Int_t fPlaneIndex;		/* Index of this plane within it's chamber */