Index: external/TrackCovariance/ObsTrk.cc
===================================================================
--- external/TrackCovariance/ObsTrk.cc	(revision b750b0a794794673ed5b2468f10e215307d06a20)
+++ external/TrackCovariance/ObsTrk.cc	(revision 7bca620d8806cdb79431d2e6f5507261fe714df3)
@@ -74,8 +74,10 @@
 	fCovILC.ResizeTo(5, 5);
 	fGenPar = XPtoPar(fGenX, fGenP, Q);
+	fGenParMm = ParToMm(fGenPar);
 	fGenParACTS = ParToACTS(fGenPar);
 	fGenParILC = ParToILC(fGenPar);
 	//
 	fObsPar = GenToObsPar(fGenPar);
+	fObsParMm = ParToMm(fObsPar);
 	fObsParACTS = ParToACTS(fObsPar);
 	fObsParILC = ParToILC(fObsPar);
@@ -83,4 +85,5 @@
 	fObsP = ParToP(fObsPar);
 	fObsQ = ParToQ(fObsPar);
+	fCovMm = CovToMm(fCov);
 	fCovACTS = CovToACTS(fObsPar, fCov);
 	fCovILC = CovToILC(fCov);
Index: external/TrackCovariance/VertexFit.cc
===================================================================
--- external/TrackCovariance/VertexFit.cc	(revision b750b0a794794673ed5b2468f10e215307d06a20)
+++ external/TrackCovariance/VertexFit.cc	(revision 7bca620d8806cdb79431d2e6f5507261fe714df3)
@@ -17,5 +17,5 @@
 {
 	fNtr = 0;
-	fRold = -1.0;
+	fRstart = -1.0;
 	fVtxDone = kFALSE;
 	fVtxCst = kFALSE;
@@ -31,5 +31,5 @@
 {
 	fNtr = Ntr;
-	fRold = -1.0;
+	fRstart = -1.0;
 	fVtxDone = kFALSE;
 	fVtxCst = kFALSE;
@@ -55,5 +55,5 @@
 {
 	fNtr = Ntr;
-	fRold = -1.0;
+	fRstart = -1.0;
 	fVtxDone = kFALSE;
 	fVtxCst = kFALSE;
@@ -220,14 +220,22 @@
 	std::vector<TVectorD*> x0i;				// Tracks at ma
 	std::vector<TVectorD*> ni;				// Track derivative wrt phase
-	std::vector<TMatrixDSym*> Ci;			// Position error matrix at fixed phase
+	std::vector<TMatrixDSym*> Ci;				// Position error matrix at fixed phase
 	std::vector<TVectorD*> wi;				// Ci*ni
+	std::vector<Double_t> s_in;				// Starting phase
+	//
+	// 
 	//
 	// Track loop
 	for (Int_t i = 0; i < fNtr; i++)
 	{
-		Double_t s = 0.;
 		TVectorD par = *fPar[i];
 		TMatrixDSym Cov = *fCov[i];
-		x0i.push_back(new TVectorD(Fill_x0(par)));
+		Double_t s = 0.;
+		// Case when starting radius is provided
+		if(fRstart > TMath::Abs(par(0))){
+			s = 2.*TMath::ASin(par(2)*TMath::Sqrt((fRstart*fRstart-par(0)*par(0))/(1.+2.*par(2)*par(0))));
+		}
+		//
+		x0i.push_back(new TVectorD(Fill_x(par, s)));
 		ni.push_back(new TVectorD(derXds(par, s)));
 		TMatrixD A = derXdPar(par, s);
@@ -235,4 +243,5 @@
 		TMatrixDSym Cinv = RegInv(*Ci[i]);
 		wi.push_back(new TVectorD(Cinv * (*ni[i])));
+		s_in.push_back(s);
 	}
 	//std::cout << "Vtx init completed. fNtr = "<<fNtr << std::endl;
@@ -262,5 +271,5 @@
 	for (Int_t i = 0; i < fNtr; i++){
 		Double_t si = Dot(*wi[i], fXv - (*x0i[i])) / Ci[i]->Similarity(*wi[i]);
-		ffi.push_back(si);
+		ffi.push_back(si+s_in[i]);
 		//TVectorD xvi = Fill_x(*fPar[i],si);
 		//std::cout << "Fast vertex "<<i<<": xvi = "<<xvi(0)<<", "<<xvi(1)<<", "<<xvi(2) 
@@ -280,4 +289,5 @@
 	Ci.clear(); 
 	wi.clear();
+	s_in.clear();
 }
 //
@@ -402,5 +412,5 @@
 	//
 	fVtxDone = kTRUE;		// Set fit completion flag
-	fRold = TMath::Sqrt(fXv(0)*fXv(0) + fXv(1)*fXv(1));	// Store fit 
+	//fRstart = TMath::Sqrt(fXv(0)*fXv(0) + fXv(1)*fXv(1));	// Store fit 
 	//std::cout << "Found vertex " << fXv(0) << ", " << fXv(1) << ", " << fXv(2) 
 	//	<< ", after "<<Ntry<<" iterations"<<std::endl;
Index: external/TrackCovariance/VertexFit.h
===================================================================
--- external/TrackCovariance/VertexFit.h	(revision b750b0a794794673ed5b2468f10e215307d06a20)
+++ external/TrackCovariance/VertexFit.h	(revision 7bca620d8806cdb79431d2e6f5507261fe714df3)
@@ -36,5 +36,5 @@
 	// Results
 	Bool_t fVtxDone;			// Flag vertex fit completed
-	Double_t fRold;				// Current value of vertex radius
+	Double_t fRstart;			// Starting value of vertex radius (0 = none)
 	TVectorD fXv;				// Found vertex
 	TMatrixDSym fcovXv;			// Vertex covariance
@@ -83,6 +83,7 @@
 	// Handle tracks/constraints
 	void AddVtxConstraint(TVectorD xv, TMatrixDSym cov);	// Add gaussian vertex constraint
-	void AddTrk(TVectorD *par, TMatrixDSym *Cov);				// Add track to input list
-	void RemoveTrk(Int_t iTrk);								// Remove iTrk track
+	void AddTrk(TVectorD *par, TMatrixDSym *Cov);		// Add track to input list
+	void RemoveTrk(Int_t iTrk);				// Remove iTrk track
+	void SetStartR(Double_t R) { fRstart = R; };		// Set starting radius
 	//
 };
