Index: lucene/contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleBoundaryScannerTest.java
===================================================================
--- lucene/contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleBoundaryScannerTest.java	(revision 1231846)
+++ lucene/contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleBoundaryScannerTest.java	(working copy)
@@ -36,6 +36,10 @@
     start = TEXT.indexOf("formance");
     int expected = TEXT.indexOf("high-performance");
     assertEquals(expected, scanner.findStartOffset(text, start));
+    
+    start = TEXT.indexOf("che");
+    expected = TEXT.indexOf("Apache");
+    assertEquals(expected, scanner.findStartOffset(text, start));
   }
 
   public void testFindEndOffset() throws Exception {
Index: lucene/contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleFragmentsBuilderTest.java
===================================================================
--- lucene/contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleFragmentsBuilderTest.java	(revision 1231846)
+++ lucene/contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleFragmentsBuilderTest.java	(working copy)
@@ -173,6 +173,6 @@
     FieldFragList ffl = sflb.createFieldFragList( fpl, 100 );
     SimpleFragmentsBuilder sfb = new SimpleFragmentsBuilder();
     sfb.setMultiValuedSeparator( '/' );
-    assertEquals( " b c//<b>d</b> e/", sfb.createFragment( reader, 0, F, ffl ) );
+    assertEquals( "//a b c//<b>d</b> e/", sfb.createFragment( reader, 0, F, ffl ) );
   }
 }
Index: lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/SimpleBoundaryScanner.java
===================================================================
--- lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/SimpleBoundaryScanner.java	(revision 1231846)
+++ lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/SimpleBoundaryScanner.java	(working copy)
@@ -61,6 +61,10 @@
       if( boundaryChars.contains( buffer.charAt( offset - 1 ) ) ) return offset;
       offset--;
     }
+    // if we scanned up to the start of the text, return it, its a "boundary"
+    if (offset == 0) {
+      return 0;
+    }
     // not found
     return start;
   }
