diff --git a/Phys/ParticleMatching/src/MatchVeloTrackToVertex.cpp b/Phys/ParticleMatching/src/MatchVeloTrackToVertex.cpp
index cdbf74988b5479fe0db7e30c39b6ac4ac5d084ad..ba5906806bf5b60e1161c24c3e48946c8ab41e06 100644
--- a/Phys/ParticleMatching/src/MatchVeloTrackToVertex.cpp
+++ b/Phys/ParticleMatching/src/MatchVeloTrackToVertex.cpp
@@ -141,9 +141,21 @@ filter_output_t MatchVeloTrackToVertex::operator()( const LHCb::Particle::Range&
           seed_vertex_pos, Gaudi::Math::Line{closest_velo_state.position(), closest_velo_state.slopes()} );
       if ( ip > m_match_ip_cut || abs( closest_velo_state.slopes().eta() - seed->momentum().eta() ) > m_eta_tolerance )
         continue;
+
+      // use Xi properties for particle transport by default
+      auto track_pid = LHCb::Tr::PID( 3312 );
+      try {
+        track_pid = LHCb::Tr::PID( seed->particleID().abspid() );
+      } catch ( const std::runtime_error& e ) {
+        warning()
+            << "PID " << seed->particleID().abspid()
+            << " is not known in TrackDefaultParticles. Using Xi properties instead. This can lead to wrong results!"
+            << endmsg;
+      }
+
       // transport seed to velo state position to get a proper momentum estimate
-      if ( m_extrapolator->propagate( seed_as_state, closest_velo_state.position().z(), *lhcb.geometry(),
-                                      LHCb::Tr::PID( seed->particleID().abspid() ) ) == StatusCode::FAILURE ) {
+      if ( m_extrapolator->propagate( seed_as_state, closest_velo_state.position().z(), *lhcb.geometry(), track_pid ) ==
+           StatusCode::FAILURE ) {
         seed_as_state = compositeParticleToState( *seed );
         continue;
       }
@@ -153,8 +165,7 @@ filter_output_t MatchVeloTrackToVertex::operator()( const LHCb::Particle::Range&
         state->setErrQOverP2( seed_as_state.errQOverP2() );
       }
       if ( msgLevel( MSG::DEBUG ) ) velo_track->fillStream( std::cout );
-      if ( m_velo_track_refitter->operator()( *velo_track, *lhcb.geometry(),
-                                              LHCb::Tr::PID( seed->particleID().abspid() ) ) == StatusCode::FAILURE ) {
+      if ( m_velo_track_refitter->operator()( *velo_track, *lhcb.geometry(), track_pid ) == StatusCode::FAILURE ) {
         seed_as_state = compositeParticleToState( *seed );
         continue;
       }
@@ -165,8 +176,8 @@ filter_output_t MatchVeloTrackToVertex::operator()( const LHCb::Particle::Range&
       const auto velo_lastm_fitted = velo_track->stateAt( LHCb::State::Location::LastMeasurement );
       debug() << "Velo state after fitting (LastMeasurement)" << endmsg;
       if ( msgLevel( MSG::DEBUG ) ) velo_lastm_fitted->fillStream( std::cout );
-      if ( m_extrapolator->propagate( seed_as_state, velo_lastm_fitted->z(), *lhcb.geometry(),
-                                      LHCb::Tr::PID( seed->particleID().abspid() ) ) == StatusCode::FAILURE ) {
+      if ( m_extrapolator->propagate( seed_as_state, velo_lastm_fitted->z(), *lhcb.geometry(), track_pid ) ==
+           StatusCode::FAILURE ) {
         seed_as_state = compositeParticleToState( *seed );
         continue;
       }