diff --git a/src/beval.c b/src/beval.c
index 2cbe7ea..010e201 100644
--- a/src/beval.c
+++ b/src/beval.c
@@ -10,62 +10,7 @@
 
 #include "vim.h"
 
-#if defined(FEAT_BEVAL) || defined(PROTO)
-
-/*
- * Get the text and position to be evaluated for "beval".
- * If "getword" is TRUE the returned text is not the whole line but the
- * relevant word in allocated memory.
- * Returns OK or FAIL.
- */
-    int
-get_beval_info(
-    BalloonEval	*beval,
-    int		getword,
-    win_T	**winp,
-    linenr_T	*lnump,
-    char_u	**textp,
-    int		*colp)
-{
-    int		row, col;
-
-# ifdef FEAT_BEVAL_TERM
-#  ifdef FEAT_GUI
-    if (!gui.in_use)
-#  endif
-    {
-	row = mouse_row;
-	col = mouse_col;
-    }
-# endif
-# ifdef FEAT_GUI
-    if (gui.in_use)
-    {
-	row = Y_2_ROW(beval->y);
-	col = X_2_COL(beval->x);
-    }
-#endif
-    if (find_word_under_cursor(row, col, getword,
-		FIND_IDENT + FIND_STRING + FIND_EVAL,
-		winp, lnump, textp, colp) == OK)
-    {
-#ifdef FEAT_VARTABS
-	vim_free(beval->vts);
-	beval->vts = tabstop_copy((*winp)->w_buffer->b_p_vts_array);
-	if ((*winp)->w_buffer->b_p_vts_array != NULL && beval->vts == NULL)
-	{
-	    if (getword)
-		vim_free(*textp);
-	    return FAIL;
-	}
-#endif
-	beval->ts = (*winp)->w_buffer->b_p_ts;
-	return OK;
-    }
-
-    return FAIL;
-}
-
+#if defined(FEAT_BEVAL) || defined(FEAT_TEXT_PROP) || defined(PROT)
 /*
  * Find text under the mouse position "row" / "col".
  * If "getword" is TRUE the returned text in "*textp" is not the whole line but
@@ -174,6 +119,63 @@
     }
     return FAIL;
 }
+#endif
+
+#if defined(FEAT_BEVAL) || defined(PROTO)
+
+/*
+ * Get the text and position to be evaluated for "beval".
+ * If "getword" is TRUE the returned text is not the whole line but the
+ * relevant word in allocated memory.
+ * Returns OK or FAIL.
+ */
+    int
+get_beval_info(
+    BalloonEval	*beval,
+    int		getword,
+    win_T	**winp,
+    linenr_T	*lnump,
+    char_u	**textp,
+    int		*colp)
+{
+    int		row, col;
+
+# ifdef FEAT_BEVAL_TERM
+#  ifdef FEAT_GUI
+    if (!gui.in_use)
+#  endif
+    {
+	row = mouse_row;
+	col = mouse_col;
+    }
+# endif
+# ifdef FEAT_GUI
+    if (gui.in_use)
+    {
+	row = Y_2_ROW(beval->y);
+	col = X_2_COL(beval->x);
+    }
+#endif
+    if (find_word_under_cursor(row, col, getword,
+		FIND_IDENT + FIND_STRING + FIND_EVAL,
+		winp, lnump, textp, colp) == OK)
+    {
+#ifdef FEAT_VARTABS
+	vim_free(beval->vts);
+	beval->vts = tabstop_copy((*winp)->w_buffer->b_p_vts_array);
+	if ((*winp)->w_buffer->b_p_vts_array != NULL && beval->vts == NULL)
+	{
+	    if (getword)
+		vim_free(*textp);
+	    return FAIL;
+	}
+#endif
+	beval->ts = (*winp)->w_buffer->b_p_ts;
+	return OK;
+    }
+
+    return FAIL;
+}
 
 /*
  * Show a balloon with "mesg" or "list".
diff --git a/src/proto/beval.pro b/src/proto/beval.pro
index 0238907..62eba9e 100644
--- a/src/proto/beval.pro
+++ b/src/proto/beval.pro
@@ -1,6 +1,6 @@
 /* beval.c */
-int get_beval_info(BalloonEval *beval, int getword, win_T **winp, linenr_T *lnump, char_u **textp, int *colp);
 int find_word_under_cursor(int mouserow, int mousecol, int getword, int flags, win_T **winp, linenr_T *lnump, char_u **textp, int *colp);
+int get_beval_info(BalloonEval *beval, int getword, win_T **winp, linenr_T *lnump, char_u **textp, int *colp);
 void post_balloon(BalloonEval *beval, char_u *mesg, list_T *list);
 int can_use_beval(void);
 void general_beval_cb(BalloonEval *beval, int state);
diff --git a/src/version.c b/src/version.c
index 5cf7da3..4952b70 100644
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1648,
+/**/
     1647,
 /**/
     1646,
