diff --git a/Tracking/TrkEvent/TrkPatternParameters/TrkPatternParameters/PatternTrackParameters.h b/Tracking/TrkEvent/TrkPatternParameters/TrkPatternParameters/PatternTrackParameters.h
index 3f8833ade646f04a87ec159aca9353e9a269158b..977d9bfda6ff21e27c2a007747609fd2c61b622f 100755
--- a/Tracking/TrkEvent/TrkPatternParameters/TrkPatternParameters/PatternTrackParameters.h
+++ b/Tracking/TrkEvent/TrkPatternParameters/TrkPatternParameters/PatternTrackParameters.h
@@ -121,9 +121,6 @@ namespace Trk {
       ///////////////////////////////////////////////////////////////////
 
       SurfaceUniquePtrT<const Surface> m_surface;
-      CxxUtils::CachedValue<Amg::Vector3D> m_pposition;
-      CxxUtils::CachedValue<Amg::Vector3D> m_pmomentum;
-      CxxUtils::CachedValue<Trk::Charged> m_pchargeDef;
 
       ///////////////////////////////////////////////////////////////////
       // Comments
@@ -148,9 +145,8 @@ namespace Trk {
       Amg::Vector3D localToGlobal(const PerigeeSurface     *) const;
       Amg::Vector3D localToGlobal(const ConeSurface        *) const;
 
-      void updatePositionCache(void) const;
-      void updateMomentumCache(void) const;
-      void updateChargeCache(void) const;
+      Amg::Vector3D calculatePosition(void) const;
+      Amg::Vector3D calculateMomentum(void) const;
     };
 
   /////////////////////////////////////////////////////////////////////////////////
@@ -196,9 +192,6 @@ namespace Trk {
             *m_covariance = *P.m_covariance;
           }
         }
-
-        m_pposition = P.m_pposition;
-        m_pmomentum = P.m_pmomentum;
       }
 
       return (*this);
@@ -220,9 +213,6 @@ namespace Trk {
       m_parameters[ 3] = p[ 3];
       m_parameters[ 4] = p[ 4];
       m_covariance.reset(nullptr);
-      m_pposition.reset();
-      m_pmomentum.reset();
-      m_pchargeDef.reset();
     }
 
   ///////////////////////////////////////////////////////////////////
@@ -266,9 +256,6 @@ namespace Trk {
       m_parameters[ 2] = p[ 2];
       m_parameters[ 3] = p[ 3];
       m_parameters[ 4] = p[ 4];
-      m_pposition.reset();
-      m_pmomentum.reset();
-      m_pchargeDef.reset();
       setCovariance(c  );
     }
 
@@ -334,10 +321,6 @@ namespace Trk {
 	N.correctionIMom() > 1. ? 
 	  m_parameters[ 4]/=N.correctionIMom() : m_parameters[ 4]*=N.correctionIMom();
       }
-
-      m_pposition.reset();
-      m_pmomentum.reset();
-      m_pchargeDef.reset();
     }
 
   ///////////////////////////////////////////////////////////////////
@@ -361,10 +344,6 @@ namespace Trk {
 	N.correctionIMom() > 1. ? 
 	  m_parameters[ 4]*=N.correctionIMom() : m_parameters[ 4]/=N.correctionIMom();
       }
-
-      m_pposition.reset();
-      m_pmomentum.reset();
-      m_pchargeDef.reset();
     }
 
   ///////////////////////////////////////////////////////////////////
@@ -373,10 +352,11 @@ namespace Trk {
 
   inline double         PatternTrackParameters::charge        () const
     {
-      if (!m_pchargeDef.isValid()) {
-        updateChargeCache();
+      if (m_parameters[4] > 0.0) {
+        return 1.0;
+      } else {
+        return -1.0;
       }
-      return m_pchargeDef.ptr()->charge();
     }	
 
   inline double         PatternTrackParameters::sinPhi        () const
@@ -406,10 +386,7 @@ namespace Trk {
 
   inline Amg::Vector3D PatternTrackParameters::momentum      () const
     {
-      if (!m_pmomentum.isValid()) {
-        updateMomentumCache();
-      }
-      return *m_pmomentum.ptr();
+      return calculateMomentum();
     }
 } // end of name space
 
diff --git a/Tracking/TrkEvent/TrkPatternParameters/src/PatternTrackParameters.cxx b/Tracking/TrkEvent/TrkPatternParameters/src/PatternTrackParameters.cxx
index 0d4351e608e8db63a64dc29d5eb62b79801b1bcd..b29a7e1f090f556bdc40750b4586a785915a02f4 100755
--- a/Tracking/TrkEvent/TrkPatternParameters/src/PatternTrackParameters.cxx
+++ b/Tracking/TrkEvent/TrkPatternParameters/src/PatternTrackParameters.cxx
@@ -64,10 +64,6 @@ bool Trk::PatternTrackParameters::production(const Trk::ParametersBase<5,Trk::Ch
     m_covariance.reset(nullptr);
   }
 
-  m_pposition.reset();
-  m_pmomentum.reset();
-  m_pchargeDef.reset();
-
   return true;
 }
 
@@ -140,10 +136,7 @@ AmgSymMatrix(5) Trk::PatternTrackParameters::newCovarianceMatrix
 
 Amg::Vector3D Trk::PatternTrackParameters::position() const
 {
-  if (!m_pposition.isValid()) {
-    updatePositionCache();
-  }
-  return *m_pposition.ptr();
+  return calculatePosition();
 } 
 
 ///////////////////////////////////////////////////////////////////
@@ -494,10 +487,6 @@ bool Trk::PatternTrackParameters::initiate
     m_surface.reset(nullptr);
   }
 
