Index: contrib/fast-vector-highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldPhraseListTest.java
===================================================================
--- contrib/fast-vector-highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldPhraseListTest.java	(revision 814456)
+++ contrib/fast-vector-highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldPhraseListTest.java	(working copy)
@@ -76,6 +76,20 @@
     assertEquals( "baac(1.0)((2,5))", fpl.phraseList.get( 0 ).toString() );
   }
   
+  public void test2ConcatTermsIndexB() throws Exception {
+    // 01 12 23 (offsets)
+    // ab|ba|ab
+    //  0  1  2 (positions)
+    make1d1fIndexB( "abab" );
+
+    FieldQuery fq = new FieldQuery( tq( "ab" ), true, true );
+    FieldTermStack stack = new FieldTermStack( reader, 0, F, fq );
+    FieldPhraseList fpl = new FieldPhraseList( stack, fq );
+    assertEquals( 2, fpl.phraseList.size() );
+    assertEquals( "ab(1.0)((0,2))", fpl.phraseList.get( 0 ).toString() );
+    assertEquals( "ab(1.0)((2,4))", fpl.phraseList.get( 1 ).toString() );
+  }
+  
   public void test2Terms1PhraseIndex() throws Exception {
     make1d1fIndex( "c a a b" );
 
Index: contrib/fast-vector-highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldPhraseList.java
===================================================================
--- contrib/fast-vector-highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldPhraseList.java	(revision 814456)
+++ contrib/fast-vector-highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldPhraseList.java	(working copy)
@@ -146,10 +146,10 @@
       int eo = getEndOffset();
       int oso = other.getStartOffset();
       int oeo = other.getEndOffset();
-      if( so <= oso && oso <= eo ) return true;
-      if( so <= oeo && oeo <= eo ) return true;
-      if( oso <= so && so <= oeo ) return true;
-      if( oso <= eo && eo <= oeo ) return true;
+      if( so <= oso && oso < eo ) return true;
+      if( so < oeo && oeo <= eo ) return true;
+      if( oso <= so && so < oeo ) return true;
+      if( oso < eo && eo <= oeo ) return true;
       return false;
     }
     
