Index: src/java/org/apache/lucene/search/spans/SpanScorer.java
===================================================================
--- src/java/org/apache/lucene/search/spans/SpanScorer.java	(revision 405568)
+++ src/java/org/apache/lucene/search/spans/SpanScorer.java	(working copy)
@@ -92,9 +92,23 @@
   public Explanation explain(final int doc) throws IOException {
     Explanation tfExplanation = new Explanation();
 
-    skipTo(doc);
-
-    float phraseFreq = (doc() == doc) ? freq : 0.0f;
+    //skipTo(doc);
+    //
+    //float phraseFreq = (doc() == doc) ? freq : 0.0f;
+    //
+    // :HACK: work arround for issue#LUCENE-569
+    //
+    // We can't trust spans.skipTo
+    //
+    // Do our own "next" loop, but don't calculate the freq untill we
+    // get where we are going...
+    boolean ok = false;
+    for (ok = spans.next(); ok && spans.doc() < doc; ok = spans.next()) {
+      /* NOOP */
+    }
+    if (ok) ok = setFreqCurrentDoc();
+    float phraseFreq = (ok && doc() == doc) ? freq : 0.0f;
+    //
     tfExplanation.setValue(getSimilarity().tf(phraseFreq));
     tfExplanation.setDescription("tf(phraseFreq=" + phraseFreq + ")");
 
