diff --git a/src/main/java/org/apache/sling/query/impl/iterator/LastIterator.java b/src/main/java/org/apache/sling/query/impl/iterator/LastIterator.java
index 52acf92..bfbed8c 100644
--- a/src/main/java/org/apache/sling/query/impl/iterator/LastIterator.java
+++ b/src/main/java/org/apache/sling/query/impl/iterator/LastIterator.java
@@ -31,31 +31,39 @@
  */
 public class LastIterator<T> extends AbstractIterator<Option<T>> {
 
-	private final Iterator<Option<T>> iterator;
+    private final Iterator<Option<T>> iterator;
 
-	private Option<T> previous;
+    private Option<T> previous;
 
-	public LastIterator(Iterator<Option<T>> iterator) {
-		this.iterator = iterator;
-	}
+    public LastIterator(Iterator<Option<T>> iterator) {
+        this.iterator = iterator;
+    }
 
-	@Override
-	protected Option<T> getElement() {
-		Option<T> candidate = previous;
-		
-		if (!iterator.hasNext()) {
-			previous = null;
-			return candidate;
-		} 
-		
-		if (candidate == null) {
-			candidate = iterator.next();
-			if (!iterator.hasNext()) {
-				return candidate;
-			}
-		}
-		previous = iterator.next();
-		return Option.empty(candidate.getArgumentId());
-	}
+    @Override
+    protected Option<T> getElement() {
+        Option<T> candidate = previous;
+        if (!iterator.hasNext()) {
+            previous = null;
+            return candidate;
+        }
+        if (candidate == null) {
+            candidate = iterator.next();
+        }
+        while (candidate.isEmpty() && iterator.hasNext()) {
+            candidate = iterator.next();
+        }
+        if (!iterator.hasNext()) {
+            return candidate;
+        }
+        Option<T> next = iterator.next();
+        while (next.isEmpty() && iterator.hasNext()) {
+            next = iterator.next();
+        }
+        if (!iterator.hasNext() && next.isEmpty()) {
+            return candidate;
+        }
+        previous = next;
+        return Option.empty(candidate.getArgumentId());
+    }
 
 }
diff --git a/src/test/java/org/apache/sling/query/LastTest.java b/src/test/java/org/apache/sling/query/LastTest.java
index 8a197ff..86a65d8 100644
--- a/src/test/java/org/apache/sling/query/LastTest.java
+++ b/src/test/java/org/apache/sling/query/LastTest.java
@@ -28,19 +28,25 @@
 
 public class LastTest {
 
-	private static final String PAR_PATH = "home/java/labels/jcr:content/par";
+    private static final String PAR_PATH = "home/java/labels/jcr:content/par";
 
-	private Resource tree = TestUtils.getTree();
+    private Resource tree = TestUtils.getTree();
 
-	@Test
-	public void testLast() {
-		SlingQuery query = $(tree.getChild(PAR_PATH)).children().last();
-		assertResourceSetEquals(query.iterator(), "configvalue_2");
-	}
+    @Test
+    public void testLast() {
+        SlingQuery query = $(tree.getChild(PAR_PATH)).children().last();
+        assertResourceSetEquals(query.iterator(), "configvalue_2");
+    }
 
-	@Test
-	public void testLastOnEmptyCollection() {
-		SlingQuery query = $(tree).children("cq:Undefined").last();
-		assertEmptyIterator(query.iterator());
-	}
+    @Test
+    public void testLastOnEmptyCollection() {
+        SlingQuery query = $(tree).children("cq:Undefined").last();
+        assertEmptyIterator(query.iterator());
+    }
+    
+    @Test
+    public void testLastAfterFilter() {
+        SlingQuery query = $(tree.getChild(PAR_PATH)).children().filter("[key=helloWorld]").last();
+        assertResourceSetEquals(query.iterator(), "configvalue");
+    }
 }
