diff --git a/Core/include/ACTS/Surfaces/ConeBounds.hpp b/Core/include/ACTS/Surfaces/ConeBounds.hpp
index 8e14d1cde06f291477893ba725d8249d6eeb9f5b..e4231e12983dc6e1851d7e0436f8a4d7ece18c62 100644
--- a/Core/include/ACTS/Surfaces/ConeBounds.hpp
+++ b/Core/include/ACTS/Surfaces/ConeBounds.hpp
@@ -93,7 +93,7 @@ public:
 
   /// Virtual constructor
   virtual ConeBounds*
-  clone() const override;
+  clone() const final override;
 
   /// Return the bounds type
   virtual BoundsType
@@ -109,7 +109,7 @@ public:
   ///
   /// @return is a boolean indicating if the position is inside
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck = true) const override;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck = true) const final override;
 
   /// Inside method for the first local parameter
   ///
@@ -118,7 +118,7 @@ public:
   ///
   /// @return is a boolean indicating if the position is insideLoc0
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const override;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// Inside method for the second local parameter
   ///
@@ -127,7 +127,7 @@ public:
   ///
   /// @return is a boolean indicating if the position is insideLoc1
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const override;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary ( > 0 if outside and <=0 if inside)
   ///
@@ -135,7 +135,7 @@ public:
   ///
   /// @return is a signed distance parameter
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const override;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// Return the radius at a specific z values
   ///
@@ -187,7 +187,7 @@ public:
   ///
   /// @return is the input obect
   virtual std::ostream&
-  dump(std::ostream& sl) const override;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// private helper method
diff --git a/Core/include/ACTS/Surfaces/ConeSurface.hpp b/Core/include/ACTS/Surfaces/ConeSurface.hpp
index ff41232339916da9f1f765f74157fadb1e465ac1..343009ba5ce66ba4b066794ae2bd3be1d6b15719 100644
--- a/Core/include/ACTS/Surfaces/ConeSurface.hpp
+++ b/Core/include/ACTS/Surfaces/ConeSurface.hpp
@@ -90,7 +90,7 @@ public:
   ///
   /// @param shift is the optional shift applied after cloning
   virtual ConeSurface*
-  clone(const Transform3D* shift = nullptr) const override;
+  clone(const Transform3D* shift = nullptr) const final override;
 
   /// The binning position method - is overloaded for r-type binning
   ///
@@ -99,7 +99,7 @@ public:
   ///
   /// @return The return type is a vector for positioning in the global frame
   virtual const Vector3D
-  binningPosition(BinningValue bValue) const override;
+  binningPosition(BinningValue bValue) const final override;
 
   /// Return the surface type
   virtual SurfaceType
@@ -146,7 +146,7 @@ public:
 
   /// This method returns the ConeBounds by reference
   virtual const ConeBounds&
-  bounds() const override;
+  bounds() const final override;
 
   /// Local to global transformation
   ///
@@ -156,7 +156,7 @@ public:
   virtual void
   localToGlobal(const Vector2D& lpos,
                 const Vector3D& mom,
-                Vector3D&       gpos) const override;
+                Vector3D&       gpos) const final override;
 
   /// Global to local transfomration
   ///
@@ -168,7 +168,7 @@ public:
   virtual bool
   globalToLocal(const Vector3D& gpos,
                 const Vector3D& mom,
-                Vector2D&       lpos) const override;
+                Vector2D&       lpos) const final override;
 
   /// straight line intersection schema - provides closest intersection and
   /// (signed) path length
@@ -215,7 +215,7 @@ public:
   intersectionEstimate(const Vector3D&      gpos,
                        const Vector3D&      dir,
                        bool                 forceDir = false,
-                       const BoundaryCheck& bcheck   = false) const override;
+                       const BoundaryCheck& bcheck   = false) const final override;
 
   /// the pathCorrection for derived classes with thickness
   ///
@@ -224,7 +224,7 @@ public:
   ///
   /// @return is the path correction due to incident angle
   virtual double
-  pathCorrection(const Vector3D& gpos, const Vector3D& mom) const override;
+  pathCorrection(const Vector3D& gpos, const Vector3D& mom) const final override;
 
   /// Return properly formatted class name for screen output
   virtual std::string
