diff --git a/src/THcExtTarCor.cxx b/src/THcExtTarCor.cxx
index a4599db95016fcc34933fe8d5127d8adbd077859..9cf2fd38371efe7ac878e72237c8af0b76c7d7ff 100644
--- a/src/THcExtTarCor.cxx
+++ b/src/THcExtTarCor.cxx
@@ -138,7 +138,7 @@ Int_t THcExtTarCor::Process( const THaEvData& )
     THaTrack* theTrack = static_cast<THaTrack*>( tracks->At(i) );
     if( theTrack == spectro->GetGoldenTrack() ) {
       // Calculate corrections & recalculate ,,,track parameters
-      Double_t x_tg = -vertex[1]+pointing_off[0]; // units of cm, beam position in spectrometer coordinate system
+      Double_t x_tg = -vertex[1]-pointing_off[0]; // units of cm, beam position in spectrometer coordinate system
       spectro->CalculateTargetQuantities(theTrack,x_tg,xptar,ytar,yptar,delta);
       p  = spectro->GetPcentral() * ( 1.0+delta );
       spectro->TransportToLab( p, xptar, yptar, pvect );
diff --git a/src/THcReactionPoint.cxx b/src/THcReactionPoint.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..b37e2b3c5d2de7c2bf8bbe038662452cbfe946a8
--- /dev/null
+++ b/src/THcReactionPoint.cxx
@@ -0,0 +1,119 @@
+//*-- Author :    Ole Hansen   13-Mar-03
+
+#include "THcReactionPoint.h"
+#include "THaSpectrometer.h"
+#include "THaTrack.h"
+#include "THaBeam.h"
+#include "TMath.h"
+#include <cstring>
+#include <cstdio>
+#include <cstdlib>
+#include <iostream>
+#include <fstream>
+
+
+using namespace std;
+
+ClassImp(THcReactionPoint)
+
+//_____________________________________________________________________________
+THcReactionPoint::THcReactionPoint( const char* name, const char* description,
+				    const char* spectro, const char* beam ) :
+  THaPhysicsModule(name,description), fSpectroName(spectro), 
+  fBeamName(beam), fSpectro(NULL), fBeam(NULL)
+{
+  // Normal constructor.
+
+}
+
+//_____________________________________________________________________________
+THcReactionPoint::~THcReactionPoint()
+{
+  // Destructor
+
+  DefineVariables( kDelete );
+}
+
+//_____________________________________________________________________________
+void THcReactionPoint::Clear( Option_t* opt )
+{
+  // Clear all event-by-event variables.
+  
+  THaPhysicsModule::Clear(opt);
+  VertexClear();
+}
+
+//_____________________________________________________________________________
+Int_t THcReactionPoint::DefineVariables( EMode mode )
+{
+  // Define/delete analysis variables
+
+  if( mode == kDefine && fIsSetup ) return kOK;
+  fIsSetup = ( mode == kDefine );
+
+  return DefineVarsFromList( THaVertexModule::GetRVarDef(), mode );
+}
+
+//_____________________________________________________________________________
+THaAnalysisObject::EStatus THcReactionPoint::Init( const TDatime& run_time )
+{
+  // Initialize the module.
+  // Locate the spectrometer apparatus named in fSpectroName and save
+  // pointer to it.
+
+  // Standard initialization. Calls this object's DefineVariables().
+  if( THaPhysicsModule::Init( run_time ) != kOK )
+    return fStatus;
+
+  fSpectro = static_cast<THaSpectrometer*>
+    ( FindModule( fSpectroName.Data(), "THaSpectrometer"));
+  if( !fSpectro )
+    return fStatus;
+
+  if( fBeamName.Length() > 0 )
+    fBeam = static_cast<THaBeam*>( FindModule( fBeamName.Data(), "THaBeam") );
+  
+  return fStatus;
+}
+
+//_____________________________________________________________________________
+Int_t THcReactionPoint::Process( const THaEvData& )
+{
+  // Calculate the vertex coordinates.
+
+  if( !IsOK() ) return -1;
+
+  Int_t ntracks = fSpectro->GetNTracks();
+  if( ntracks == 0 ) return 0;
+
+  TClonesArray* tracks = fSpectro->GetTracks();
+  if( !tracks ) return -2;
+
+  TVector3 beam_org, beam_ray( 0.0, 0.0, 1.0 );
+  if( fBeam ) {
+    beam_org = fBeam->GetPosition();
+    beam_ray = fBeam->GetDirection();
+  }
+  TVector3 v; 
+
+  for( Int_t i = 0; i<ntracks; i++ ) {
+    THaTrack* theTrack = static_cast<THaTrack*>( tracks->At(i) );
+    // Ignore junk tracks
+    if( !theTrack || !theTrack->HasTarget() ) 
+      continue;  
+    TVector3 pointing_off=fSpectro->GetPointingOffset();
+    Double_t costheta=TMath::Cos(fSpectro->GetThetaSph());
+    Double_t sintheta=TMath::Cos(fSpectro->GetPhiSph())*TMath::Sin(fSpectro->GetThetaSph());
+    Double_t ytar_off=theTrack->GetTY()+pointing_off(1);
+    Double_t yptar = theTrack->GetTPhi();
+    Double_t ztarg=(ytar_off-beam_org(0)*(costheta-yptar*sintheta))/(-sintheta-yptar*costheta);
+    v.SetXYZ(beam_org(0),beam_org(1),ztarg);
+    theTrack->SetVertex(v);
+    if( theTrack == fSpectro->GetGoldenTrack() ) {
+      fVertex = theTrack->GetVertex();
+       fVertexOK = kTRUE;
+    }
+   }
+  return 0;
+}
+  
diff --git a/src/THcReactionPoint.h b/src/THcReactionPoint.h
new file mode 100644
index 0000000000000000000000000000000000000000..d4d1e5263454f03951c73dfe5b17ca59007003df
--- /dev/null
+++ b/src/THcReactionPoint.h
@@ -0,0 +1,55 @@
+#ifndef ROOT_THcReactionPoint
+#define ROOT_THcReactionPoint
+
+//////////////////////////////////////////////////////////////////////////
+//
+// THcReactionPoint
+//
+//////////////////////////////////////////////////////////////////////////
+
+#include "THaPhysicsModule.h"
+#include "THaVertexModule.h"
+#include "TString.h"
+
+class THaSpectrometer;
+class THaBeam;
+
+class THcReactionPoint : public THaPhysicsModule, public THaVertexModule {
+  
+public:
+  THcReactionPoint( const char* name, const char* description,
+		    const char* spectro="", const char* beam="" );
+  virtual ~THcReactionPoint();
+  
+  virtual void      Clear( Option_t* opt="" );
+
+  virtual EStatus   Init( const TDatime& run_time );
+  virtual Int_t     Process( const THaEvData& );
+          void      SetSpectrometer( const char* name );
+          void      SetBeam( const char* name );
+
+protected:
+
+  TString                 fSpectroName;  // Name of spectrom. to consider
+  TString                 fBeamName;     // Name of beam position apparatus
+  THaSpectrometer*        fSpectro;      // Pointer to spectrometer object
+  THaBeam*                fBeam;         // Pointer to beam position apparatus
+
+  virtual Int_t DefineVariables( EMode mode = kDefine );
+
+  ClassDef(THcReactionPoint,0)   //Single arm track-beam vertex module
+};
+
+//_________ inlines __________________________________________________________
+inline 
+void THcReactionPoint::SetSpectrometer( const char* name ) {
+  fSpectroName = name; 
+}
+
+//_____________________________________________________________________________
+inline
+void THcReactionPoint::SetBeam( const char* name ) {
+  fBeamName = name; 
+}
+
+#endif