diff --git a/src/rust/liblektor-rs/src/database/queue.rs b/src/rust/liblektor-rs/src/database/queue.rs
index ebaf41ae1453875008a980070612975a92d3672c..10e4054124240cb2b6f7fde845d459acbda72ab3 100644
--- a/src/rust/liblektor-rs/src/database/queue.rs
+++ b/src/rust/liblektor-rs/src/database/queue.rs
@@ -1,4 +1,8 @@
-use std::collections::VecDeque;
+use std::{
+    collections::VecDeque,
+    ops::{Index, Range},
+    slice::SliceIndex,
+};
 
 /// The number of priority levels in the queues. The higher the number, the
 /// higher the priority.
@@ -52,6 +56,12 @@ pub struct LktDatabaseQueueIter<'a> {
     index: usize,
 }
 
+/// The iterator for a range of karas from the database queue.
+pub struct LktDatabaseQueueRangeIter<'a> {
+    iterator: LktDatabaseQueueIter<'a>,
+    remaining: usize,
+}
+
 impl<'a> Iterator for LktDatabaseQueueIter<'a> {
     type Item = u64;
 
@@ -123,4 +133,18 @@ impl LktDatabaseQueue {
             .find(|content| !content.is_empty())?;
         level.pop_front()
     }
+
+    pub fn range(&self, range: Range<usize>) -> LktDatabaseQueueRangeIter {
+        let mut iter = self.iter();
+        let remaining = range.end.checked_sub(range.start).unwrap_or(0);
+        if remaining >= 1 {
+            for _ in 0..range.start {
+                iter.next();
+            }
+        }
+        LktDatabaseQueueRangeIter {
+            iterator: iter,
+            remaining,
+        }
+    }
 }