diff --git a/Core/include/ACTS/Surfaces/CylinderBounds.hpp b/Core/include/ACTS/Surfaces/CylinderBounds.hpp
index 3134b3a71f9c19173944292c023678279973504e..8af5a8a8183a43c98fce0c134551fad94548528b 100644
--- a/Core/include/ACTS/Surfaces/CylinderBounds.hpp
+++ b/Core/include/ACTS/Surfaces/CylinderBounds.hpp
@@ -86,7 +86,7 @@ public:
 
   /// Virtual constructor
   virtual CylinderBounds*
-  clone() const override;
+  clone() const final override;
 
   /// Return of the bounds type
   virtual BoundsType
@@ -104,7 +104,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const override;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final override;
 
   /// Specialized method for CylinderBounds that checks if a global position
   /// is within the the cylinder cover
@@ -123,7 +123,7 @@ public:
   ///
   /// @return is a boolean indicating if the position is insideLoc0
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const override;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// Inside method for the second local parameter
   ///
@@ -132,7 +132,7 @@ public:
   ///
   /// @return is a boolean indicating if the position is insideLoc1
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const override;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary ( > 0 if outside and <=0 if inside)
   ///
@@ -140,7 +140,7 @@ public:
   ///
   /// @return is a signed distance parameter
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const override;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// This method returns the radius
   virtual double
@@ -160,7 +160,7 @@ public:
 
   /// Output Method for std::ostream
   virtual std::ostream&
-  dump(std::ostream& sl) const override;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// private method for inside check
diff --git a/Core/include/ACTS/Surfaces/CylinderSurface.hpp b/Core/include/ACTS/Surfaces/CylinderSurface.hpp
index a9272102e4787648211e68146f953007b436836f..c9b4c21fdf0353da437581645f9de71d0395cebd 100644
--- a/Core/include/ACTS/Surfaces/CylinderSurface.hpp
+++ b/Core/include/ACTS/Surfaces/CylinderSurface.hpp
@@ -93,7 +93,7 @@ public:
   ///
   /// @param shift is an optional transform for a shift applied after coping
   virtual CylinderSurface*
-  clone(const Transform3D* shift = nullptr) const override;
+  clone(const Transform3D* shift = nullptr) const final override;
 
   /// The binning position method - is overloaded for r-type binning
   ///
@@ -101,7 +101,7 @@ public:
   ///
   /// @return is the global position to be used for binning
   virtual const Vector3D
-  binningPosition(BinningValue bValue) const override;
+  binningPosition(BinningValue bValue) const final override;
 
   /// Return the measurement frame - this is needed for alignment, in particular
   /// The measurement frame of a cylinder is the tangential plane at a given
@@ -112,7 +112,7 @@ public:
   ///
   /// @return rotation matrix that defines the measurement frame
   virtual const RotationMatrix3D
-  measurementFrame(const Vector3D& gpos, const Vector3D& mom) const override;
+  measurementFrame(const Vector3D& gpos, const Vector3D& mom) const final override;
 
   /// Return the surface type
   virtual SurfaceType
@@ -129,7 +129,7 @@ public:
   ///
   /// @return normal vector at the local position
   virtual const Vector3D
-  normal(const Vector2D& lpos) const override;
+  normal(const Vector2D& lpos) const final override;
 
   /// Return method for surface normal information
   /// @note for a Cylinder a local position is always required for the normal
@@ -139,7 +139,7 @@ public:
   ///
   /// @return normal vector at the global position
   virtual const Vector3D
-  normal(const Vector3D& gpos) const override;
+  normal(const Vector3D& gpos) const final override;
 
   /// Return method for the rotational symmetry axis
   /// @return  the z-Axis of transform
@@ -148,7 +148,7 @@ public:
 
   /// This method returns the CylinderBounds by reference
   virtual const CylinderBounds&
-  bounds() const override;
+  bounds() const final override;
 
   /// Local to global transformation
   ///
@@ -158,7 +158,7 @@ public:
   virtual void
   localToGlobal(const Vector2D& lpos,
                 const Vector3D& mom,
-                Vector3D&       gpos) const override;
+                Vector3D&       gpos) const final override;
 
   /// Global to local transfomration
   ///
@@ -170,7 +170,7 @@ public:
   virtual bool
   globalToLocal(const Vector3D& gpos,
                 const Vector3D& mom,
-                Vector2D&       lpos) const override;
+                Vector2D&       lpos) const final override;
 
   /// Check for position on surface
   ///
