diff --git a/eic_data.yaml b/eic_data.yaml
index 55c9c3d6b25f3f31744d44afe9652784ebb75508..9104a05e604be712b1144bf3d06fe171b1744f32 100644
--- a/eic_data.yaml
+++ b/eic_data.yaml
@@ -206,15 +206,15 @@ components:
 
   eic::CovDiagXYZT:
     Members:
-      - float xx
-      - float yy
-      - float zz
-      - float tt
+      - double xx
+      - double yy
+      - double zz
+      - double tt
     ExtraCode:
       declaration: "
         CovDiagXYZT() : xx{0}, yy{0}, zz{0}, tt{0} {}\n
-        CovDiagXYZT(float x, float y, float z, float t) : xx{x}, yy{y}, zz{z}, tt{t} {}\n
-        float operator()(unsigned i, unsigned j) const {return (i == j) ? *(&xx + i) : 0.;}\n
+        CovDiagXYZT(double x, double y, double z, double t) : xx{x}, yy{y}, zz{z}, tt{t} {}\n
+        double operator()(unsigned i, unsigned j) const {return (i == j) ? *(&xx + i) : 0.;}\n
         "
 
   eic::CovXYZ:
@@ -245,42 +245,6 @@ components:
 
 datatypes:
 
-  eic::RawTrackerHit:
-    Description : "Raw (digitized) tracker hit"
-    Author : "W.Armstrong"
-    Members:
-      - long long cellID // The detector specific (geometrical) cell id.
-      - int time         // tdc value.
-      - int charge       // adc value
-
-  eic::TrackerHit:
-    Description : "Tracker hit (reconstructed from Raw)"
-    Author : "W.Armstrong"
-    Members :
-      - long long            cellID    // The detector specific (geometrical) cell id.
-      - float                time      // The time of the hit.
-      - float                EDep      // EDep
-      - float                EDepError // error on EDep
-      - eic::VectorXYZ       position  // position
-      - eic::CovDiagXYZ covMatrix // covMatrix
-
-  eic::TrackParameters:
-    Description: "ACTS Track parameters"
-    Author : "W.Armstrong"
-    Members:
-      - double loc0        // loc0      
-      - double loc1        // loc1      
-      - double phi         // phi       
-      - double theta       // theta     
-      - double qOverP      // qOverP    
-      - double time        // time      
-      - double err_loc0    // err_loc0  
-      - double err_loc1    // err_loc1  
-      - double err_phi     // err_phi   
-      - double err_theta   // err_theta 
-      - double err_qOverP  // err_qOverP
-      - double err_time    // err_time  
-
   eic::Vertex:
       Description: "EIC vertex"
       Author : "W.Armstrong"
@@ -404,6 +368,7 @@ datatypes:
       - eic::VectorXYZ    local             // The local position of the hit in detector coordinates [mm].
       - eic::VectorXYZ    dimension         // The dimension information of the cell [mm].
 
+
   ## ==========================================================================
   ## Clustering
   ## ==========================================================================
@@ -462,3 +427,57 @@ datatypes:
       - float             radius            // Shower radius [mm]
       - float             skewness          // Skewness of hits distribution
       - eic::VectorXYZ    position          // Global center position. [mm]
+
+  ## ==========================================================================
+  ## Tracking
+  ## ==========================================================================
+  
+  eic::RawTrackerHit:
+    Description: "Raw (digitized) tracker hit"
+    Author: "W. Armstrong, S. Joosten"
+    Members:
+      - int64_t           cellID            // The detector specific (geometrical) cell id.
+      - eic::Index        ID                // unique ID for this hit
+      - int32_t           time              // tdc value.
+      - int32_t           charge            // adc value
+
+  eic::TrackerHit:
+    Description: "Tracker hit (reconstructed from Raw)"
+    Author: "W. Armstrong, S. Joosten"
+    Members:
+      - int64_t           cellID            // The detector specific (geometrical) cell id.
+      - eic::Index        ID                // unique ID for this hit
+      - eic::VectorXYZT   position          // Hit (cell) position and time [mm, ns]
+      - eic::CovDiagXYZT  covMatrix         // Covariance Matrix
+      - float             edep              // Energy deposit in this hit [GeV]
+      - float             edepError         // Error on the energy deposit [GeV]
+    ConstExtraCode:
+      declaration: "
+        double time() const {return position().t;}\n
+      "
+
+    ## Here's a stub for a prototrack setup. If this is all we use we should
+    ## probably just use protocluster instead, but I assume there will be other
+    ## members we'll need to communicate
+    ## eic::ProtoTrack:
+    ##   Description: "Proto track info"
+    ##   Author: "S. Joosten"
+    ##   Members:
+    ##     eic::Index       hitID             // Unique hit identifier
+    ##     eic::Index       trackID           // link to the associated track
+    ##     eic::Weight      weight             // prototrack weight, in case we share pixels [0-1]
+  
+  eic::TrackParameters:
+    Description: "ACTS Bound Track parameters"
+    Author: "W. Armstrong, S. Joosten"
+    Members:
+      - eic::Index        ID                // unique ID for this track 
+      - eic::FloatPair    loc               // tracking location
+      - eic::FloatPair    locError          // error on the location
+      - eic::Direction    direction         // track direction (theta, phi) [rad, 0-pi and -pi->pi]
+      - eic::Direction    directionError    // error on the direction [rad]
+      - float             qOverP            // [e/GeV]
+      - float             qOverPError       // error on qOverP
+      - float             time              // track time [ns]    
+      - float             timeError         // error on the time
+
diff --git a/source/include/eicd/helpers.h b/source/include/eicd/helpers.h
index 0fb2e9d6d31ed0760c029f6ccc5d4d9469b6ea1d..07df974d8628d56dd2625010313b4171461890bf 100644
--- a/source/include/eicd/helpers.h
+++ b/source/include/eicd/helpers.h
@@ -32,9 +32,9 @@ namespace eicd::helpers {
         return ROOT::Math::PxPyPzMVector{};
       }
       const double p  = fabs(1. / track.qOverP);
-      const double px = p * cos(track.phi) * sin(track.theta);
-      const double py = p * sin(track.phi) * sin(track.theta);
-      const double pz = p * cos(track.theta);
+      const double px = p * cos(track.direction.phi) * sin(track.direction.theta);
+      const double py = p * sin(track.direction.phi) * sin(track.direction.theta);
+      const double pz = p * cos(track.direction.theta);
       return ROOT::Math::PxPyPzMVector{px, py, pz, mass};
     });
     return momenta;