diff --git a/src/THcDC.cxx b/src/THcDC.cxx
index 624475a984bceaaea80248c6fae037de191fbce4..a81532713316a01a069784fe457a6d63b1c181d5 100644
--- a/src/THcDC.cxx
+++ b/src/THcDC.cxx
@@ -332,7 +332,7 @@ Int_t THcDC::ReadDatabase( const TDatime& date )
     {"dc_central_wire", fCentralWire, kDouble, (UInt_t)fNPlanes},
     {"dc_plane_time_zero", fPlaneTimeZero, kDouble, (UInt_t)fNPlanes},
     {"dc_sigma", fSigma, kDouble, (UInt_t)fNPlanes},
-    {"single_stub",&fSingleStub, kInt},
+    {"single_stub",&fSingleStub, kInt,0,1},
     {"ntracks_max_fp", &fNTracksMaxFP, kInt},
     {"xt_track_criterion", &fXtTrCriterion, kDouble},
     {"yt_track_criterion", &fYtTrCriterion, kDouble},
@@ -348,6 +348,7 @@ Int_t THcDC::ReadDatabase( const TDatime& date )
     {"debugtrackprint", &fdebugtrackprint , kInt},
     {0}
   };
+  fSingleStub=0;
    for(Int_t ip=0; ip<fNPlanes;ip++) {
     fReadoutLR[ip] = 0.0;
     fReadoutTB[ip] = 0.0;
@@ -398,6 +399,7 @@ Int_t THcDC::DefineVariables( EMode mode )
     { "trawhit", "Number of true raw DC hits", "fN_True_RawHits" },
     { "ntrack", "Number of Tracks", "fNDCTracks" },
     { "nsp", "Number of Space Points", "fNSp" },
+    { "track_nsp", "Number of spacepoints in track", "fDCTracks.THcDCTrack.GetNSpacePoints()"},
     { "x", "X at focal plane", "fDCTracks.THcDCTrack.GetX()"},
     { "y", "Y at focal plane", "fDCTracks.THcDCTrack.GetY()"},
     { "xp", "XP at focal plane", "fDCTracks.THcDCTrack.GetXP()"},
@@ -406,7 +408,10 @@ Int_t THcDC::DefineVariables( EMode mode )
     { "y_fp", "Y at focal plane( golden track)", "fY_fp_best"},
     { "xp_fp", "XP at focal plane (golden track)", "fXp_fp_best"},
     { "yp_fp", "YP at focal plane(golden track) ", "fYp_fp_best"},
-    { "chisq", "chisq/dof (golde track) ", "fChisq_best"},
+    { "chisq", "chisq/dof (golden track) ", "fChisq_best"},
+    { "sp1_id", " (golden track) ", "fSp1_ID_best"},
+    { "sp2_id", " (golden track) ", "fSp2_ID_best"},
+    { "gtrack_nsp", " Number of space points in golden track ", "fNsp_best"},
     { "residual", "Residuals", "fResiduals"},
     { "wireHitDid","Wire did have  matched track hit", "fWire_hit_did"},
     { "wireHitShould", "Wire should have matched track hit", "fWire_hit_should"},
@@ -489,6 +494,7 @@ void THcDC::ClearEvent()
   fXp_fp_best=-10000.;
   fYp_fp_best=-10000.;
   fChisq_best=kBig;
+  fNsp_best=0;
   for(UInt_t i=0;i<fNChambers;i++) {
     fChambers[i]->Clear();
   }
@@ -632,7 +638,10 @@ void THcDC::SetFocalPlaneBestTrack(Int_t golden_track_index)
       fY_fp_best=tr1->GetY();
       fXp_fp_best=tr1->GetXP();
       fYp_fp_best=tr1->GetYP();
+      fSp1_ID_best=tr1->GetSp1_ID();
+      fSp2_ID_best=tr1->GetSp2_ID();
       fChisq_best=tr1->GetChisq();
+      fNsp_best=tr1->GetNSpacePoints();
          for (UInt_t ihit = 0; ihit < UInt_t (tr1->GetNHits()); ihit++) {
 	THcDCHit *hit = tr1->GetHit(ihit);
 	Int_t plane = hit->GetPlaneNum() - 1;
@@ -703,7 +712,7 @@ void THcDC::LinkStubs()
   //                  1) loop over all space points as seeds  isp1
   //                  2) Check if this space point is all ready in a track
   //                  3) loop over all succeeding space pointss   isp2
-  //                  4) check if there is a track-criterion match
+  //                  4)  check if there is a track-criterion match
   //                       either add to existing track
   //                       or if there is another point in same chamber
   //                          make a copy containing isp2 rather than
@@ -722,6 +731,7 @@ void THcDC::LinkStubs()
     for(Int_t isp=0;isp<fChambers[ich]->GetNSpacePoints();isp++) {
       fSp.push_back(static_cast<THcSpacePoint*>(spacepointarray->At(isp)));
       fSp[fNSp]->fNChamber = nchamber;
+      fSp[fNSp]->fNChamber_spnum = isp;
       fNSp++;
     }
   }
@@ -732,7 +742,7 @@ void THcDC::LinkStubs()
   Double_t stubminxp = 999999;
   Double_t stubminyp = 999999;
   Int_t stub_tracks[MAXTRACKS];
-  if(!fSingleStub) {
+  if(fSingleStub==0) {
     for(Int_t isp1=0;isp1<fNSp-1;isp1++) { // isp1 is index/id in total list of space points
       THcSpacePoint* sp1 = fSp[isp1];
       Int_t sptracks=0;
@@ -797,10 +807,10 @@ void THcDC::LinkStubs()
 		  THcDCTrack *theDCTrack = new( (*fDCTracks)[fNDCTracks++]) THcDCTrack(fNPlanes);
 		  theDCTrack->AddSpacePoint(sp1);
 		  theDCTrack->AddSpacePoint(sp2);
-		  // Now save the X, Y and XP for the two stubs
-		  // in arrays hx_sp1, hy_sp1, hy_sp1, ... hxp_sp2
-		  // Why not also YP?
-		  // Skip for here.  May be a diagnostic thing
+		  if (sp1->fNChamber==1) theDCTrack->SetSp1_ID(sp1->fNChamber_spnum);
+		  if (sp1->fNChamber==2) theDCTrack->SetSp2_ID(sp1->fNChamber_spnum);
+		  if (sp2->fNChamber==1) theDCTrack->SetSp1_ID(sp2->fNChamber_spnum);
+		  if (sp2->fNChamber==2) theDCTrack->SetSp2_ID(sp2->fNChamber_spnum);
 		  newtrack = 0; // Make no more tracks in this loop
 		  // (But could replace a SP?)
 		} else {
@@ -814,7 +824,6 @@ void THcDC::LinkStubs()
 		for(Int_t itrack=0;itrack<sptracks;itrack++) {
 		  Int_t track=stub_tracks[itrack];
 		  THcDCTrack *theDCTrack = static_cast<THcDCTrack*>( fDCTracks->At(track));
-
 		  Int_t spoint=-1;
 		  Int_t duppoint=0;
 		  for(Int_t isp=0;isp<theDCTrack->GetNSpacePoints();isp++) {
@@ -832,8 +841,10 @@ void THcDC::LinkStubs()
 		  if(!duppoint) {
 		    if(spoint<0) {
 		      theDCTrack->AddSpacePoint(sp2);
+		      if (sp2->fNChamber==1) theDCTrack->SetSp1_ID(sp2->fNChamber_spnum);
+		      if (sp2->fNChamber==2) theDCTrack->SetSp2_ID(sp2->fNChamber_spnum);
 		    } else {
-		      // If there is another point in the same chamber
+		      		      // If there is another point in the same chamber
 		      // in this track create a new track with all the
 		      // same space points except spoint
  		      if(fNDCTracks < MAXTRACKS) {
@@ -842,8 +853,12 @@ void THcDC::LinkStubs()
 			for(Int_t isp=0;isp<theDCTrack->GetNSpacePoints();isp++) {
 			  if(isp!=spoint) {
 			    newDCTrack->AddSpacePoint(theDCTrack->GetSpacePoint(isp));
+		            if (newDCTrack->GetSpacePoint(isp)->fNChamber==1) newDCTrack->SetSp1_ID(theDCTrack->GetSpacePoint(isp)->fNChamber_spnum);
+		            if (newDCTrack->GetSpacePoint(isp)->fNChamber==2) newDCTrack->SetSp2_ID(theDCTrack->GetSpacePoint(isp)->fNChamber_spnum);
 			  } else {
 			    newDCTrack->AddSpacePoint(sp2);
+		            if (sp2->fNChamber==1) newDCTrack->SetSp1_ID(sp2->fNChamber_spnum);
+		            if (sp2->fNChamber==2) newDCTrack->SetSp2_ID(sp2->fNChamber_spnum);
 			  } // End check for dup on copy
 			} // End copy of track
 		      } else {
@@ -856,15 +871,15 @@ void THcDC::LinkStubs()
 		    } // end if on same chamber
 		  } // end if on duplicate point
 		} // end for over tracks with isp1
-	      }
-	    }
+	      } // else newtrack
+	    } // criterion
 	  } // end test on same chamber
 	} // end isp2 loop over new space points
       } // end test on tryflag
     } // end isp1 outer loop over space points
     //
   //