@@ -180,7 +180,7 @@ public:
   /// @return is a boolean indicating if the position is on surface
   virtual bool
   isOnSurface(const Vector3D&      gpos,
-              const BoundaryCheck& bcheck = true) const override;
+              const BoundaryCheck& bcheck = true) const final override;
 
   /// Fast straight line intersection schema - provides closest intersection
   ///  and (signed) path length
@@ -216,7 +216,7 @@ public:
   intersectionEstimate(const Vector3D&      gpos,
                        const Vector3D&      dir,
                        bool                 forceDir = false,
-                       const BoundaryCheck& bcheck     = false) const override;
+                       const BoundaryCheck& bcheck     = false) const final override;
 
   /// Path correction due to incident of the track
   ///
@@ -225,7 +225,7 @@ public:
   ///
   /// @return is the correction factor due to incident
   virtual double
-  pathCorrection(const Vector3D& gpos, const Vector3D& mom) const override;
+  pathCorrection(const Vector3D& gpos, const Vector3D& mom) const final override;
 
   /// Return method for properly formatted output string
   virtual std::string
diff --git a/Core/include/ACTS/Surfaces/DiamondBounds.hpp b/Core/include/ACTS/Surfaces/DiamondBounds.hpp
index 40ea231081ea315f0f84ffc4a85b27527c4f77fa..a6f1dda12588fc484e74d5d9fc80e166d1f03139 100644
--- a/Core/include/ACTS/Surfaces/DiamondBounds.hpp
+++ b/Core/include/ACTS/Surfaces/DiamondBounds.hpp
@@ -65,7 +65,7 @@ public:
 
   /// Virtual constructor
   DiamondBounds*
-  clone() const override;
+  clone() const final override;
 
   /// Assignment operator
   ///
@@ -77,7 +77,7 @@ public:
   ///
   /// @param sbo are the source bounds for check
   virtual bool
-  operator==(const SurfaceBounds& sbo) const override;
+  operator==(const SurfaceBounds& sbo) const final override;
 
   /// Return the bounds type
   virtual BoundsType
@@ -126,7 +126,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const override;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final override;
 
   ///  This method checks inside bounds in loc0
   /// - loc0/loc1 correspond to the natural coordinates of the surface
@@ -138,7 +138,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const override;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   ///  This method checks inside bounds in loc1
   /// - loc0/loc1 correspond to the natural coordinates of the surface
@@ -150,7 +150,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const override;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary ( > 0 if outside and <=0 if inside)
   ///
@@ -158,11 +158,11 @@ public:
   ///
   /// @return is a signed distance parameter
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const override;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// Return the vertices - or, the points of the extremas
   virtual const std::vector<Vector2D>
-  vertices() const override;
+  vertices() const final override;
 
   // Bounding box representation
   virtual const RectangleBounds&
@@ -172,7 +172,7 @@ public:
   ///
   /// @param sl is the ostream in which it is dumped
   virtual std::ostream&
-  dump(std::ostream& sl) const override;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// private helper method
diff --git a/Core/include/ACTS/Surfaces/DiscBounds.hpp b/Core/include/ACTS/Surfaces/DiscBounds.hpp
index d1d3a0b554686306fd034b52087fe03baf827868..69c33867663ac9d21bf9a8ec6ce58cbbd331e357 100644
--- a/Core/include/ACTS/Surfaces/DiscBounds.hpp
+++ b/Core/include/ACTS/Surfaces/DiscBounds.hpp
@@ -29,8 +29,10 @@ public:
   ///
   /// @param sSize is the size of the store
   DiscBounds(size_t sSize = 0) : SurfaceBounds(sSize) {}
+  
   /// Destructor
   virtual ~DiscBounds() {}
+  
   /// Virtual Constructor
   virtual DiscBounds*
   clone() const = 0;
diff --git a/Core/include/ACTS/Surfaces/DiscSurface.hpp b/Core/include/ACTS/Surfaces/DiscSurface.hpp
index 552a4f9c62dd2e902a75fe999a05ac7cd57abd81..bb8c42da42318ffc801a80ab314be397eb0f75b4 100644
--- a/Core/include/ACTS/Surfaces/DiscSurface.hpp
+++ b/Core/include/ACTS/Surfaces/DiscSurface.hpp
@@ -121,7 +121,7 @@ public:
   ///
   /// @param shift the otional transform applied after cloning
   virtual DiscSurface*
