anchor.diff:    }
   
   
  -  static List<Token> getTokens(TokenStream tstream) throws IOException {
  -    List<Token> tokens = new ArrayList<Token>();
  -    CharTermAttribute termAtt = tstream.addAttribute(CharTermAttribute.class);
  -    OffsetAttribute offsetAtt = tstream.addAttribute (OffsetAttribute.class);
  -    TypeAttribute typeAtt = tstream.addAttribute (TypeAttribute.class);
  -    FlagsAttribute flagsAtt = tstream.addAttribute (FlagsAttribute.class);
  -    PayloadAttribute payloadAtt = tstream.addAttribute (PayloadAttribute.class);
  -    PositionIncrementAttribute posIncAtt = tstream.addAttribute (PositionIncrementAttribute.class);
  +  static List<AttributeSource> getTokens(TokenStream tstream) throws IOException {
  +    List<AttributeSource> tokens = new ArrayList<AttributeSource>();
      
       while (true) {
         if (!tstream.incrementToken())
           break;
         else {
  -      	Token token = new Token();
  -      	token.copyBuffer(termAtt.buffer(), 0, termAtt.length());
  -      	token.setType(typeAtt.type());
  -      	token.setOffset(offsetAtt.startOffset(), offsetAtt.endOffset());
  -      	token.setPayload(payloadAtt.getPayload());
  -      	token.setFlags(flagsAtt.getFlags());
  -      	token.setPositionIncrement(posIncAtt.getPositionIncrement());
  -      	tokens.add(token);
  +      	tokens.add(tstream.cloneAttributes());
         }
       }
       return tokens;
  
positive.code:            writeHeader(out, filtfac.getClass(), filtfac.getArgs());
           }
  
           final Iterator<Token> iter = tokens.iterator();
           tstream = filtfac.create( new TokenStream() {
             CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
             OffsetAttribute offsetAtt = addAttribute (OffsetAttribute.class);
             TypeAttribute typeAtt = addAttribute (TypeAttribute.class);
             FlagsAttribute flagsAtt = addAttribute (FlagsAttribute.class);
             PayloadAttribute payloadAtt = addAttribute (PayloadAttribute.class);
             PositionIncrementAttribute posIncAtt = addAttribute (PositionIncrementAttribute.class);
             
             public boolean incrementToken() throws IOException {
               if (iter.hasNext()) {
                 Token token = iter.next();
                 termAtt.copyBuffer(token.buffer(), 0, token.length());
                 offsetAtt.setOffset(token.startOffset(), token.endOffset());
                 typeAtt.setType(token.type());
                 flagsAtt.setFlags(token.getFlags());
                 posIncAtt.setPositionIncrement(token.getPositionIncrement());
                 payloadAtt.setPayload(token.getPayload());
                 return true;
               } else {
                 return false;
  
negative.code:        }
  
         TokenStream tstream = tfac.create(tchain.charStream(new StringReader(val)));
         List<AttributeSource> tokens = getTokens(tstream);
         if (verbose) {
           writeHeader(out, tfac.getClass(), tfac.getArgs());
         }
  