diff --git a/shell/completion.bash b/shell/completion.bash
index 44965aee78f3faf4316df7e1e3d7f761f72d6272..0c20383a328f4b2ffe1b620877084e6d2bcc9fbd 100644
--- a/shell/completion.bash
+++ b/shell/completion.bash
@@ -11,8 +11,8 @@
 # - $FZF_COMPLETION_OPTS    (default: empty)
 
 _fzf_orig_completion_filter() {
-  sed 's/.*-F *\([^ ]*\).* \([^ ]*\)$/export _fzf_orig_completion_\2=\1;/' |
-  sed 's/[^a-z0-9_= ;]/_/g'
+  sed 's/^\(.*-F\) *\([^ ]*\).* \([^ ]*\)$/export _fzf_orig_completion_\3="\1 %s \3 #\2";/' |
+  awk -F= '{gsub(/[^a-z0-9_= ;]/, "_", $1); print $1"="$2}'
 }
 
 _fzf_opts_completion() {
@@ -77,12 +77,12 @@ _fzf_opts_completion() {
 }
 
 _fzf_handle_dynamic_completion() {
-  local cmd orig ret orig_cmd
+  local cmd orig_var orig ret orig_cmd
   cmd="$1"
   shift
   orig_cmd="$1"
-
-  orig=$(eval "echo \$_fzf_orig_completion_$cmd")
+  orig_var="_fzf_orig_completion_$cmd"
+  orig="${!orig_var##*#}"
   if [ -n "$orig" ] && type "$orig" > /dev/null 2>&1; then
     $orig "$@"
   elif [ -n "$_fzf_completion_loader" ]; then
@@ -252,32 +252,48 @@ a_cmds="
 x_cmds="kill ssh telnet unset unalias export"
 
 # Preserve existing completion
-if [ "$_fzf_completion_loaded" != '0.9.12' ]; then
+if [ "$_fzf_completion_loaded" != '0.10.8' ]; then
   # Really wish I could use associative array but OSX comes with bash 3.2 :(
   eval $(complete | \grep '\-F' | \grep -v _fzf_ |
     \grep -E " ($(echo $d_cmds $f_cmds $a_cmds $x_cmds | sed 's/ /|/g' | sed 's/+/\\+/g'))$" | _fzf_orig_completion_filter)
-  export _fzf_completion_loaded=0.9.12
+  export _fzf_completion_loaded=0.10.8
 fi
 
 if type _completion_loader > /dev/null 2>&1; then
   _fzf_completion_loader=1
 fi
 
+_fzf_defc() {
+  local cmd func opts orig_var orig
+  cmd="$1"
+  func="$2"
+  opts="$3"
+  orig_var="_fzf_orig_completion_$cmd"
+  orig="${!orig_var}"
+  if [ -n "$orig" ]; then
+    eval "$(printf "$orig" "$func")"
+  else
+    complete -F "$func" $opts "$cmd"
+  fi
+}
+
 # Directory
 for cmd in $d_cmds; do
-  complete -F _fzf_dir_completion -o nospace -o plusdirs $cmd
+  _fzf_defc "$cmd" _fzf_dir_completion "-o nospace -o plusdirs"
 done
 
 # File
 for cmd in $f_cmds; do
-  complete -F _fzf_file_completion -o default -o bashdefault $cmd
+  _fzf_defc "$cmd" _fzf_file_completion "-o default -o bashdefault"
 done
 
 # Anything
 for cmd in $a_cmds; do
-  complete -F _fzf_path_completion -o default -o bashdefault $cmd
+  _fzf_defc "$cmd" _fzf_path_completion "-o default -o bashdefault"
 done
 
+unset _fzf_defc
+
 # Kill completion
 complete -F _fzf_complete_kill -o nospace -o default -o bashdefault kill