-  clone(const Transform3D* shift = nullptr) const override;
+  clone(const Transform3D* shift = nullptr) const final override;
 
   /// Return the surface type
   virtual SurfaceType
@@ -149,7 +149,7 @@ public:
 
   /// This method returns the bounds by reference
   const SurfaceBounds&
-  bounds() const override;
+  bounds() const final override;
 
   /// This method returns true if the GlobalPosition is on the Surface for both,
   /// within or without check of whether the local position is inside boundaries
@@ -161,7 +161,7 @@ public:
   /// @return bollean that indicates if the position is on surface
   virtual bool
   isOnSurface(const Vector3D&      gpos,
-              const BoundaryCheck& bcheck = true) const override;
+              const BoundaryCheck& bcheck = true) const final override;
 
   /// Local to global transformation
   /// For planar surfaces the momentum is ignroed in the local to global
@@ -176,7 +176,7 @@ public:
   virtual void
   localToGlobal(const Vector2D& lpos,
                 const Vector3D& mom,
-                Vector3D&       gpos) const override;
+                Vector3D&       gpos) const final override;
 
   /// Global to local transformation
   /// @note the momentum is ignored for Disc surfaces in this calculateion
@@ -192,7 +192,7 @@ public:
   virtual bool
   globalToLocal(const Vector3D& gpos,
                 const Vector3D& mom,
-                Vector2D&       lpos) const override;
+                Vector2D&       lpos) const final override;
 
   /// Special method for DiscSurface : local<->local transformations polar <->
   /// cartesian
@@ -246,7 +246,7 @@ public:
   ///
   /// @return is the correction factor due to incident
   double
-  pathCorrection(const Vector3D& gpos, const Vector3D& mom) const override;
+  pathCorrection(const Vector3D& gpos, const Vector3D& mom) const final override;
 
   /// fast straight line intersection schema - standard: provides closest
   /// intersection and (signed) path length
@@ -279,7 +279,7 @@ public:
   intersectionEstimate(const Vector3D&      gpos,
                        const Vector3D&      dir,
                        bool                 forceDir = false,
-                       const BoundaryCheck& bcheck     = false) const override;
+                       const BoundaryCheck& bcheck     = false) const final override;
 
   /// Return properly formatted class name for screen output
   virtual std::string
diff --git a/Core/include/ACTS/Surfaces/DiscTrapezoidalBounds.hpp b/Core/include/ACTS/Surfaces/DiscTrapezoidalBounds.hpp
index 8d468ec9b244aa676c5fa34a0078ea3209ef3179..4ce86f47c088c606c088328bf764b6208ead732d 100644
--- a/Core/include/ACTS/Surfaces/DiscTrapezoidalBounds.hpp
+++ b/Core/include/ACTS/Surfaces/DiscTrapezoidalBounds.hpp
@@ -79,7 +79,7 @@ public:
 
   /// Virtual constructor
   virtual DiscTrapezoidalBounds*
-  clone() const override;
+  clone() const final override;
 
   /// Return the type - mainly for persistency
   virtual SurfaceBounds::BoundsType
@@ -94,25 +94,25 @@ public:
   /// @param lpos is the local position to be checked (in polar coordinates)
   /// @param bcheck is the boundary check directive
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck = true) const override;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck = true) const final override;
 
   /// This method checks inside bounds in loc0
   /// @param lpos is the local position to be checked (in polar coordinates)
   /// @param tol0 is the tolerance applied
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const override;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// This method checks inside bounds in loc0
   /// @param lpos is the local position to be checked (in polar coordinates)
   /// @param tol1 is the tolerance applied
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const override;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary
   /// @param lpos is the local position to be checked (in polar coordinates)
   /// @return is the minimal distance ( > 0 if outside and <=0 if inside)
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const override;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// This method returns inner radius
   double
@@ -152,7 +152,7 @@ public:
 
   /// Output Method for std::ostream
   virtual std::ostream&
-  dump(std::ostream& sl) const override;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// private helper method
diff --git a/Core/include/ACTS/Surfaces/EllipseBounds.hpp b/Core/include/ACTS/Surfaces/EllipseBounds.hpp
index e570e139b9201dbb8313bdb4998559625957b40e..a23407f8a96c47b382e0810b2031dafa111a873d 100644
--- a/Core/include/ACTS/Surfaces/EllipseBounds.hpp
+++ b/Core/include/ACTS/Surfaces/EllipseBounds.hpp
@@ -87,7 +87,7 @@ public:
 
   /// Virtual constructor
   virtual EllipseBounds*
