diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/VP1TrackSystems/TrackHandleBase.h b/graphics/VP1/VP1Systems/VP1TrackSystems/VP1TrackSystems/TrackHandleBase.h
index 7136304bfb7c8ea09bebed55b86578a12dd6c34b..b7ccd109b44f319f679fcf344b0b97f85d1c0a84 100644
--- a/graphics/VP1/VP1Systems/VP1TrackSystems/VP1TrackSystems/TrackHandleBase.h
+++ b/graphics/VP1/VP1Systems/VP1TrackSystems/VP1TrackSystems/TrackHandleBase.h
@@ -74,8 +74,8 @@ public:
   virtual QStringList clicked() const = 0;
 
   virtual Amg::Vector3D momentum() const { return Amg::Vector3D(0,0,0); }
-  virtual const Amg::Vector3D * startPoint() const;//!< returns 0 if can't find start point.
-  virtual const Amg::Vector3D * endPoint() const;//!< returns 0 if can't find start point.
+  virtual std::optional<Amg::Vector3D> startPoint() const;//!< returns 0 if can't find start point.
+  virtual std::optional<Amg::Vector3D> endPoint() const;//!< returns 0 if can't find start point.
   virtual int pdgCode() const { return 0; }//!< 0 means unknown
 
   //Default implementation of the following two methods will based on
diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackHandleBase.cxx b/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackHandleBase.cxx
index 267dae53a3ee4171b19c74c518b805cec978e979..be15ef8314f9e9cc892c5b24ad84ec62fb0168ef 100644
--- a/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackHandleBase.cxx
+++ b/graphics/VP1/VP1Systems/VP1TrackSystems/src/TrackHandleBase.cxx
@@ -1556,7 +1556,7 @@ QStringList TrackHandleBase::baseInfo() const
 }
 
 //____________________________________________________________________
-const Amg::Vector3D * TrackHandleBase::startPoint() const
+std::optional<Amg::Vector3D> TrackHandleBase::startPoint() const
 {
   m_d->ensureLoadPathInfo();
   if (m_d->pathInfo_TrkTrack) {
@@ -1566,17 +1566,17 @@ const Amg::Vector3D * TrackHandleBase::startPoint() const
       if (common()->trackSanityHelper()->isSafe(*tsos_iter)) {
         const Trk::TrackParameters* trackParam = (*tsos_iter)->trackParameters();
         if (common()->trackSanityHelper()->isSafe(trackParam))
-          return &(trackParam->position());
+          return trackParam->position();
       }
     }
   } else if (m_d->pathInfo_Points&&!m_d->pathInfo_Points->empty()) {
-    return &(m_d->pathInfo_Points->at(0));
+    return m_d->pathInfo_Points->at(0);
   }
-  return 0;
+  return {};
 }
 
 //____________________________________________________________________
-const Amg::Vector3D * TrackHandleBase::endPoint() const
+std::optional<Amg::Vector3D> TrackHandleBase::endPoint() const
 {
   m_d->ensureLoadPathInfo();
   if (m_d->pathInfo_TrkTrack) {
@@ -1586,18 +1586,18 @@ const Amg::Vector3D * TrackHandleBase::endPoint() const
       if (common()->trackSanityHelper()->isSafe(*tsos_iter)) {
         const Trk::TrackParameters* trackParam = (*tsos_iter)->trackParameters();
         if (common()->trackSanityHelper()->isSafe(trackParam))
-          return &(trackParam->position());
+          return trackParam->position();
       }
     }
   } else if (m_d->pathInfo_Points&&!m_d->pathInfo_Points->empty()) {
-    return &(m_d->pathInfo_Points->back());
+    return m_d->pathInfo_Points->back();
   }
-  return 0;
+  return {};
 }
 
 bool TrackHandleBase::isIDTrack() const 
 {
-  const Amg::Vector3D * start = startPoint();
+  std::optional<Amg::Vector3D> start = startPoint();
   if (!start) return false;
   return start->perp()<1100 &&fabs( start->z())>3500;  
 }
diff --git a/graphics/VP1/VP1Systems/VP1TrackSystems/src/VP1TrackSystem.cxx b/graphics/VP1/VP1Systems/VP1TrackSystems/src/VP1TrackSystem.cxx
index e4ed3633e90397ecd54348cca1cd560b2df8f536..91eb346e5955ad32f9aab87c82883e21732189c2 100644
--- a/graphics/VP1/VP1Systems/VP1TrackSystems/src/VP1TrackSystem.cxx
+++ b/graphics/VP1/VP1Systems/VP1TrackSystems/src/VP1TrackSystem.cxx
@@ -672,7 +672,7 @@ unsigned VP1TrackSystem::Imp::calcTotalMomentumOfSelectedHandles(Amg::Vector3D&
     if (mom.mag2()==0.0)
       continue;
     //Fixme: Get actual position of perigee!!
-    const Amg::Vector3D * pos = handle->startPoint();
+    std::optional<Amg::Vector3D> pos = handle->startPoint();
     if (!pos)
       continue;
     ++nused;