diff --git a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h
index 700ea2f4f76d4d28b8afa3863c601708ee390cd2..fdda820cd531028904510b898e6ebf0b2b51bf7f 100644
--- a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h
+++ b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.h
@@ -77,12 +77,15 @@ public:
   /** virtual Destructor */
   virtual ~ParametersBase() = default;
 
-  /** Access method for the parameters */
+  /** Access methods for the parameters */
   const AmgVector(DIM) & parameters() const;
+  AmgVector(DIM) & parameters();
 
   /** Access method for the covariance matrix - returns nullptr if no covariance
    * matrix is given */
   const AmgSymMatrix(DIM) * covariance() const;
+  AmgSymMatrix(DIM)* covariance();
+
 
   /** Access method for transverse momentum */
   double pT() const;
diff --git a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc
index 9521d9e9b3535aad263d2a6558e51a9d9e310689..468cc9f00c821351924e237caaba3fe06fb8a7ad 100644
--- a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc
+++ b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersBase.icc
@@ -49,17 +49,28 @@ Trk::ParametersBase<DIM, T>::ParametersBase(const AmgVector(DIM) & parameters,
   : m_parameters(parameters)
   , m_covariance(covariance)
   , m_chargeDef{}
+{}
+
+template<int DIM, class T>
+const AmgVector(DIM)& ParametersBase<DIM, T>::parameters() const
 {
+  return m_parameters;
 }
 
 template<int DIM, class T>
-  const AmgVector(DIM) & ParametersBase<DIM, T>::parameters() const
+AmgVector(DIM)& ParametersBase<DIM, T>::parameters()
 {
   return m_parameters;
 }
 
 template<int DIM, class T>
-  const AmgSymMatrix(DIM) * ParametersBase<DIM, T>::covariance() const
+const AmgSymMatrix(DIM)* ParametersBase<DIM, T>::covariance() const
+{
+  return m_covariance.get();
+}
+
+template<int DIM, class T>
+AmgSymMatrix(DIM)* ParametersBase<DIM, T>::covariance()
 {
   return m_covariance.get();
 }
@@ -89,7 +100,6 @@ ParametersBase<DIM, T>::isCharged() const
   }
 }
 
-
 template<int DIM, class T>
 Amg::Vector2D
 ParametersBase<DIM, T>::localPosition() const
diff --git a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersT.h b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersT.h
index d0bb0c51506e1532ed6e4ea8394593a1cdf70d25..6f0b97f87295e6a2a0de74b4a01426efebf12152 100644
--- a/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersT.h
+++ b/Tracking/TrkEvent/TrkParametersBase/TrkParametersBase/ParametersT.h
@@ -47,7 +47,7 @@ class MaterialEffectsEngine;
    @author Christos Anastopoulos (Athena MT modifications)
 */
 template<int DIM, class T, class S>
-class ParametersT : public ParametersBase<DIM, T>
+class ParametersT final : public ParametersBase<DIM, T>
 {
 public:
   static_assert(
diff --git a/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h b/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h
index e9fec4de3e8e52fda9e30c283bd0f856befccd17..720c85b6a3bbb4187cd5edfc01dc9216c174a15e 100644
--- a/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h
+++ b/Tracking/TrkEventCnv/TrkEventTPCnv/TrkEventTPCnv/TrkParameters/mungeZeroQOverP.h
@@ -19,27 +19,18 @@
 #ifndef TRKEVENTTPCNV_MUNGEZEROQOVERP_H
 #define TRKEVENTTPCNV_MUNGEZEROQOVERP_H
 
-
 #include "CxxUtils/no_sanitize_undefined.h"
 
-
 namespace TrkEventTPCnv {
 
-
-template <int DIM, class T, class S>
-class MungeZeroQOverP
-  : public Trk::ParametersT<DIM, T, S>
+template<int DIM, class T, class S>
+void mungeZeroQOverP
+NO_SANITIZE_UNDEFINED(Trk::ParametersT<DIM, T, S>& p)
 {
-public:
-  void setZero() { this->m_parameters[Trk::qOverP] = 0; }
-};
-
-template <int DIM, class T, class S>
-void mungeZeroQOverP NO_SANITIZE_UNDEFINED (Trk::ParametersT<DIM, T, S>& p)
-{
-  static_cast<MungeZeroQOverP<DIM, T, S>&>(p).setZero();
+  AmgVector(DIM) newParam = p.parameters();
+  newParam[Trk::qOverP] = 0;
+  p.updateParameters(newParam);
 }
-
 }
 
 
diff --git a/Tracking/TrkEventCnv/TrkEventTPCnv/src/TrkNeutralParameters/MeasuredNeutralAtaSurfaceCnv_p1.cxx b/Tracking/TrkEventCnv/TrkEventTPCnv/src/TrkNeutralParameters/MeasuredNeutralAtaSurfaceCnv_p1.cxx
index 407e49e737531122d93949f20a836bb64567fd41..e7a932b1687c008468f9bb4318ebbd41c45c31b1 100644
--- a/Tracking/TrkEventCnv/TrkEventTPCnv/src/TrkNeutralParameters/MeasuredNeutralAtaSurfaceCnv_p1.cxx
+++ b/Tracking/TrkEventCnv/TrkEventTPCnv/src/TrkNeutralParameters/MeasuredNeutralAtaSurfaceCnv_p1.cxx
@@ -13,30 +13,18 @@
 #include "TrkEventTPCnv/helpers/EigenHelpers.h"
 
 
-namespace {
-
-template <class ATA_SURFACE>
-class SurfaceGetCovariance : public ATA_SURFACE
-{
-public:
-  AmgSymMatrix(ATA_SURFACE::dim)* getCovariance() { return this->m_covariance.get(); }
-};
-
-}
-
-
 template< class SURFACE_CNV, class ATA_SURFACE >
 void
 MeasuredNeutralAtaSurfaceCnv_p1< SURFACE_CNV, ATA_SURFACE >::
 persToTrans( const Trk::MeasuredAtaSurface_p1 *persObj, ATA_SURFACE *transObj, MsgStream &log )
 {
    m_surfaceCnv.persToTrans( persObj, transObj, log );
-   
+
    Trk::ErrorMatrix dummy;
    this->fillTransFromPStore( &m_errorMxCnv, persObj->m_errorMatrix, &dummy, log );
-   AmgSymMatrix(ATA_SURFACE::dim)* cov = static_cast<SurfaceGetCovariance<ATA_SURFACE>*>(transObj)->getCovariance();
+   AmgSymMatrix(ATA_SURFACE::dim)* cov = transObj->covariance();
    EigenHelpers::vectorToEigenMatrix(dummy.values, *cov, "MeasuredNeutralAtaSurfaceCnv_p1");
-   
+
 }