diff --git a/fish/fish.c b/fish/fish.c
index db25373..4555582 100644
--- a/fish/fish.c
+++ b/fish/fish.c
@@ -1419,6 +1419,66 @@ static char histfile[1024];
 static int nr_history_lines = 0;
 #endif
 
+/* Readline word break hook for (guest)fish
+ * Exclude space from the set of word break characters if Readline's buffer
+ * contains path and some of possible tab-completions includes space.
+ * Return basic / default set of word break characters otherwise
+ */
+char *
+fish_completion_word_break_characters (void)
+{
+  char *p = strchr (rl_line_buffer, '/'), *q;
+  /* RL buffer contains path somewhere and path tab-completion
+   * was requested. */
+  if (p && complete_dest_paths) {
+    struct word *words = NULL;
+    size_t nr_words = 0;
+    /* List directory content into words */
+    list_directory_entries (p, &words, &nr_words);
+
+    size_t index = 0;
+    while (index < nr_words) {
+      struct word *word;
+
+      word = &words[index];
+      index++;
+
+      /* Whether we should match case insensitively here or not is
+       * determined by the value of the completion-ignore-case readline
+       * variable.  Default to case insensitive.  (See: RHBZ#582993).
+       */
+      char *cic_var = rl_variable_value ("completion-ignore-case");
+      int cic = 1;
+      if (cic_var && STREQ (cic_var, "off"))
+        cic = 0;
+
+      int matches =
+        cic ? STRCASEEQLEN (word->name, p, strlen (p))
+            : STREQLEN (word->name, p, strlen (p));
+
+      if (matches) {
+        char *nwbc = strdup (rl_completer_word_break_characters);
+
+        /* Does tab-completed form contain space? */
+        char *at = strchr (word->name, '\x20');
+        /* If so, exclude space from RL word break characters set */
+        if (at) {
+          for (q = nwbc, at = rl_completer_word_break_characters; *at; )
+            if (*at != '\x20')
+              *q++ = *at++;
+            else
+              at++;
+          *q = '\0';
+        /* Return the modified set */
+        return nwbc;
+        }
+      }
+    }
+  }
+  /* Return default word break characters set */
+  return strdup (rl_basic_word_break_characters);
+}
+
 static void
 initialize_readline (void)
 {
@@ -1426,6 +1486,7 @@ initialize_readline (void)
   const char *str;
 
   rl_readline_name = "guestfish";
+  rl_completion_word_break_hook = fish_completion_word_break_characters;
   rl_attempted_completion_function = do_completion;
 
   /* Note that .inputrc (or /etc/inputrc) is not read until the first
