diff --git a/src/polymesh/iterators.hh b/src/polymesh/iterators.hh
index 710931cdb8e3ec549fb2c27637e4edf048e976bb..cf88fe4a061e279dfeacb5d9c935b1aeb0f23d52 100644
--- a/src/polymesh/iterators.hh
+++ b/src/polymesh/iterators.hh
@@ -104,7 +104,7 @@ struct filtering_iterator final : smart_iterator<filtering_iterator<IteratorT, P
 {
     filtering_iterator(IteratorT it, PredT p) : it(std::forward<IteratorT>(it)), pred(std::forward<PredT>(p))
     {
-        if (it.is_valid())
+        if (it.is_valid() && !pred(*it))
             advance(); // skip initially false elements
     }