diff --git a/configure.ac b/configure.ac
index b95080dcc79d05aae4678a09c57359e20b4851b9..e51b84225259bd4e093ca4b31b7275650199f94d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -176,6 +176,21 @@ if test "x$enable_tabcomp" = xno; then
     AC_DEFINE(DISABLE_TABCOMP, 1, [Define this to disable the tab completion functions for files and search strings.])
 fi
 
+AC_ARG_ENABLE(wordcomp,
+AS_HELP_STRING([--disable-wordcomp], [Disable the word completion function]))
+if test "x$enable_tiny" = xyes; then
+    if test "x$enable_wordcomp" = xyes; then
+	AC_MSG_ERROR([--enable-wordcomp cannot work with --enable-tiny])
+    else
+	enable_wordcomp=no
+    fi
+fi
+if test "x$disable_wordcomp" != xyes; then
+    if test "x$enable_wordcomp" != xno; then
+	AC_DEFINE(ENABLE_WORDCOMPLETION, 1, [Define this to enable the word completion function.])
+    fi
+fi
+
 AC_ARG_ENABLE(wrapping,
 AS_HELP_STRING([--disable-wrapping], [Disable all wrapping of text (and -w flag)]))
 if test "x$enable_wrapping" = xno; then
diff --git a/doc/texinfo/nano.texi b/doc/texinfo/nano.texi
index 51324fe32e14a91ba28cf82aeba35cece47b8bda..877fee17d3e170fb5116b8489eb09c6810db20bc 100644
--- a/doc/texinfo/nano.texi
+++ b/doc/texinfo/nano.texi
@@ -1501,18 +1501,21 @@ Disable use of the spell checker.  This also eliminates the @code{-s}
 command-line option, which allows specifying an alternate spell checker.
 
 @item --disable-tabcomp
-Disable the tab completion code when reading or writing files.
+Disable tab completion (when nano asks for a filename or a search string).
+
+@item --disable-wordcomp
+Disable word completion.
 
 @item --disable-wrapping
 Disable all hard-wrapping of overlong lines.  This also eliminates the
 @code{-w} command-line option, which switches long-line wrapping off.
 
 @item --enable-tiny
-This option disables all the above.  It also disables some of the larger
-internals of the editor, like the marking code and the cut-to-end-of-line
-code.  It also disables the function toggles.  By using the enabling
+This option implies all of the above.  It also disables some other
+internals of the editor, like the marking code, the cut-to-end-of-line
+code, and the function toggles.  By using the enabling
 counterpart of the above options together with @code{--enable-tiny},
-specific features can be switched back on.
+specific features can be switched back on --- but a few cannot.
 
 @item --enable-debug
 Enable support for runtime debug output.  This can get pretty messy, so
diff --git a/src/global.c b/src/global.c
index 233dea71077167b3fd431ef3f0505a8165cece96..488b7fc4cc925d04a1bdbed01808910d990ed2c0 100644
--- a/src/global.c
+++ b/src/global.c
@@ -59,10 +59,8 @@ int last_line_y;
 message_type lastmessage = HUSH;
 	/* Messages of type HUSH should not overwrite type MILD nor ALERT. */
 
-#ifndef NANO_TINY
 filestruct *pletion_line = NULL;
 	/* The line where the last completion was found, if any. */
-#endif
 
 int controlleft, controlright, controlup, controldown;
 #ifndef NANO_TINY
@@ -541,7 +539,6 @@ void shortcut_init(void)
 #endif
     const char *nano_undo_msg = N_("Undo the last operation");
     const char *nano_redo_msg = N_("Redo the last undone operation");
-    const char *nano_completion_msg = N_("Try and complete the current word");
 #endif
     const char *nano_back_msg = N_("Go back one character");
     const char *nano_forward_msg = N_("Go forward one character");
@@ -597,6 +594,9 @@ void shortcut_init(void)
 	N_("Refresh (redraw) the current screen");
     const char *nano_suspend_msg =
 	N_("Suspend the editor (if suspension is enabled)");
+#ifdef ENABLE_WORDCOMPLETION
+    const char *nano_completion_msg = N_("Try and complete the current word");
+#endif
 #ifndef NANO_TINY
     const char *nano_savefile_msg = N_("Save file without prompting");
     const char *nano_findprev_msg = N_("Search next occurrence backward");
@@ -819,9 +819,6 @@ void shortcut_init(void)
 	N_("Undo"), IFSCHELP(nano_undo_msg), TOGETHER, NOVIEW);
     add_to_funcs(do_redo, MMAIN,
 	N_("Redo"), IFSCHELP(nano_redo_msg), BLANKAFTER, NOVIEW);
