Index: src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java	(revision 538490)
+++ src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java	(working copy)
@@ -26,7 +26,10 @@
 import org.apache.lucene.search.Weight;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.BitSet;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -334,9 +337,13 @@
             // check if doc is a descendant of one of the context nodes
             int parentDoc = hResolver.getParent(doc);
 
+            List parentDocs = new ArrayList();
+            parentDocs.add(new Integer(parentDoc));
+
             // traverse
             while (parentDoc != -1 && !contextHits.get(parentDoc)) {
                 parentDoc = hResolver.getParent(parentDoc);
+                parentDocs.add(new Integer(parentDoc));
             }
 
             if (parentDoc != -1) {
@@ -342,7 +349,10 @@
             if (parentDoc != -1) {
                 // since current parentDoc is a descendant of one of the context
                 // docs we can promote all parentDocs to the context hits
-                contextHits.set(parentDoc);
+                for (Iterator iter = parentDocs.iterator(); iter.hasNext();) {
+                    Integer parentDocInteger = (Integer) iter.next();
+                    contextHits.set(parentDocInteger.intValue());                    
+                }
                 return true;
             }
             return false;