-  clone() const override;
+  clone() const final override;
 
   /// Return the type of the bounds for persistency
   virtual BoundsType
@@ -106,7 +106,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const override;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final override;
 
   /// Check for inside first local coordinate
   ///
@@ -115,7 +115,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const override;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// Check for inside second local coordinate
   ///
@@ -124,7 +124,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const override;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary ( > 0 if outside and <=0 if inside)
   ///
@@ -132,7 +132,7 @@ public:
   ///
   /// @return is a signed distance parameter
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const override;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// This method returns first inner radius
   double
@@ -156,7 +156,7 @@ public:
 
   /// Return the vertices - or, the points of the extremas
   virtual const std::vector<Vector2D>
-  vertices() const override;
+  vertices() const final override;
 
   // Bounding box representation
   virtual const RectangleBounds&
@@ -168,7 +168,7 @@ public:
 
   /// Output Method for std::ostream
   virtual std::ostream&
-  dump(std::ostream& sl) const override;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// private helper function
diff --git a/Core/include/ACTS/Surfaces/InfiniteBounds.hpp b/Core/include/ACTS/Surfaces/InfiniteBounds.hpp
index 74cbacf4f080469bdab8aa870331d7f29f7d51f3..763da8b34dd5388510ab9bf6cd1be92a67dde8d2 100644
--- a/Core/include/ACTS/Surfaces/InfiniteBounds.hpp
+++ b/Core/include/ACTS/Surfaces/InfiniteBounds.hpp
@@ -34,7 +34,7 @@ public:
 
   /// Return SurfaceBounds type for persistency mainly
   virtual SurfaceBounds::BoundsType
-  type() const final
+  type() const final override
   {
     return SurfaceBounds::Boundless;
   }
@@ -45,7 +45,7 @@ public:
   ///
   /// @return always true
   virtual bool
-  inside(const Vector2D&, const BoundaryCheck&) const final
+  inside(const Vector2D&, const BoundaryCheck&) const final override
   {
     return true;
   }
@@ -56,7 +56,7 @@ public:
   ///
   /// @return always true
   virtual bool
-  insideLoc0(const Vector2D&, double tol0 = 0.) const final
+  insideLoc0(const Vector2D&, double tol0 = 0.) const final override
   {
     return true;
   }
@@ -67,7 +67,7 @@ public:
   ///
   /// @return always true
   virtual bool
-  insideLoc1(const Vector2D&, double tol1 = 0.) const final
+  insideLoc1(const Vector2D&, double tol1 = 0.) const final override
   {
     return true;
   }
@@ -76,21 +76,22 @@ public:
   /// ignores input parameter
   /// @return always 0. (should be -NaN)
   virtual double
-  distanceToBoundary(const Vector2D& pos) const final
+  distanceToBoundary(const Vector2D& pos) const final override
   {
     return 0.;
   }
 
   /// Clone method to complete inherited interface
   virtual InfiniteBounds*
-  clone() const final
+  clone() const final override
   {
     return new InfiniteBounds();
   }
 
   /// Output Method for std::ostream
   virtual std::ostream&
-  dump(std::ostream& sl) const final;
+  dump(std::ostream& sl) const final override;
+  
 };
 
 inline std::ostream&
diff --git a/Core/include/ACTS/Surfaces/LineBounds.hpp b/Core/include/ACTS/Surfaces/LineBounds.hpp
index ffb3f63dc0748d02eaa69d24b0be4884bc5ca821..17f4c62a6554dc531dc714b56619fddd9c277cd5 100644
--- a/Core/include/ACTS/Surfaces/LineBounds.hpp
+++ b/Core/include/ACTS/Surfaces/LineBounds.hpp
@@ -52,11 +52,11 @@ public:
 
   /// Virtual constructor
   virtual LineBounds*
-  clone() const override;
+  clone() const final override;
 
   /// Return of the bounds type
   virtual BoundsType
-  type() const override
+  type() const final override
   {
     return SurfaceBounds::Line;
   }
@@ -70,7 +70,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const override;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final override;
 
   /// Inside check for the bounds object with tolerance
   /// checks for first coordinate only.
@@ -80,7 +80,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const override;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// Inside check for the bounds object with tolerance
   /// checks for second coordinate only.
