Index: contrib/analyzers/common/src/java/org/apache/lucene/analysis/cjk/CJKTokenizer.java
===================================================================
--- contrib/analyzers/common/src/java/org/apache/lucene/analysis/cjk/CJKTokenizer.java	(revision 799967)
+++ contrib/analyzers/common/src/java/org/apache/lucene/analysis/cjk/CJKTokenizer.java	(working copy)
@@ -272,4 +272,10 @@
         // return an empty string)
       }
     }
+    
+    public final void end() {
+      // set final offset
+      final int finalOffset = offset;
+      this.offsetAtt.setOffset(finalOffset, finalOffset);
+    }    
 }
Index: contrib/analyzers/common/src/java/org/apache/lucene/analysis/cn/ChineseTokenizer.java
===================================================================
--- contrib/analyzers/common/src/java/org/apache/lucene/analysis/cn/ChineseTokenizer.java	(revision 799967)
+++ contrib/analyzers/common/src/java/org/apache/lucene/analysis/cn/ChineseTokenizer.java	(working copy)
@@ -139,6 +139,11 @@
                 break;
             }
         }
-
     }
+    
+    public final void end() {
+      // set final offset
+      final int finalOffset = offset;
+      this.offsetAtt.setOffset(finalOffset, finalOffset);
+    }    
 }
Index: contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenizer.java
===================================================================
--- contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenizer.java	(revision 799967)
+++ contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenizer.java	(working copy)
@@ -152,6 +152,12 @@
     return true;
   }
   
+  public final void end() {
+    // set final offset
+    final int finalOffset = inLen;
+    this.offsetAtt.setOffset(finalOffset, finalOffset);
+  }    
+  
   /** @deprecated Will be removed in Lucene 3.0. This method is final, as it should
    * not be overridden. Delegates to the backwards compatibility layer. */
   public final Token next(final Token reusableToken) throws java.io.IOException {
Index: contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/NGramTokenizer.java
===================================================================
--- contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/NGramTokenizer.java	(revision 799967)
+++ contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/NGramTokenizer.java	(working copy)
@@ -97,6 +97,12 @@
     return true;
   }
   
+  public final void end() {
+    // set final offset
+    final int finalOffset = inLen;
+    this.offsetAtt.setOffset(finalOffset, finalOffset);
+  }    
+  
   /** @deprecated Will be removed in Lucene 3.0. This method is final, as it should
    * not be overridden. Delegates to the backwards compatibility layer. */
   public final Token next(final Token reusableToken) throws java.io.IOException {
Index: contrib/memory/src/java/org/apache/lucene/index/memory/PatternAnalyzer.java
===================================================================
--- contrib/memory/src/java/org/apache/lucene/index/memory/PatternAnalyzer.java	(revision 799967)
+++ contrib/memory/src/java/org/apache/lucene/index/memory/PatternAnalyzer.java	(working copy)
@@ -367,6 +367,11 @@
       }
     }
     
+    public final void end() {
+      // set final offset
+      final int finalOffset = str.length();
+    	this.offsetAtt.setOffset(finalOffset, finalOffset);
+    }    
   } 
   
   
@@ -442,6 +447,12 @@
       return true;
     }
     
+    public final void end() {
+      // set final offset
+      final int finalOffset = str.length();
+      this.offsetAtt.setOffset(finalOffset, finalOffset);
+    }    
+    
     private boolean isTokenChar(char c, boolean isLetter) {
       return isLetter ? Character.isLetter(c) : !Character.isWhitespace(c);
     }
