diff --git a/src/list.c b/src/list.c
index 28799d5..6210fd6 100644
--- a/src/list.c
+++ b/src/list.c
@@ -3001,7 +3001,13 @@
     if (argvars[0].v_type == VAR_BLOB)
 	blob_reverse(argvars[0].vval.v_blob, rettv);
     else if (argvars[0].v_type == VAR_STRING)
-	string_reverse(argvars[0].vval.v_string, rettv);
+    {
+	rettv->v_type = VAR_STRING;
+	if (argvars[0].vval.v_string != NULL)
+	    rettv->vval.v_string = reverse_text(argvars[0].vval.v_string);
+	else
+	    rettv->vval.v_string = NULL;
+    }
     else if (argvars[0].v_type == VAR_LIST)
 	list_reverse(argvars[0].vval.v_list, rettv);
 }
diff --git a/src/proto/search.pro b/src/proto/search.pro
index 7a29ff3..99e279d 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -1,7 +1,6 @@
 /* search.c */
 int search_regcomp(char_u *pat, char_u **used_pat, int pat_save, int pat_use, int options, regmmatch_T *regmatch);
 char_u *get_search_pat(void);
-char_u *reverse_text(char_u *s);
 void save_re_pat(int idx, char_u *pat, int magic);
 void save_search_patterns(void);
 void restore_search_patterns(void);
diff --git a/src/proto/strings.pro b/src/proto/strings.pro
index 8924a25..aa8b374 100644
--- a/src/proto/strings.pro
+++ b/src/proto/strings.pro
@@ -21,9 +21,9 @@
 void sort_strings(char_u **files, int count);
 int has_non_ascii(char_u *s);
 char_u *concat_str(char_u *str1, char_u *str2);
+char_u *reverse_text(char_u *s);
 char_u *string_quote(char_u *str, int function);
 long string_count(char_u *haystack, char_u *needle, int ic);
-void string_reverse(char_u *str, typval_T *rettv);
 void string_filter_map(char_u *str, filtermap_T filtermap, typval_T *expr, typval_T *rettv);
 void string_reduce(typval_T *argvars, typval_T *expr, typval_T *rettv);
 void f_byteidx(typval_T *argvars, typval_T *rettv);
diff --git a/src/search.c b/src/search.c
index de17595..d4baa91 100644
--- a/src/search.c
+++ b/src/search.c
@@ -203,47 +203,6 @@
     return mr_pattern;
 }
 
-#if defined(FEAT_RIGHTLEFT) || defined(PROTO)
-/*
- * Reverse text into allocated memory.
- * Returns the allocated string, NULL when out of memory.
- */
-    char_u *
-reverse_text(char_u *s)
-{
-    unsigned	len;
-    unsigned	s_i, rev_i;
-    char_u	*rev;
-
-    /*
-     * Reverse the pattern.
-     */
-    len = (unsigned)STRLEN(s);
-    rev = alloc(len + 1);
-    if (rev == NULL)
-	return NULL;
-
-    rev_i = len;
-    for (s_i = 0; s_i < len; ++s_i)
-    {
-	if (has_mbyte)
-	{
-	    int	mb_len;
-
-	    mb_len = (*mb_ptr2len)(s + s_i);
-	    rev_i -= mb_len;
-	    mch_memmove(rev + rev_i, s + s_i, mb_len);
-	    s_i += mb_len - 1;
-	}
-	else
-	    rev[--rev_i] = s[s_i];
-
-    }
-    rev[len] = NUL;
-    return rev;
-}
-#endif
-
     void
 save_re_pat(int idx, char_u *pat, int magic)
 {
diff --git a/src/strings.c b/src/strings.c
index 25c32ec..9936744 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -770,6 +770,36 @@
     return dest;
 }
 
+#if defined(FEAT_EVAL) || defined(FEAT_RIGHTLEFT) || defined(PROTO)
+/*
+ * Reverse text into allocated memory.
+ * Returns the allocated string, NULL when out of memory.
+ */
+    char_u *
+reverse_text(char_u *s)
+{
+    size_t len = STRLEN(s);
+    char_u *rev = alloc(len + 1);
+    if (rev == NULL)
+	return NULL;
+
+    for (size_t s_i = 0, rev_i = len; s_i < len; ++s_i)
+    {
+	if (has_mbyte)
+	{
+	    int mb_len = (*mb_ptr2len)(s + s_i);
+	    rev_i -= mb_len;
+	    mch_memmove(rev + rev_i, s + s_i, mb_len);
+	    s_i += mb_len - 1;
+	}
+	else
+	    rev[--rev_i] = s[s_i];
+    }
+    rev[len] = NUL;
+    return rev;
+}
+#endif
+
 #if defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Return string "str" in ' quotes, doubling ' characters.
@@ -855,47 +885,6 @@
 }
 
 /*
- * Reverse the string in 'str' and set the result in 'rettv'.
- */
-    void
-string_reverse(char_u *str, typval_T *rettv)
-{
-    rettv->v_type = VAR_STRING;
-    rettv->vval.v_string = NULL;
-    if (str == NULL)
-	return;
-
-    char_u	*rstr = vim_strsave(str);
-    rettv->vval.v_string = rstr;
-    if (rstr == NULL || *str == NUL)
-	return;
-
-    size_t	len = STRLEN(rstr);
-    if (has_mbyte)
-    {
-	char_u *src = str;
-	char_u *dest = rstr + len;
-
-	while (src < str + len)
-	{
-	    int clen = mb_ptr2len(src);
-	    dest -= clen;
-	    mch_memmove(dest, src, (size_t)clen);
-	    src += clen;
-	}
-    }
-    else
-    {
-	for (size_t i = 0; i < len / 2; i++)
-	{
-	    char tmp = rstr[len - i - 1];
-	    rstr[len - i - 1] = rstr[i];
-	    rstr[i] = tmp;
-	}
-    }
-}
-
-/*
  * Make a typval_T of the first character of "input" and store it in "output".
  * Return OK or FAIL.
  */
diff --git a/src/version.c b/src/version.c
index 325a46e..f6022d2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1738,
+/**/
     1737,
 /**/
     1736,