@@ -90,7 +90,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const override;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary ( > 0 if outside and <=0 if inside)
   ///
@@ -98,7 +98,7 @@ public:
   ///
   /// @return is a signed distance parameter
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const override;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// This method returns the radius
   virtual double
@@ -112,7 +112,7 @@ public:
   ///
   /// @param sl is the ostream to be dumped into
   virtual std::ostream&
-  dump(std::ostream& sl) const override;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// private helper method
diff --git a/Core/include/ACTS/Surfaces/LineSurface.hpp b/Core/include/ACTS/Surfaces/LineSurface.hpp
index a6ebdea82902720fd81c982ac3c0ff40079dcb95..fd8b7d3631caa64859dd7e31e1bddb2ba97a05a3 100644
--- a/Core/include/ACTS/Surfaces/LineSurface.hpp
+++ b/Core/include/ACTS/Surfaces/LineSurface.hpp
@@ -90,7 +90,7 @@ public:
   ///
   /// return a Vector3D by value
   const Vector3D
-  normal(const Vector2D& lpos = s_origin2D) const override;
+  normal(const Vector2D& lpos = s_origin2D) const final override;
 
   /// The binning position is the position calcualted
   /// for a certain binning type
@@ -99,7 +99,7 @@ public:
   ///
   /// @return position that can beused for this binning
   virtual const Vector3D
-  binningPosition(BinningValue bValue) const final;
+  binningPosition(BinningValue bValue) const final override;
 
   /// Return the measurement frame - this is needed for alignment, in particular
   ///
@@ -112,7 +112,7 @@ public:
   ///
   /// @return is a rotation matrix that indicates the measurement frame
   virtual const RotationMatrix3D
-  measurementFrame(const Vector3D& gpos, const Vector3D& mom) const override;
+  measurementFrame(const Vector3D& gpos, const Vector3D& mom) const final override;
 
   /// Local to global transformation
   /// for line surfaces the momentum is used in order to interpret the drift
@@ -124,7 +124,7 @@ public:
   virtual void
   localToGlobal(const Vector2D& lpos,
                 const Vector3D& mom,
-                Vector3D&       gpos) const override;
+                Vector3D&       gpos) const final override;
 
   /// Specified for LineSurface: global to local method without dynamic
   /// memory allocation
@@ -164,7 +164,7 @@ public:
   virtual bool
   globalToLocal(const Vector3D& gpos,
                 const Vector3D& mom,
-                Vector2D&       lpos) const override;
+                Vector2D&       lpos) const final override;
 
   /// Special method for LineSurface
   /// provides the Line direction from cache: speedup
@@ -212,7 +212,7 @@ public:
   intersectionEstimate(const Vector3D&      gpos,
                        const Vector3D&      dir,
                        bool                 forceDir,
-                       const BoundaryCheck& bcheck = true) const override;
+                       const BoundaryCheck& bcheck = true) const final override;
 
   /// the pathCorrection for derived classes with thickness
   /// is by definition 1 for LineSurfaces
@@ -237,11 +237,11 @@ public:
   /// @return bollean that indicates if the position is on surface
   virtual bool
   isOnSurface(const Vector3D&      gpos,
-              const BoundaryCheck& bcheck = true) const override;
+              const BoundaryCheck& bcheck = true) const final override;
 
   /// This method returns the bounds of the Surface by reference */
   virtual const SurfaceBounds&
-  bounds() const final;
+  bounds() const final override;
 
   /// Return properly formatted class name for screen output */
   virtual std::string
diff --git a/Core/include/ACTS/Surfaces/PerigeeSurface.hpp b/Core/include/ACTS/Surfaces/PerigeeSurface.hpp
index e97665715414dfa13be884249ca2ad75c4f8da7b..843747d5f6bedb2673fb5a0978df15aa43aa4a53 100644
--- a/Core/include/ACTS/Surfaces/PerigeeSurface.hpp
+++ b/Core/include/ACTS/Surfaces/PerigeeSurface.hpp
@@ -61,7 +61,7 @@ public:
   ///
   /// @param shift is the potential shift that is applied after cloning
   virtual PerigeeSurface*
-  clone(const Transform3D* shift = nullptr) const override;
+  clone(const Transform3D* shift = nullptr) const final override;
 
   /// Assignment operator
   ///
@@ -71,14 +71,14 @@ public:
 
   /// Return the surface type
   virtual SurfaceType
