diff --git a/Trigger/TrigHypothesis/TrigHypoCommonTools/TrigHypoCommonTools/L1InfoHypoTool.h b/Trigger/TrigHypothesis/TrigHypoCommonTools/TrigHypoCommonTools/L1InfoHypoTool.h
index 0a57b49eb7fa8843de80cea0a3a23cba71cc08e0..0f2a20c5afd874865d871e80330678ec1be9b7f9 100644
--- a/Trigger/TrigHypothesis/TrigHypoCommonTools/TrigHypoCommonTools/L1InfoHypoTool.h
+++ b/Trigger/TrigHypothesis/TrigHypoCommonTools/TrigHypoCommonTools/L1InfoHypoTool.h
@@ -8,7 +8,7 @@
 #include "Gaudi/Property.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "L1Decoder/CTPUnpackingTool.h"
+#include "L1Decoder/ICTPUnpackingTool.h"
 
 #include "IL1InfoHypoTool.h"
 
@@ -26,7 +26,7 @@ public:
 private:
     HLT::Identifier m_decisionId;
     Gaudi::Property <std::vector<std::string>> m_l1ItemNames {this, "L1ItemNames"};
-    ToolHandle <CTPUnpackingTool> m_ctpUnpackingTool {this, "CTPUnpackingTool", "CTPUnpackingTool"};
+    ToolHandle <ICTPUnpackingTool> m_ctpUnpackingTool {this, "CTPUnpackingTool", "CTPUnpackingTool"};
 };
 
 #endif //TRIGHYPOCOMMONTOOLS_L1INFOHYPOTOOL_H
\ No newline at end of file
diff --git a/Trigger/TrigSteer/L1Decoder/CMakeLists.txt b/Trigger/TrigSteer/L1Decoder/CMakeLists.txt
index 6c516ca73e62d1f7767873b4ac9caeb795de490d..a31a47f532740242523d857800c70e1c554b2628 100644
--- a/Trigger/TrigSteer/L1Decoder/CMakeLists.txt
+++ b/Trigger/TrigSteer/L1Decoder/CMakeLists.txt
@@ -9,13 +9,12 @@ find_package( CLHEP )
 
 # Component(s) in the package:
 atlas_add_library( L1DecoderLib
-                   L1DecoderRoot/*.cxx
                    PUBLIC_HEADERS L1Decoder
                    INTERFACE 
                    LINK_LIBRARIES TrigConfInterfaces)
                    
 atlas_add_component( L1Decoder
-                     src/*.cxx src/components/*.cxx L1DecoderRoot/*.cxx
+                     src/*.cxx src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                      LINK_LIBRARIES ${CLHEP_LIBRARIES} AthViews AthenaBaseComps AthenaKernel AthenaMonitoringKernelLib GaudiKernel L1DecoderLib StoreGateLib TrigCompositeUtilsLib TrigConfData TrigConfHLTData TrigConfL1Data TrigCostMonitorMTLib TrigSteeringEvent TrigT1Interfaces TrigT1Result TrigTimeAlgsLib xAODEventInfo xAODTrigger TrigConfxAODLib  )
 
diff --git a/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingTool.h
index 53d1f72df5dcfac9e8f00b6e72cc412bb4530f0d..d8b306166ab472b51de2b20d14f04a88ab1584af 100644
--- a/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingTool.h
+++ b/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingTool.h
@@ -29,7 +29,7 @@ public:
 
   virtual StatusCode start() override;
 
-  StatusCode passBeforePrescaleSelection(const ROIB::RoIBResult* roib, const std::vector<std::string>& l1ItemNames, bool& pass) const;
+  virtual StatusCode passBeforePrescaleSelection(const ROIB::RoIBResult* roib, const std::vector<std::string>& l1ItemNames, bool& pass) const;
 
 private:
   // Menu objects (that act here as configuration) need to be available in detector store.
diff --git a/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingToolBase.h b/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingToolBase.h
index e524808911cffec636e19e5326d9d3eece2d259f..dff6163befe1c15a68b6131c3e4a89938504519b 100644
--- a/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingToolBase.h
+++ b/Trigger/TrigSteer/L1Decoder/L1Decoder/CTPUnpackingToolBase.h
@@ -29,12 +29,12 @@ public:
                        const IInterface* parent);
 
   virtual StatusCode decode(const ROIB::RoIBResult& /*roib*/,
-                            HLT::IDVec& /*enabledChains*/) const override
-  { return StatusCode::SUCCESS; }
+                            HLT::IDVec& /*enabledChains*/) const override;
 
   virtual StatusCode initialize() override;
 
-  virtual StatusCode passBeforePrescaleSelection(const ROIB::RoIBResult* roib, const std::vector<std::string>& l1ItemNames, bool& pass) const override;
+  virtual StatusCode passBeforePrescaleSelection(const ROIB::RoIBResult* /*roib*/,
+                            const std::vector<std::string>& /*l1ItemNames*/, bool& /*pass*/) const override;
 
 protected:
 
diff --git a/Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingTool.cxx b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.cxx
similarity index 100%
rename from Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingTool.cxx
rename to Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.cxx
diff --git a/Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingToolBase.cxx b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingToolBase.cxx
similarity index 71%
rename from Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingToolBase.cxx
rename to Trigger/TrigSteer/L1Decoder/src/CTPUnpackingToolBase.cxx
index 2a228fe7bf5f556560498823b76394b837d4e057..a9976d88c3d6465ce02dc15879afb833df4e75ae 100644
--- a/Trigger/TrigSteer/L1Decoder/L1DecoderRoot/CTPUnpackingToolBase.cxx
+++ b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingToolBase.cxx
@@ -25,5 +25,11 @@ StatusCode CTPUnpackingToolBase::initialize()
 }
 
 StatusCode CTPUnpackingToolBase::passBeforePrescaleSelection(const ROIB::RoIBResult* /*roib*/, const std::vector<std::string>& /*l1ItemNames*/, bool& /*pass*/) const {
-  return StatusCode::SUCCESS;
+  ATH_MSG_ERROR("Base class should not call this function");
+  return StatusCode::FAILURE;
+}
+
+StatusCode CTPUnpackingToolBase::decode(const ROIB::RoIBResult& /*roib*/, HLT::IDVec& /*enabledChains*/) const {
+  ATH_MSG_ERROR("Base class should not call this function");
+  return StatusCode::FAILURE;
 }