diff --git a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx
index a95abbf6d50f1dc3dabd229011b5f26492ba5758..2e4aaafbf3d78361ee3abb2d2d6ff32585875a0c 100644
--- a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx
+++ b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx
@@ -30,14 +30,15 @@ namespace Trk
 
   void GaussianTrackDensity::trackDensity(double z, double& density, double& firstDerivative, double& secondDerivative) const
   {
-    TrackEntry target(z);
-    lowerMapIterator first = m_lowerMap.lower_bound(target);
-    upperMapIterator final = m_upperMap.upper_bound(target);
-    trackMapIterator firstLoop = m_trackMap.find(first->second);
-    trackMapIterator finalLoop = m_trackMap.find(final->second);
     density = 0.0;
     firstDerivative = 0.0;
     secondDerivative = 0.0;
+    TrackEntry target(z);
+    lowerMapIterator first = m_lowerMap.lower_bound(target);  // first track whose UPPER bound is not less than z
+    upperMapIterator final = m_upperMap.upper_bound(target);  // first track whose LOWER bound is greater than z
+    trackMapIterator firstLoop = m_trackMap.find(first->second);  // this will be the first track we include
+    trackMapIterator finalLoop = m_trackMap.find(final->second);  // this will be the track after the last we include
+    if (firstLoop->second.lowerBound > z || finalLoop->second.upperBound < z) return;
     for (auto itrk = firstLoop; itrk != finalLoop && itrk != m_trackMap.end(); itrk++)
     {
       double delta = exp(itrk->second.c_0+z*(itrk->second.c_1 + z*itrk->second.c_2));
@@ -51,12 +52,13 @@ namespace Trk
 
   double GaussianTrackDensity::trackDensity(double z) const
   {
+    double sum = 0.0;
     TrackEntry target(z);
     lowerMapIterator first = m_lowerMap.lower_bound(target);
     upperMapIterator final = m_upperMap.upper_bound(target);
     trackMapIterator firstLoop = m_trackMap.find(first->second);
     trackMapIterator finalLoop = m_trackMap.find(final->second);
-    double sum = 0.0;
+    if (firstLoop->second.lowerBound > z || finalLoop->second.upperBound < z) return sum;
     for (auto itrk = firstLoop; itrk != finalLoop && itrk != m_trackMap.end(); itrk++)
     {
       //ATH_MSG_DEBUG("@z=" << z << " adding contrib from z0=" << itrk->first.parameters()[Trk::z0] <<