diff --git a/src/search.c b/src/search.c
index 5ace05d..b54b30f 100644
--- a/src/search.c
+++ b/src/search.c
@@ -4526,6 +4526,8 @@
 #endif /* FEAT_TEXTOBJ */
 
 #if defined(FEAT_VISUAL) || defined(PROTO)
+static int is_zerowidth __ARGS((char_u *pattern));
+
 /*
  * Find next search match under cursor, cursor at end.
  * Used while an operator is pending, and in Visual mode.
@@ -4546,11 +4548,8 @@
     int		visual_active = FALSE;
     int		flags = 0;
     pos_T	save_VIsual;
-    regmmatch_T	regmatch;
-    int		nmatched = 0;
     int		zerowidth = FALSE;
 
-
     /* wrapping should not occur */
     p_ws = FALSE;
 
@@ -4583,24 +4582,11 @@
     else
 	orig_pos = pos = start_pos = curwin->w_cursor;
 
-    /*
-     * Check for zero-width pattern.
-     */
-    if (search_regcomp(spats[last_idx].pat, RE_SEARCH, RE_SEARCH,
-			     ((SEARCH_HIS + SEARCH_KEEP)), &regmatch) == FAIL)
+    /* Is the pattern is zero-width? */
+    zerowidth = is_zerowidth(spats[last_idx].pat);
+    if (zerowidth == -1)
 	return FAIL;
 
-    /* Zero-width pattern should match somewhere, then we can check if start
-     * and end are in the same position. */
-    nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
-				     curwin->w_cursor.lnum, (colnr_T)0, NULL);
-    if (called_emsg)
-	return FAIL;
-    if (nmatched && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
-		 && regmatch.endpos[0].col == regmatch.startpos[0].col)
-	zerowidth = TRUE;
-    vim_free(regmatch.regprog);
-
     /*
      * The trick is to first search backwards and then search forward again,
      * so that a match at the current cursor position will be correctly
@@ -4693,6 +4679,43 @@
 
     return OK;
 }
+
+/*
+ * Check if the pattern is zero-width.
+ * Returns TRUE, FALSE or -1 for failure.
+ */
+    static int
+is_zerowidth(pattern)
+    char_u	*pattern;
+{
+    regmmatch_T	regmatch;
+    int		nmatched = 0;
+    int		result = -1;
+    pos_T       pos;
+
+    if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
+					      SEARCH_KEEP, &regmatch) == FAIL)
+	return -1;
+
+    /* move to match */
+    clearpos(&pos);
+    if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
+				     SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
+    {
+	/* Zero-width pattern should match somewhere, then we can check if
+	 * start and end are in the same position. */
+	nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+						  pos.lnum, (colnr_T)0, NULL);
+
+	if (!called_emsg)
+	    result = (nmatched != 0
+		    && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
+		    && regmatch.startpos[0].col == regmatch.endpos[0].col);
+    }
+
+    vim_free(regmatch.regprog);
+    return result;
+}
 #endif /* FEAT_VISUAL */
 
 #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
diff --git a/src/version.c b/src/version.c
index 5551da4..88836bc 100644
--- a/src/version.c
+++ b/src/version.c
@@ -720,6 +720,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    636,
+/**/
     635,
 /**/
     634,
