diff --git a/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/suggest/fst/FSTLookup.java b/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/suggest/fst/FSTLookup.java
index 1b7ea77..a3e6319 100644
--- a/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/suggest/fst/FSTLookup.java
+++ b/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/suggest/fst/FSTLookup.java
@@ -335,7 +335,7 @@
         // so we will collect it too.
         output.setLength(matchLength);
         if (collect(res, num, weight, output, arc) && greedy) {
-          // We have enough suggestion to return immediately. Keep on looking for an
+          // We have enough suggestions to return immediately. Keep on looking for an
           // exact match, if requested.
           if (exactMatchFirst) {
             Float exactMatchWeight = getExactMatchStartingFromRootArc(i, key);
diff --git a/lucene/contrib/spellchecker/src/test/org/apache/lucene/search/suggest/fst/FSTLookupTest.java b/lucene/contrib/spellchecker/src/test/org/apache/lucene/search/suggest/fst/FSTLookupTest.java
index 057c87e..224ab3f 100644
--- a/lucene/contrib/spellchecker/src/test/org/apache/lucene/search/suggest/fst/FSTLookupTest.java
+++ b/lucene/contrib/spellchecker/src/test/org/apache/lucene/search/suggest/fst/FSTLookupTest.java
@@ -43,6 +43,12 @@
 
   public void setUp() throws Exception {
     super.setUp();
+
+    lookup = new FSTLookup();
+    lookup.build(new TermFreqArrayIterator(evalKeys()));
+  }
+
+  private TermFreq[] evalKeys() {
     final TermFreq[] keys = new TermFreq[] {
         tf("one", 0.5f),
         tf("oneness", 1),
@@ -61,9 +67,7 @@
         tf("fourty", 1),
         tf("xo", 1),
       };
-
-      lookup = new FSTLookup();
-      lookup.build(new TermFreqArrayIterator(keys));
+    return keys;
   }
 
   public void testExactMatchHighPriority() throws Exception {
@@ -76,6 +80,31 @@
         "oneness/1.0");
   }
 
+  public void testRequestedCount() throws Exception {
+    // 'one' is promoted after collecting two higher ranking results.
+    assertMatchEquals(lookup.lookup("one", true, 2), 
+        "one/0.0", 
+        "oneness/1.0");
+
+    // 'one' is at the top after collecting all alphabetical results. 
+    assertMatchEquals(lookup.lookup("one", false, 2), 
+        "one/0.0", 
+        "oneness/1.0");
+
+    lookup = new FSTLookup(10, false);
+    lookup.build(new TermFreqArrayIterator(evalKeys()));
+    
+    // 'one' is not promoted after collecting two higher ranking results.
+    assertMatchEquals(lookup.lookup("one", true, 2),  
+        "oneness/1.0",
+        "onerous/1.0");
+
+    // 'one' is at the top after collecting all alphabetical results. 
+    assertMatchEquals(lookup.lookup("one", false, 2), 
+        "one/0.0", 
+        "oneness/1.0");
+  }
+
   public void testMiss() throws Exception {
     assertMatchEquals(lookup.lookup("xyz", true, 1));
   }
