diff --git a/Tr/TrackTools/src/StandaloneMuonRec.cpp b/Tr/TrackTools/src/StandaloneMuonRec.cpp
index e13c0f3ced94294a8e86211ba8ec278828fb8f5a..5372c690203e141c62cb2a049ab616dace84b5f6 100644
--- a/Tr/TrackTools/src/StandaloneMuonRec.cpp
+++ b/Tr/TrackTools/src/StandaloneMuonRec.cpp
@@ -84,7 +84,12 @@ namespace {
   };
 } // namespace
 
-template <class MuonPosition>
+/// MuonPositionConcept makes sure we are dealing either with CommonMuonHit or with MuonCluster
+template <typename MuonPosition>
+concept MuonPositionConcept =
+    requires { requires std::is_same_v<MuonPosition, CommonMuonHit> || std::is_same_v<MuonPosition, MuonCluster>; };
+
+template <MuonPositionConcept MuonPosition>
 class StandaloneMuonRec
     : public LHCb::Algorithm::Transformer<
           LHCb::Tracks( const std::vector<MuonPosition, LHCb::Allocators::EventLocal<MuonPosition>>&, const Cache& ),
@@ -166,7 +171,7 @@ DECLARE_COMPONENT_WITH_ID( StandaloneMuonRec<MuonCluster>, "StandaloneMuonRecWit
 //=============================================================================
 // Main execution
 //=============================================================================
-template <typename MuonPosition>
+template <MuonPositionConcept MuonPosition>
 LHCb::Tracks StandaloneMuonRec<MuonPosition>::operator()( const MuonPositionContainer& hitContainer,
                                                           const Cache&                 cache ) const {
 
@@ -204,7 +209,7 @@ LHCb::Tracks StandaloneMuonRec<MuonPosition>::operator()( const MuonPositionCont
 
   return outputTracks;
 }
-template <typename MuonPosition>
+template <MuonPositionConcept MuonPosition>
 bool StandaloneMuonRec<MuonPosition>::findCoincidence( const float x, const float y, const unsigned int station,
                                                        const unsigned int               regionBefore,
                                                        const std::vector<MuonPosition>& hits,
@@ -230,7 +235,7 @@ bool StandaloneMuonRec<MuonPosition>::findCoincidence( const float x, const floa
   }
   return findCand;
 }
-template <typename MuonPosition>
+template <MuonPositionConcept MuonPosition>
 void StandaloneMuonRec<MuonPosition>::findmuonTrack(
     const PositionsInStations& hitContainer, const Cache& cache,
     std::array<MuonPosition, LHCb::Detector::Muon::nStations>& bestCandidates, const int seed,
@@ -278,7 +283,7 @@ void StandaloneMuonRec<MuonPosition>::findmuonTrack(
     muonTracks.push_back( muon );
   }
 }
-template <typename MuonPosition>
+template <MuonPositionConcept MuonPosition>
 std::vector<StandaloneMuonTrack<MuonPosition>>
 StandaloneMuonRec<MuonPosition>::muonSearch( const PositionsInStations& hitContainer, const Cache& cache ) const {
   std::vector<StandaloneMuonTrack<MuonPosition>> muonTracks;
@@ -307,7 +312,7 @@ StandaloneMuonRec<MuonPosition>::muonSearch( const PositionsInStations& hitConta
 }
 
 // estimate the momentum of muonTrack
-template <typename MuonPosition>
+template <MuonPositionConcept MuonPosition>
 void StandaloneMuonRec<MuonPosition>::recMomentum( StandaloneMuonTrack<MuonPosition>& track, const Cache& cache,
                                                    LHCb::Track& lbtrack ) const {
 
@@ -386,9 +391,6 @@ void StandaloneMuonRec<MuonPosition>::recMomentum( StandaloneMuonTrack<MuonPosit
   const int DoFForPointAtZero = m_yAt0Error < std::numeric_limits<float>::max();
   lbtrack.setNDoF( track.nHits() - 2 + DoFForPointAtZero ); // add one degree of freedom for the point at 0/0/0
 
-  static_assert( std::is_same_v<MuonPosition, CommonMuonHit> || std::is_same_v<MuonPosition, MuonCluster>,
-                 "Muon position must either be a CommonMuonHit or a MuonCluster" );
-
   for ( int i = 0; i < track.nHits(); i++ ) {
     if constexpr ( std::is_same_v<MuonPosition, CommonMuonHit> ) {
       const auto tile = track.point( i ).tile();
@@ -409,7 +411,7 @@ void StandaloneMuonRec<MuonPosition>::recMomentum( StandaloneMuonTrack<MuonPosit
   lbtrack.setType( LHCb::Track::Types::Muon );
 }
 
-template <typename MuonPosition>
+template <MuonPositionConcept MuonPosition>
 void StandaloneMuonRec<MuonPosition>::detectClone( std::vector<StandaloneMuonTrack<MuonPosition>>& muonTracks,
                                                    const Cache&                                    cache ) const {