-
-    add_to_funcs(complete_a_word, MMAIN,
-	N_("Complete"), IFSCHELP(nano_completion_msg), BLANKAFTER, NOVIEW);
 #endif /* !NANO_TINY */
 
     add_to_funcs(do_left, MMAIN,
@@ -934,6 +931,10 @@ void shortcut_init(void)
     add_to_funcs(do_suspend_void, MMAIN,
 	N_("Suspend"), IFSCHELP(nano_suspend_msg), BLANKAFTER, VIEW);
 
+#ifdef ENABLE_WORDCOMPLETION
+    add_to_funcs(complete_a_word, MMAIN,
+	N_("Complete"), IFSCHELP(nano_completion_msg), TOGETHER, NOVIEW);
+#endif
 #ifdef ENABLE_COMMENT
     add_to_funcs(do_comment, MMAIN,
 	N_("Comment Lines"), IFSCHELP(nano_comment_msg), BLANKAFTER, NOVIEW);
@@ -1104,6 +1105,8 @@ void shortcut_init(void)
     add_to_sclist(MMAIN, "M-{", 0, do_unindent, 0);
     add_to_sclist(MMAIN, "M-U", 0, do_undo, 0);
     add_to_sclist(MMAIN, "M-E", 0, do_redo, 0);
+#endif
+#ifdef ENABLE_WORDCOMPLETION
     add_to_sclist(MMAIN, "^]", 0, complete_a_word, 0);
 #endif
 #ifdef ENABLE_COMMENT
diff --git a/src/nano.c b/src/nano.c
index 54f652d65c7fba2a1c0ed2f0f8bb1a01384857fb..a246675c5709745504ed23f2ed8d988420a825a5 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1654,7 +1654,9 @@ int do_input(bool allow_funcs)
 	}
     }
 
-    if (have_shortcut) {
+    if (!have_shortcut)
+	pletion_line = NULL;
+    else {
 	const subnfunc *f = sctofunc(s);
 
 	if (ISSET(VIEW_MODE) && f && !f->viewok) {
@@ -1671,10 +1673,11 @@ int do_input(bool allow_funcs)
 		)
 	    preserve = TRUE;
 
-#ifndef NANO_TINY
+#ifdef ENABLE_WORDCOMPLETION
 	if (s->scfunc != complete_a_word)
 	    pletion_line = NULL;
-
+#endif
+#ifndef NANO_TINY
 	if (s->scfunc == do_toggle_void) {
 	    do_toggle(s->toggle);
 	    if (s->toggle != CUT_TO_END)
@@ -1710,10 +1713,6 @@ int do_input(bool allow_funcs)
 		update_line(openfile->current, openfile->current_x);
 	}
     }
-#ifndef NANO_TINY
-    else
-	pletion_line = NULL;
-#endif
 
     /* If we aren't cutting or copying text, and the key wasn't a toggle,
      * blow away the text in the cutbuffer upon the next cutting action. */
diff --git a/src/nano.h b/src/nano.h
index beb6afe6f8ae31b75acd873623b4f1e0288ecdb0..91e4a0541b0b7744b5ad1f67c59ff39d29dcd7d6 100644
--- a/src/nano.h
+++ b/src/nano.h
@@ -484,7 +484,7 @@ typedef struct subnfunc {
 	/* Next item in the list. */
 } subnfunc;
 
-#ifndef NANO_TINY
+#ifdef ENABLE_WORDCOMPLETION
 typedef struct completion_word {
     char *word;
     struct completion_word *next;
diff --git a/src/proto.h b/src/proto.h
index d61467ea9a6c7072f840692006f03d324e42c9a5..a7f9b6066bf8c1c1a91f69daf81aad9beb582ac3 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -47,9 +47,7 @@ extern int last_line_y;
 
 extern message_type lastmessage;
 
-#ifndef NANO_TINY
 extern filestruct *pletion_line;
-#endif
 
 extern int controlleft;
 extern int controlright;
diff --git a/src/text.c b/src/text.c
index 073f66e465c5f0c396b100573a223312b4f50a13..382f54fc7560cbeba2422851c35b567a05aff8d2 100644
--- a/src/text.c
+++ b/src/text.c
@@ -48,7 +48,7 @@ static filestruct *jusbottom = NULL;
 	/* A pointer to the end of the buffer with unjustified text. */
 #endif
 
-#ifndef NANO_TINY
+#ifdef ENABLE_WORDCOMPLETION
 static int pletion_x = 0;
 	/* The x position in pletion_line of the last found completion. */
 static completion_word *list_of_completions;
@@ -3684,7 +3684,7 @@ void do_verbatim_input(void)
     free(output);
 }
 
-#ifndef NANO_TINY
+#ifdef ENABLE_WORDCOMPLETION
 /* Copy the found completion candidate. */
 char *copy_completion(char *check_line, int start)
 {
@@ -3854,4 +3854,4 @@ void complete_a_word(void)
 
     free(shard);
 }
-#endif
+#endif /* ENABLE_WORDCOMPLETION */