-  m_pposition.reset();
-  m_pmomentum.reset();
-  m_pchargeDef.reset();
-  
   return true;
 }
 
@@ -531,17 +520,11 @@ void Trk::PatternTrackParameters::changeDirection()
     m_covariance->fillSymmetric(1, 4, -(*m_covariance)(1, 4));
     m_covariance->fillSymmetric(2, 4, -(*m_covariance)(2, 4));
 
-    m_pposition.reset();
-    m_pmomentum.reset();
-    m_pchargeDef.reset();
     return;
   }
 
   m_parameters[ 0] = -m_parameters[ 0];
 
-  m_pposition.reset();
-  m_pmomentum.reset();
-  m_pchargeDef.reset();
 
   if(m_covariance == nullptr) { return;
 }
@@ -554,44 +537,35 @@ void Trk::PatternTrackParameters::changeDirection()
   m_covariance->fillSymmetric(2, 4, -(*m_covariance)(2, 4));
 }
 
-void Trk::PatternTrackParameters::updateChargeCache(void) const {
-  if (m_parameters[4] > 0.0) {
-    m_pchargeDef.set(1);
-  } else {
-    m_pchargeDef.set(-1);
-  }
-}
-
-void Trk::PatternTrackParameters::updatePositionCache(void) const {
+Amg::Vector3D Trk::PatternTrackParameters::calculatePosition(void) const {
   if (!m_surface) {
-    m_pposition.set(Amg::Vector3D(0, 0, 0));
-    return;
+    return Amg::Vector3D(0, 0, 0);
   }
 
   if (const Trk::PlaneSurface * plane = dynamic_cast<const Trk::PlaneSurface*>(m_surface.get()); plane != nullptr) {
-    m_pposition.set(localToGlobal(plane));
+    return localToGlobal(plane);
   } else if (const Trk::StraightLineSurface * line = dynamic_cast<const Trk::StraightLineSurface*>(m_surface.get()); line != nullptr) {
-    m_pposition.set(localToGlobal(line));
+    return localToGlobal(line);
   } else if (const Trk::DiscSurface * disc = dynamic_cast<const Trk::DiscSurface*>(m_surface.get()); disc != nullptr) {
-    m_pposition.set(localToGlobal(disc));
+    return localToGlobal(disc);
   } else if (const Trk::CylinderSurface * cylinder = dynamic_cast<const Trk::CylinderSurface*>(m_surface.get()); cylinder != nullptr) {
-    m_pposition.set(localToGlobal(cylinder));
+    return localToGlobal(cylinder);
   } else if (const Trk::PerigeeSurface * pline = dynamic_cast<const Trk::PerigeeSurface*>(m_surface.get()); pline != nullptr) {
-    m_pposition.set(localToGlobal(pline));
+    return localToGlobal(pline);
   } else if (const Trk::ConeSurface * cone = dynamic_cast<const Trk::ConeSurface*>(m_surface.get()); cone != nullptr) {
-    m_pposition.set(localToGlobal(cone));
+    return localToGlobal(cone);
   } else {
-    m_pposition.set(Amg::Vector3D(0, 0, 0));
+    return Amg::Vector3D(0, 0, 0);
   }
 }
 
-void Trk::PatternTrackParameters::updateMomentumCache(void) const {
+Amg::Vector3D Trk::PatternTrackParameters::calculateMomentum(void) const {
   double p = m_parameters[4] != 0. ? 1. / std::abs(m_parameters[4]) : 10e9;
 
   double Sf = std::sin(m_parameters[2]), Cf = std::cos(m_parameters[2]);
   double Se = std::sin(m_parameters[3]), Ce = std::cos(m_parameters[3]);
 
-  m_pmomentum.set(Amg::Vector3D(p * Se * Cf, p * Se * Sf, p * Ce));
+  return Amg::Vector3D(p * Se * Cf, p * Se * Sf, p * Ce);
 }
 
 bool Trk::PatternTrackParameters::hasSurface() const {
@@ -615,7 +589,4 @@ int Trk::PatternTrackParameters::surfaceType() const {
 }
 
 void Trk::PatternTrackParameters::updateParametersHelper(const AmgVector(5) &) {
-  updatePositionCache();
-  updateMomentumCache();
-  updateChargeCache();
 }