-  type() const override
+  type() const final override
   {
     return Surface::Perigee;
   }
 
   /// Return properly formatted class name for screen output */
   virtual std::string
-  name() const override
+  name() const final override
   {
     return "Acts::PerigeeSurface";
   }
@@ -87,7 +87,7 @@ public:
   ///
   /// @param sl is the ostream to be dumped into
   virtual std::ostream&
-  dump(std::ostream& sl) const override;
+  dump(std::ostream& sl) const final override;
 };
 
 inline PerigeeSurface*
diff --git a/Core/include/ACTS/Surfaces/RadialBounds.hpp b/Core/include/ACTS/Surfaces/RadialBounds.hpp
index 710d3bcfe3f10f76d9a5a0318c6289fa2ea86317..2889fd0d75dc99c63fc621a8455c7cfd0b5bcf68 100644
--- a/Core/include/ACTS/Surfaces/RadialBounds.hpp
+++ b/Core/include/ACTS/Surfaces/RadialBounds.hpp
@@ -74,7 +74,7 @@ public:
 
   /// Implicit constructor
   virtual RadialBounds*
-  clone() const override;
+  clone() const final override;
 
   /// Return of sourface bounds
   virtual SurfaceBounds::BoundsType
@@ -90,7 +90,7 @@ public:
   ///
   /// @return is a boolean indicating the operation success
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const override;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final override;
 
   /// Inside check for the first coordinate
   ///
@@ -99,7 +99,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const override;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// Inside check for the bounds object with tolerance
   /// checks for second coordinate only.
@@ -109,7 +109,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const override;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary calculation
   ///
@@ -117,7 +117,7 @@ public:
   ///
   /// @return distance to boundary ( > 0 if outside and <=0 if inside)
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const override;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// Return method for inner Radius
   double
@@ -140,7 +140,7 @@ public:
   ///
   /// @param sl is the ostream to be dumped into
   virtual std::ostream&
-  dump(std::ostream& sl) const override;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// private helper method for inside
diff --git a/Core/include/ACTS/Surfaces/RectangleBounds.hpp b/Core/include/ACTS/Surfaces/RectangleBounds.hpp
index bae03dbfa32813a874c97541c50ae8b4caff639e..e33dc0711d3d4b9d35e0616aa2430fd48cf2e890 100644
--- a/Core/include/ACTS/Surfaces/RectangleBounds.hpp
+++ b/Core/include/ACTS/Surfaces/RectangleBounds.hpp
@@ -59,11 +59,11 @@ public:
 
   /// Virtual constructor
   virtual RectangleBounds*
-  clone() const override;
+  clone() const final override;
 
   /// Return the type of the bounds for persistency
   virtual BoundsType
-  type() const override
+  type() const final override
   {
     return SurfaceBounds::Rectangle;
   }
@@ -77,7 +77,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const override;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final override;
 
   /// Inside check for the bounds object with tolerance
   /// checks for first coordinate only.
@@ -87,7 +87,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const override;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// Inside check for the bounds object with tolerance
   /// checks for second coordinate only.
@@ -97,7 +97,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const override;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary ( > 0 if outside and <=0 if inside)
   ///
@@ -105,7 +105,7 @@ public:
   ///
   /// @return is a signed distance parameter
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const override;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// Return method for the half length in X
   double
@@ -117,17 +117,17 @@ public:
 
   /// Return the vertices - or, the points of the extremas
   virtual const std::vector<Vector2D>
-  vertices() const final;
+  vertices() const final override;
 
   // Bounding box representation
   virtual const RectangleBounds&
-  boundingBox() const final;
+  boundingBox() const final override;
 
   /// Output Method for std::ostream
   ///
   /// @param sl is the ostream for the dump
   virtual std::ostream&
-  dump(std::ostream& sl) const final;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// Private helper method
diff --git a/Core/include/ACTS/Surfaces/StrawSurface.hpp b/Core/include/ACTS/Surfaces/StrawSurface.hpp
index 6204231deb0d0cf76e3bf489b2aa6c6848e9bd24..783b8286e7199a960008806a6763bba92a43b7dc 100644
--- a/Core/include/ACTS/Surfaces/StrawSurface.hpp
+++ b/Core/include/ACTS/Surfaces/StrawSurface.hpp
@@ -90,18 +90,18 @@ public:
   ///
   /// @param shift is an optional shift to be applied
   virtual StrawSurface*
