diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt
index dc60da07323b97681a23c1fe29b8b6628a105a2b..a4391bfad7f2db59cab14f05a0761a49a1be0b0f 100644
--- a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt
+++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt
@@ -12,12 +12,14 @@ atlas_depends_on_subdirs(  )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           Control/AthenaKernel
+                          Control/CxxUtils
                           GaudiKernel )
 
 # External dependencies:
 find_package( CLHEP )
 find_package( Eigen )
 find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+find_package( Boost COMPONENTS unit_test_framework )
 
 # tag rootMathLibs was not recognized in automatic conversion in cmt2cmake
 
@@ -30,3 +32,11 @@ atlas_add_component( InDetEtaDependentCuts
 
 # Install files from the package:
 atlas_install_headers( InDetEtaDependentCuts )
+atlas_install_joboptions( share/*.txt )
+
+atlas_add_test( InDetEtaDependentCutsSvc_test                
+   SOURCES test/InDetEtaDependentCutsSvc_test.cxx 
+   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
+   LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} AthenaKernel AthenaBaseComps GaudiKernel TestTools CxxUtils InDetRecToolInterfaces
+   POST_EXEC_SCRIPT "nopost.sh" )
+
diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h
index dd628f66ab0a1baf0c6720b78cc75e2b14ef341c..b9105c840ebd4b5466cebdc0196c6fbbd373a711 100644
--- a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h
+++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h
@@ -30,15 +30,15 @@ namespace InDet {
       InDetEtaDependentCutsSvc(const std::string& name, ISvcLocator* sl); 
       
       /// Destructor: 
-      virtual ~InDetEtaDependentCutsSvc(); 
+      virtual ~InDetEtaDependentCutsSvc() override final; 
       
-      virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvIF); 
+      virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvIF) final; 
       
-      StatusCode  initialize();
-      StatusCode  finalize();
+      StatusCode  initialize() override final;
+      StatusCode  finalize() override final;
       
-      void getValue(const InDet::CutName cutName, std::vector < double >& cut);
-      void getValue(const InDet::CutName cutName,    std::vector < int >& cut);
+      void getValue(const InDet::CutName cutName, std::vector < double >& cut) override final;
+      void getValue(const InDet::CutName cutName,    std::vector < int >& cut) override final;
       
       template <class T>
       T getValueAtEta(const std::vector< T > cuts, const double eta) const;
@@ -46,18 +46,18 @@ namespace InDet {
       template <class T>    
       void getValue(const InDet::CutName cutName, T& cut, const double eta);
       
-      double  getMaxEta() const;
-      double  getMinPtAtEta           (const double eta) const;
-      double  getMaxZImpactAtEta      (const double eta) const;
-      double  getMaxPrimaryImpactAtEta(const double eta) const;
-      int     getMinSiHitsAtEta       (const double eta) const;
-      int     getMinSiNotSharedAtEta  (const double eta) const;
-      int     getMaxSharedAtEta       (const double eta) const;
-      int     getMinPixelHitsAtEta    (const double eta) const;
-      int     getMaxSiHolesAtEta      (const double eta) const;
-      int     getMaxPixelHolesAtEta   (const double eta) const;
-      int     getMaxSctHolesAtEta     (const double eta) const;
-      int     getMaxDoubleHolesAtEta  (const double eta) const;
+      double  getMaxEta() const override final;
+      double  getMinPtAtEta           (const double eta) const override final;
+      double  getMaxZImpactAtEta      (const double eta) const override final;
+      double  getMaxPrimaryImpactAtEta(const double eta) const override final;
+      int     getMinSiHitsAtEta       (const double eta) const override final;
+      int     getMinSiNotSharedAtEta  (const double eta) const override final;
+      int     getMaxSharedAtEta       (const double eta) const override final;
+      int     getMinPixelHitsAtEta    (const double eta) const override final;
+      int     getMaxSiHolesAtEta      (const double eta) const override final;
+      int     getMaxPixelHolesAtEta   (const double eta) const override final;
+      int     getMaxSctHolesAtEta     (const double eta) const override final;
+      int     getMaxDoubleHolesAtEta  (const double eta) const override final;
       
       
     /////////////////////////////////////////////////////////////////// 
diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/share/InDetEtaDependentCutsTestJobOpts.txt b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/share/InDetEtaDependentCutsTestJobOpts.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a6c30adcc5e2d503810789f76e83f0b9728d1dce
--- /dev/null
+++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/share/InDetEtaDependentCutsTestJobOpts.txt
@@ -0,0 +1,3 @@
+ApplicationMgr.OutputLevel = 5;
+ApplicationMgr.CreateSvc += { "InDet::InDetEtaDependentCutsSvc" };
+MessageSvc.OutputLevel = 5;
diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/src/InDetEtaDependentCutsSvc.cxx b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/src/InDetEtaDependentCutsSvc.cxx
index 941bc8d3fcd51ea4428767fd9d1380b4e3b319c7..69fddc30421d0b8e729e9709f757706207a5afdb 100644
--- a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/src/InDetEtaDependentCutsSvc.cxx
+++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/src/InDetEtaDependentCutsSvc.cxx
@@ -47,13 +47,13 @@ namespace InDet {
       ATH_MSG_INFO ("Initializing " << name() << "...");
       
       if ((m_etaBins.size()-1) <= 0) {
-        ATH_MSG_ERROR( "Wrong inizialisation of eta bins. Check the eta bin values in " << name() );
+        ATH_MSG_ERROR( "Wrong initialisation of eta bins. Check the eta bin values in " << name() );
         return StatusCode::FAILURE;
       }
       
       // expecting eta bins in ascending order
       if (not std::is_sorted(m_etaBins.value().begin(), m_etaBins.value().end())) {
-        ATH_MSG_ERROR( "Wrong inizialisation of eta bins in " << name() << ". Values are not sorted!" );
+        ATH_MSG_ERROR( "Wrong initialisation of eta bins in " << name() << ". Values are not sorted!" );
         return StatusCode::FAILURE;
       }          
       
@@ -140,14 +140,14 @@ namespace InDet {
     }
 
     int InDetEtaDependentCutsSvc::getIndexByEta(const double eta) const {
-      double absEta = std::abs(eta);
+      const double absEta = std::abs(eta);
       if (absEta > m_etaBins.value().back()) {
         ATH_MSG_ERROR("Requesting cut value for eta outside expected range!! ");
         return -1;
       }
       
-      auto pVal =  std::lower_bound(m_etaBins.value().begin(), m_etaBins.value().end(), absEta);
-      int bin = std::distance(m_etaBins.value().begin(), pVal) - 1;
+      const auto pVal =  std::lower_bound(m_etaBins.value().begin(), m_etaBins.value().end(), absEta);
+      const int bin = std::distance(m_etaBins.value().begin(), pVal) - 1;
       ATH_MSG_DEBUG("Checking (abs(eta)/bin) = (" << absEta << "," << bin << ")");
       return bin;
     }
diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/IDEDCSvc_GaudiFixtureBase.h b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/IDEDCSvc_GaudiFixtureBase.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8c869ef2bed94898c2aa42dc280af46753cc4a9
--- /dev/null
+++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/IDEDCSvc_GaudiFixtureBase.h
@@ -0,0 +1,37 @@
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+/*
+ */
+/**
+ * @file InDetEtaDependentCuts/test/IDEDC_GaudiFixtureBase.h
+ * @author Shaun Roe
+ * @date June 2020
+ * @brief Base class for initialising Gaudi in fixtures
+ */
+
+#ifndef InDetPhysValMonitoring_IDPVM_GaudiFixtureBase_h
+#define InDetPhysValMonitoring_IDPVM_GaudiFixtureBase_h
+
+
+#include "TestTools/initGaudi.h"
+#include "TInterpreter.h"
+#include "CxxUtils/ubsan_suppress.h"
+#include <string>
+
+struct IDEDC_GaudiFixtureBase{
+  ISvcLocator* svcLoc{};
+  static bool gaudiIsInitialised;
+  const std::string jobOpts{};
+  IDEDC_GaudiFixtureBase(const std::string & jobOptionFile = "InDetEtaDependentCutsTestJobOpts.txt"):jobOpts(jobOptionFile){
+    CxxUtils::ubsan_suppress ([]() { TInterpreter::Instance(); } );
+    if (not gaudiIsInitialised){
+      std::string fullJobOptsName="InDetEtaDependentCuts/" + jobOpts;
+      gaudiIsInitialised=Athena_test::initGaudi(fullJobOptsName, svcLoc);
+    }
+  }
+};
+
+bool IDEDC_GaudiFixtureBase::gaudiIsInitialised=false;
+
+#endif
\ No newline at end of file
diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/InDetEtaDependentCutsSvc_test.cxx b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/InDetEtaDependentCutsSvc_test.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..d5be3ed7b4f871c16c949f59936882b2c9d487fb
--- /dev/null
+++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/InDetEtaDependentCutsSvc_test.cxx
@@ -0,0 +1,54 @@
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+ * @file InDetEtaDependentCuts/test/InDetEtaDependentCutsSvc_test.cxx
+ * @author Shaun Roe
+ * @date June, 2020
+ * @brief Some tests for InDetEtaDependentCutsSvc 
+ */
+ 
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MAIN
+#define BOOST_TEST_MODULE TEST_ETADEPENDENTCUTSSVC
+
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Woverloaded-virtual"
+#include <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
+#include "IDEDCSvc_GaudiFixtureBase.h"
+#include "../InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h"
+
+static const std::string testJobOptionsFile("InDetEtaDependentCutsTestJobOpts.txt");
+
+struct GaudiKernelFixture:public IDEDC_GaudiFixtureBase{
+  GaudiKernelFixture(const std::string & joFilename):IDEDC_GaudiFixtureBase(joFilename){
+    //nop, everything in base.
+  }
+};
+
+using namespace InDet;
+
+BOOST_AUTO_TEST_SUITE(EtaDependentCutsSvcTest)
+  GaudiKernelFixture g(testJobOptionsFile);
+  const auto & svcLoc=g.svcLoc;
+   ServiceHandle<IInDetEtaDependentCutsSvc> idEDCSvc ("InDet::InDetEtaDependentCutsSvc", "test");
+ 
+   BOOST_AUTO_TEST_CASE( sanityCheck ){
+     const bool svcLocatorIsOk=(svcLoc != nullptr);
+     BOOST_TEST(svcLocatorIsOk);
+   }
+   BOOST_AUTO_TEST_CASE( retrieveSvc ){
+     BOOST_TEST (idEDCSvc.retrieve().isSuccess());
+   }
+   BOOST_AUTO_TEST_CASE( interfaceID ){
+     InterfaceID testId("IInDetEtaDependentCutsSvc",1,0);
+     BOOST_TEST(idEDCSvc->interfaceID()==testId);
+   }
+   BOOST_AUTO_TEST_CASE(publicMethods){
+     BOOST_TEST(idEDCSvc->getMaxEta() == 4.0);
+   }
+BOOST_AUTO_TEST_SUITE_END()