Index: lucene/core/src/test/org/apache/lucene/search/TestFuzzyQuery.java
===================================================================
--- lucene/core/src/test/org/apache/lucene/search/TestFuzzyQuery.java	(revision 1368441)
+++ lucene/core/src/test/org/apache/lucene/search/TestFuzzyQuery.java	(working copy)
@@ -22,6 +22,7 @@
 import java.io.IOException;
 
 import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.index.IndexReader;
@@ -189,6 +190,41 @@
     directory.close();
   }
   
+  public void test2() throws Exception {
+    Directory directory = newDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(random(), directory, new MockAnalyzer(random(), MockTokenizer.KEYWORD, false));
+    addDoc("LANGE", writer);
+    addDoc("LUETH", writer);
+    addDoc("PIRSING", writer);
+    addDoc("RIEGEL", writer);
+    addDoc("TRZECZIAK", writer);
+    addDoc("WALKER", writer);
+    addDoc("WBR", writer);
+    addDoc("WE", writer);
+    addDoc("WEB", writer);
+    addDoc("WEBE", writer);
+    addDoc("WEBER", writer);
+    addDoc("WEBERE", writer);
+    addDoc("WEBREE", writer);
+    addDoc("WEBEREI", writer);
+    addDoc("WBRE", writer);
+    addDoc("WITTKOPF", writer);
+    addDoc("WOJNAROWSKI", writer);
+    addDoc("WRICKE", writer);
+
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = newSearcher(reader);
+    writer.close();
+
+    FuzzyQuery query = new FuzzyQuery(new Term("field", "WEBER"), 2, 1);
+    //query.setRewriteMethod(FuzzyQuery.SCORING_BOOLEAN_QUERY_REWRITE);
+    ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
+    assertEquals(8, hits.length);
+
+    reader.close();
+    directory.close();
+  }
+  
   /** 
    * MultiTermQuery provides (via attribute) information about which values
    * must be competitive to enter the priority queue. 
Index: lucene/core/src/java/org/apache/lucene/search/FuzzyTermsEnum.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/search/FuzzyTermsEnum.java	(revision 1368441)
+++ lucene/core/src/java/org/apache/lucene/search/FuzzyTermsEnum.java	(working copy)
@@ -363,23 +363,7 @@
       }
       //System.out.println("CHECK term=" + term.utf8ToString() + " ed=" + ed);
       
-      // scale to a boost and return (if similarity > minSimilarity)
-      if (ed == 0) { // exact match
-        boostAtt.setBoost(1.0F);
-        //System.out.println("  yes");
-        return AcceptStatus.YES;
-      } else {
-        final int codePointCount = UnicodeUtil.codePointCount(term);
-        final float similarity = 1.0f - ((float) ed / (float) 
-            (Math.min(codePointCount, termLength)));
-        if (similarity > minSimilarity) {
-          boostAtt.setBoost((similarity - minSimilarity) * scale_factor);
-          //System.out.println("  yes");
-          return AcceptStatus.YES;
-        } else {
-          return AcceptStatus.NO;
-        }
-      }
+      return acceptTerm(term, ed, boostAtt) ? AcceptStatus.YES : AcceptStatus.NO;
     }
     
     /** returns true if term is within k edits of the query term */
@@ -387,6 +371,20 @@
       return k == 0 ? term.equals(termRef) : matchers[k].run(term.bytes, term.offset, term.length);
     }
   }
+  
+  /** @lucene.internal: override to customize how terms are accepted */
+  protected boolean acceptTerm(BytesRef term, int ed, BoostAttribute boostAtt) {
+    // scale to a boost and return (if similarity > minSimilarity)
+    if (ed == 0) { // exact match
+      boostAtt.setBoost(1.0F);
+    } else {
+      final int codePointCount = UnicodeUtil.codePointCount(term);
+      final float similarity = 1.0f - ((float) ed / (float) 
+          (Math.min(codePointCount, termLength)));
+      boostAtt.setBoost((similarity - minSimilarity) * scale_factor);
+    }
+    return true;
+  }
 
   /** @lucene.internal */
   public float getMinSimilarity() {
Index: lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/SlowFuzzyTermsEnum.java
===================================================================
--- lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/SlowFuzzyTermsEnum.java	(revision 1368441)
+++ lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/SlowFuzzyTermsEnum.java	(working copy)
@@ -59,6 +59,27 @@
     }
   }
 
+  @Override
+  protected boolean acceptTerm(BytesRef term, int ed, BoostAttribute boostAtt) {
+    // scale to a boost and return (if similarity > minSimilarity)
+    if (ed == 0) { // exact match
+      boostAtt.setBoost(1.0F);
+      //System.out.println("  yes");
+      return true;
+    } else {
+      final int codePointCount = UnicodeUtil.codePointCount(term);
+      final float similarity = 1.0f - ((float) ed / (float) 
+          (Math.min(codePointCount, termLength)));
+      if (similarity > minSimilarity) {
+        boostAtt.setBoost((similarity - minSimilarity) * scale_factor);
+        //System.out.println("  yes");
+        return true;
+      } else {
+        return false;
+      }
+    }
+  }
+
   /**
    * Implement fuzzy enumeration with linear brute force.
    */