-  clone(const Transform3D* shift = nullptr) const override;
+  clone(const Transform3D* shift = nullptr) const final override;
 
   /// Return the surface type
   virtual SurfaceType
-  type() const override
+  type() const final override
   {
     return Surface::Straw;
   }
 
   /// Return properly formatted class name for screen output */
   virtual std::string
-  name() const override
+  name() const final override
   {
     return "Acts::StrawSurface";
   };
diff --git a/Core/include/ACTS/Surfaces/TrapezoidBounds.hpp b/Core/include/ACTS/Surfaces/TrapezoidBounds.hpp
index eed32a050144d90332a54f514dbabd2537160a4b..22d9d64551b97c93f8b69023ec15ed891750b280 100644
--- a/Core/include/ACTS/Surfaces/TrapezoidBounds.hpp
+++ b/Core/include/ACTS/Surfaces/TrapezoidBounds.hpp
@@ -71,7 +71,7 @@ public:
 
   /// Virtual constructor
   virtual TrapezoidBounds*
-  clone() const final;
+  clone() const final override;
 
   /// Return the type of the bounds for persistency
   virtual BoundsType
@@ -155,7 +155,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final override;
 
   /// This method checks inside bounds in loc0
   /// @note loc0/loc1 correspond to the natural coordinates of the surface
@@ -167,7 +167,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// This method checks inside bounds in loc0
   /// @note loc0/loc1 correspond to the natural coordinates of the surface
@@ -179,7 +179,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary ( > 0 if outside and <=0 if inside)
   ///
@@ -187,21 +187,21 @@ public:
   ///
   /// @return is a signed distance parameter
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const final;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// Return the vertices - or, the points of the extremas
   virtual const std::vector<Vector2D>
-  vertices() const final;
+  vertices() const final override;
 
   // Bounding box representation
   virtual const RectangleBounds&
-  boundingBox() const final;
+  boundingBox() const final override;
 
   /// Output Method for std::ostream
   ///
   /// @param sl is the ostream to be dumped into
   virtual std::ostream&
-  dump(std::ostream& sl) const final;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// private helper method for inside check
diff --git a/Core/include/ACTS/Surfaces/TriangleBounds.hpp b/Core/include/ACTS/Surfaces/TriangleBounds.hpp
index 18b24d37fc8f363a746e51eb12f453c8b666cfc5..f7fdd26701b0e665dc350563b405a4251e833aa1 100644
--- a/Core/include/ACTS/Surfaces/TriangleBounds.hpp
+++ b/Core/include/ACTS/Surfaces/TriangleBounds.hpp
@@ -68,7 +68,7 @@ public:
 
   /// Virtual constructor
   virtual TriangleBounds*
-  clone() const final;
+  clone() const final override;
 
   /// Return the type of the bounds for persistency
   virtual BoundsType
@@ -85,7 +85,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final;
+  inside(const Vector2D& lpos, const BoundaryCheck& bcheck) const final override;
 
   /// This method checks if the provided local coordinate 1 is inside the
   /// surface bounds
@@ -95,7 +95,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final;
+  insideLoc0(const Vector2D& lpos, double tol0 = 0.) const final override;
 
   /// This method checks if the provided local coordinate 2 is inside the
   /// surface bounds
@@ -105,7 +105,7 @@ public:
   ///
   /// @return boolean indicator for the success of this operation
   virtual bool
-  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final;
+  insideLoc1(const Vector2D& lpos, double tol1 = 0.) const final override;
 
   /// Minimal distance to boundary ( > 0 if outside and <=0 if inside)
   ///
@@ -113,21 +113,21 @@ public:
   ///
   /// @return is a signed distance parameter
   virtual double
-  distanceToBoundary(const Vector2D& lpos) const final;
+  distanceToBoundary(const Vector2D& lpos) const final override;
 
   /// This method returns the coordinates of vertices
   const std::vector<Vector2D>
-  vertices() const final;
+  vertices() const final override;
 
   // Bounding box representation
   virtual const RectangleBounds&
-  boundingBox() const final;
+  boundingBox() const final override;
 
   /// Output Method for std::ostream
   ///
   /// @param sl is the ostream to be dumped into
   virtual std::ostream&
-  dump(std::ostream& sl) const final;
+  dump(std::ostream& sl) const final override;
 
 private:
   /// Private helper method