diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c
index 3e9d1f8..84b6f8f9 100644
--- a/src/backend/tsearch/wparser_def.c
+++ b/src/backend/tsearch/wparser_def.c
@@ -2347,14 +2347,6 @@ mark_hl_words(HeadlineParsedText *prs, TSQuery query, int highlight,
 				pose = i;
 			}
 
-			/* XXX this optimization seems unnecessary and wrong */
-			if (poslen < bestlen && !BADENDPOINT(beste))
-			{
-				/* better cover already found, so try next cover */
-				p++;
-				continue;
-			}
-
 			if (curlen < max_words)
 			{
 				/*
@@ -2409,13 +2401,13 @@ mark_hl_words(HeadlineParsedText *prs, TSQuery query, int highlight,
 					i = q;
 				for (; curlen > min_words; i--)
 				{
+					if (!BADENDPOINT(i))
+						break;
 					if (!NONWORDTOKEN(prs->words[i].type))
 						curlen--;
 					if (INTERESTINGWORD(i))
 						poslen--;
-					pose = i;
-					if (!BADENDPOINT(i))
-						break;
+					pose = i - 1;
 				}
 			}
 
diff --git a/src/test/regress/expected/tsearch.out b/src/test/regress/expected/tsearch.out
index d01010f..e6fb820 100644
--- a/src/test/regress/expected/tsearch.out
+++ b/src/test/regress/expected/tsearch.out
@@ -1367,9 +1367,9 @@ to_tsquery('english', 'sea&foo'), 'HighlightAll=true');
 (1 row)
 
 SELECT ts_headline('simple', '1 2 3 1 3'::text, '1 <-> 3', 'MaxWords=2, MinWords=1');
-    ts_headline    
--------------------
- <b>1</b> <b>3</b>
+ ts_headline 
+-------------
+ <b>1</b> 
 (1 row)
 
 SELECT ts_headline('simple', '1 2 3 1 3'::text, '1 & 3', 'MaxWords=4, MinWords=1');
