diff --git a/src/query/v2/multiframe.cpp b/src/query/v2/multiframe.cpp
index e5aaca883..c007baf7c 100644
--- a/src/query/v2/multiframe.cpp
+++ b/src/query/v2/multiframe.cpp
@@ -11,6 +11,9 @@
 
 #include "query/v2/multiframe.hpp"
 
+#include <algorithm>
+#include <iterator>
+
 #include "query/v2/bindings/frame.hpp"
 #include "utils/pmr/vector.hpp"
 
@@ -71,12 +74,23 @@ ValidFramesConsumer MultiFrame::GetValidFramesConsumer() { return ValidFramesCon
 
 InvalidFramesPopulator MultiFrame::GetInvalidFramesPopulator() { return InvalidFramesPopulator{*this}; }
 
-ValidFramesReader::ValidFramesReader(MultiFrame &multiframe) : multiframe_(multiframe) {}
+ValidFramesReader::ValidFramesReader(MultiFrame &multiframe) : multiframe_(multiframe) {
+  /*
+  From: https://en.cppreference.com/w/cpp/algorithm/find
+  Returns an iterator to the first element in the range [first, last) that satisfies specific criteria:
+  find_if searches for an element for which predicate p returns true
+  Return value
+    Iterator to the first element satisfying the condition or last if no such element is found.
+
+  -> this is what we want. We want the "after" last valid frame (weather this is vector::end or and invalid frame).
+  */
+  auto it = std::find_if(multiframe.frames_.begin(), multiframe.frames_.end(),
+                         [](const auto &frame) { return !frame.IsValid(); });
+  after_last_valid_frame_ = multiframe_.frames_.data() + std::distance(multiframe.frames_.begin(), it);
+}
 
 ValidFramesReader::Iterator ValidFramesReader::begin() { return Iterator{&multiframe_.frames_[0], *this}; }
-ValidFramesReader::Iterator ValidFramesReader::end() {
-  return Iterator{multiframe_.frames_.data() + multiframe_.frames_.size(), *this};
-}
+ValidFramesReader::Iterator ValidFramesReader::end() { return Iterator{after_last_valid_frame_, *this}; }
 
 ValidFramesModifier::ValidFramesModifier(MultiFrame &multiframe) : multiframe_(multiframe) {}
 
diff --git a/src/query/v2/multiframe.hpp b/src/query/v2/multiframe.hpp
index cc3dbd12a..c1bf9cdf1 100644
--- a/src/query/v2/multiframe.hpp
+++ b/src/query/v2/multiframe.hpp
@@ -107,18 +107,14 @@ class ValidFramesReader {
     using pointer = value_type *;
     using reference = const Frame &;
 
-    Iterator(FrameWithValidity *ptr, ValidFramesReader &iterator_wrapper)
-        : ptr_(ptr), iterator_wrapper_(&iterator_wrapper) {}
+    explicit Iterator(FrameWithValidity *ptr, ValidFramesReader &iterator_wrapper) : ptr_(ptr) {}
 
     reference operator*() const { return *ptr_; }
     pointer operator->() { return ptr_; }
 
     // Prefix increment
     Iterator &operator++() {
-      do {
-        ptr_++;
-      } while (*this != iterator_wrapper_->end() && !ptr_->IsValid());
-
+      ptr_++;
       return *this;
     }
 
@@ -127,13 +123,13 @@ class ValidFramesReader {
 
    private:
     FrameWithValidity *ptr_;
-    ValidFramesReader *iterator_wrapper_;
   };
 
   Iterator begin();
   Iterator end();
 
  private:
+  FrameWithValidity *after_last_valid_frame_;
   MultiFrame &multiframe_;
 };