diff --git a/DetectorDescription/RoiDescriptor/RoiDescriptor/RoiDescriptor.h b/DetectorDescription/RoiDescriptor/RoiDescriptor/RoiDescriptor.h
index e975716a1d3f2f69e8ee4e91bcf5a32f6f12a777..1c06c85017d5ef9861f918ce44220d3410d96a86 100644
--- a/DetectorDescription/RoiDescriptor/RoiDescriptor/RoiDescriptor.h
+++ b/DetectorDescription/RoiDescriptor/RoiDescriptor/RoiDescriptor.h
@@ -91,9 +91,9 @@ public:
 
   // Methods to retrieve data members
 
-  virtual double phi() const override { return m_phi; }
-  virtual double eta() const override { return m_eta; }
-  virtual double zed() const override { return m_zed; }
+  virtual double phi() const override final { return m_phi; }
+  virtual double eta() const override final { return m_eta; }
+  virtual double zed() const override final { return m_zed; }
 
   /// these quantities probably don't need to be used any more
   /// - they are implemented here only because we had them in 
@@ -103,18 +103,18 @@ public:
   virtual unsigned int l1Id()    const override { return 0; }
   virtual unsigned int roiWord() const override { return 0; }
 
-  virtual double zedPlus()  const override { return m_zedPlus; } //!< z at the most forward end of the RoI
-  virtual double zedMinus() const override { return m_zedMinus; } //!< z at the most backward end of the RoI
+  virtual double zedPlus()  const override final { return m_zedPlus; } //!< z at the most forward end of the RoI
+  virtual double zedMinus() const override final { return m_zedMinus; } //!< z at the most backward end of the RoI
 
-  virtual double etaPlus()  const override { return m_etaPlus; }   //!< gets eta at zedPlus
-  virtual double etaMinus() const override { return m_etaMinus; }   //!< gets eta at zMinus
+  virtual double etaPlus()  const override final { return m_etaPlus; }   //!< gets eta at zedPlus
+  virtual double etaMinus() const override final { return m_etaMinus; }   //!< gets eta at zMinus
 
-  virtual double phiPlus()  const override { return m_phiPlus; }    //!< gets phiPlus
-  virtual double phiMinus() const override { return m_phiMinus; }   //!< gets phiMinus
+  virtual double phiPlus()  const override final { return m_phiPlus; }    //!< gets phiPlus
+  virtual double phiMinus() const override final { return m_phiMinus; }   //!< gets phiMinus
 
 
   /// versioning 
-  virtual int version() const override { return m_version; }
+  virtual int version() const override final { return m_version; }
   void version(int v)                  { m_version = v; }
 
 
@@ -123,12 +123,12 @@ public:
 
 
   /// is this a full scan RoI?
-  virtual bool  isFullscan() const override { return m_fullscan; }
+  virtual bool  isFullscan() const override final { return m_fullscan; }
  
   /// SuperRoI compatability methods
 
   /// am I a SuperRoi?
-  virtual bool composite() const override { return m_composite; }
+  virtual bool composite() const override final { return m_composite; }
   void setComposite(bool b=true)          { m_composite=b; }
 
   /// always manage constituents ???
@@ -136,10 +136,10 @@ public:
   void manageConstituents(bool b) { m_manageConstituents=b; }
 
   /// number of constituents
-  virtual unsigned size() const override { return m_roiDescriptors.size(); }
+  virtual unsigned size() const override final { return m_roiDescriptors.size(); }
 
   /// find an RoiDescriptor constituent
-  virtual const IRoiDescriptor* at(int i) const override { return m_roiDescriptors.at(i); }
+  virtual const IRoiDescriptor* at(int i) const override final { return m_roiDescriptors.at(i); }
 
   /// clear the vector
   void clear()  { m_roiDescriptors.clear(); }  // setComposite(false); }
@@ -151,30 +151,26 @@ public:
   void push_back(const IRoiDescriptor* roi) { m_roiDescriptors.push_back(roi); setComposite(true); }
 
   /// iterators
-  virtual roi_iterator  begin() const override { return m_roiDescriptors.begin(); }
-  virtual roi_iterator  end()   const override { return m_roiDescriptors.end(); }
+  virtual roi_iterator  begin() const override final { return m_roiDescriptors.begin(); }
+  virtual roi_iterator  end()   const override final { return m_roiDescriptors.end(); }
 
+  /// return the gradients
+  virtual double dzdrMinus() const override final { return m_dzdrMinus; }       //!<  dz/dr at the rear of the RoI
+  virtual double dzdrPlus()  const override final { return m_dzdrPlus; }        //!<  dz/dr at the front of the RoI
 
-
-  /// methods to determine whether coordinates or stubs are within the RoI 
-
-  /// return the gradients 
-  virtual double dzdrMinus() const override { return m_dzdrMinus; }       //!<  dz/dr at the rear of the RoI
-  virtual double dzdrPlus()  const override { return m_dzdrPlus; }        //!<  dz/dr at the front of the RoI
-
-  virtual double drdzMinus() const override { return m_drdzMinus; }       //!<  dr/dz at the rear of the RoI
-  virtual double drdzPlus()  const override { return m_drdzPlus; }        //!<  dr/dz at the front of the RoI
+  virtual double drdzMinus() const override final { return m_drdzMinus; }       //!<  dr/dz at the rear of the RoI
+  virtual double drdzPlus()  const override final { return m_drdzPlus; }        //!<  dr/dz at the front of the RoI
 
   /// methods to calculate z position at the RoI boundary 
   /// at a given radius
-  virtual double zedMin(double r) const override;
-  virtual double zedMax(double r) const override;
+  virtual double zedMin(double r) const override final;
+  virtual double zedMax(double r) const override final;
 
-  virtual double zedOuterPlus()  const override { return m_zedOuterPlus; } //!< z at the most forward end of the RoI
-  virtual double zedOuterMinus() const override { return m_zedOuterMinus; } //!< z at the most backward end of the RoI
+  virtual double zedOuterPlus()  const override final { return m_zedOuterPlus; } //!< z at the most forward end of the RoI
+  virtual double zedOuterMinus() const override final { return m_zedOuterMinus; } //!< z at the most backward end of the RoI
 
-  virtual double rhoMin(double z) const override;
-  virtual double rhoMax(double z) const override;
+  virtual double rhoMin(double z) const override final;
+  virtual double rhoMax(double z) const override final;
 
 public:
 
diff --git a/DetectorDescription/RoiDescriptor/Root/RoiDescriptor.cxx b/DetectorDescription/RoiDescriptor/Root/RoiDescriptor.cxx
index 79f8f5fe4874bfdc2bbba39d76af0125746f7066..26e47b43ea940f725a5347d5495908a29f161d07 100644
--- a/DetectorDescription/RoiDescriptor/Root/RoiDescriptor.cxx
+++ b/DetectorDescription/RoiDescriptor/Root/RoiDescriptor.cxx
@@ -20,15 +20,12 @@
 #include <stdexcept>
 
 
-#ifndef M_2PI
-static const double M_2PI = 2*M_PI;
-#endif
-
-#ifndef M_PIF
-static const float  M_PIF = float(M_PI);
-#endif
-
-static const int RoiVersion = 4;
+namespace {
+  constexpr double M_2PI = 2*M_PI;
+  /// Single-precision PI for boundary checks to match EDM precision
+  constexpr float  M_PIF = M_PI;
+  constexpr int RoiVersion = 4;
+}
 
 std::atomic<double> RoiDescriptor::s_zedWidthDefault = 225;
 std::atomic<bool> RoiDescriptor::s_firstInstanceCreated = false;