Index: src/test/org/apache/lucene/search/spans/TestBasics.java
===================================================================
--- src/test/org/apache/lucene/search/spans/TestBasics.java	(revision 607069)
+++ src/test/org/apache/lucene/search/spans/TestBasics.java	(working copy)
@@ -46,7 +46,13 @@
  */
 public class TestBasics extends LuceneTestCase {
   private IndexSearcher searcher;
-
+  
+  private class StartFirstSimilarity extends DefaultSimilarity {
+	  public float sloppyFreq(int distance) {
+		  return ((float)distance);
+	  }
+  }
+  
   public void setUp() throws Exception {
     super.setUp();
     RAMDirectory directory = new RAMDirectory();
@@ -255,7 +261,42 @@
     assertTrue(searcher.explain(query, 599).getValue() > 0.0f);
 
   }
+  
+  public void testSpanFirstStartZero() throws Exception {
+	    SpanTermQuery term1 = new SpanTermQuery(new Term("field", "nine"));
+	    SpanFirstQuery query = new SpanFirstQuery(term1, 4, false);
 
+	    checkHits(query, new int[]
+	      {9, 29, 39, 49, 59, 69, 79, 89, 99, 109, 129, 139, 149, 159, 
+	    	169, 179, 189, 199, 209, 229, 239, 249, 259, 269, 279, 289, 
+	    	299, 309, 329, 339, 349, 359, 369, 379, 389, 399, 409, 429, 
+	    	439, 449, 459, 469, 479, 489, 499, 509, 529, 539, 549, 559, 
+	    	569, 579, 589, 599, 609, 629, 639, 649, 659, 669, 679, 689, 
+	    	699, 709, 729, 739, 749, 759, 769, 779, 789, 799, 809, 829, 
+	    	839, 849, 859, 869, 879, 889, 899, 900, 901, 902, 903, 904, 
+	    	905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 
+	    	917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 
+	    	929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 
+	    	941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 
+	    	953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 
+	    	965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 
+	    	977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 
+	    	989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999});
+	  
+	    searcher.setSimilarity(new StartFirstSimilarity());
+	    Weight weight = query.weight(searcher);
+	    SpanScorer scorer = (SpanScorer)weight.scorer(searcher.getIndexReader());
+	    assertTrue(freqScore(scorer, 9, 1.0f));
+	    assertTrue(freqScore(scorer, 99, 2.0f));
+	    assertTrue(freqScore(scorer, 199, 4.0f));
+	    assertTrue(freqScore(scorer, 859, 4.0f));
+	    assertTrue(freqScore(scorer, 999, 5.0f));
+  }
+  public boolean freqScore(SpanScorer scorer, int doc, float value) throws IOException {
+	  scorer.skipTo(doc);
+	  return (scorer.freq == value);
+  }
+
   public void testSpanOr() throws Exception {
     SpanTermQuery term1 = new SpanTermQuery(new Term("field", "thirty"));
     SpanTermQuery term2 = new SpanTermQuery(new Term("field", "three"));