-   } else { // Make track out of each single space point
+  } else { // Make track out of each single space point
     for(Int_t isp=0;isp<fNSp;isp++) {
       if(fNDCTracks<MAXTRACKS) {
 	// Need some constructed t thingy
@@ -879,7 +894,7 @@ void THcDC::LinkStubs()
     }
   }
   ///
-  if (fdebuglinkstubs) {
+if (fdebuglinkstubs) {
      cout << " Number of tracks from link stubs = " << fNDCTracks << endl;
      printf("%s %s \n","Track","Plane Wire ");
      for (UInt_t itrack=0;itrack<fNDCTracks;itrack++) {
diff --git a/src/THcDC.h b/src/THcDC.h
index 43667b8f89b8a20aa4b2205cc784882822ccaced..9420f731e676652d83d3583784036c32cfe78bc8 100644
--- a/src/THcDC.h
+++ b/src/THcDC.h
@@ -120,6 +120,7 @@ protected:
   Int_t fNthits;
   Int_t fN_True_RawHits;
   Int_t fNSp;                   // Number of space points
+  Int_t fNsp_best;                   // Number of space points for gloden track
   Double_t* fResiduals;         //[fNPlanes] Array of residuals
   Double_t* fWire_hit_did;      //[fNPlanes]
   Double_t* fWire_hit_should;   //[fNPlanes]
@@ -173,6 +174,8 @@ protected:
   Double_t fXp_fp_best;
   Double_t fYp_fp_best;
   Double_t fChisq_best;
+  Int_t fSp1_ID_best;
+  Int_t fSp2_ID_best;
  // For accumulating statitics for efficiencies
   Int_t fTotEvents;
   Int_t* fNChamHits;
diff --git a/src/THcSpacePoint.h b/src/THcSpacePoint.h
index b14740eefa15ba79c684674ba2d8e46aad8a450a..5701277c0f2ed214d4d5fd32210de0d6cab62cb9 100644
--- a/src/THcSpacePoint.h
+++ b/src/THcSpacePoint.h
@@ -75,6 +75,7 @@ public:
   // This is the chamber number (1,2), not index (0,1).  Sometime
   // we need figure out how to avoid confusion between number and index.
   Int_t fNChamber;
+  Int_t fNChamber_spnum;
 
 protected: