diff --git a/oh-my-fish.fish b/oh-my-fish.fish
index 72f512e59737d5c719a0396ebc9c92dff8f373f4..3c8cd7c565a94a0b259456194ed51fb126d7269b 100644
--- a/oh-my-fish.fish
+++ b/oh-my-fish.fish
@@ -2,15 +2,22 @@
 # Helper functions
 ###
 
+function _test_dir
+  set -l path $argv[1]
+  set -l paths $argv[2]
+
+  return (test -d $path; and not contains $path $paths)
+end
+
 function _fish_add_plugin
   set -l plugin $argv[1]
   set -l plugin_path "plugins/$plugin"
 
-  if test -d $fish_path/$plugin_path
+  if _test_dir $fish_path/$plugin_path $fish_function_path
     set fish_function_path $fish_path/$plugin_path $fish_function_path
   end
 
-  if test -d $fish_custom/$plugin_path
+  if  _test_dir $fish_custom/$plugin_path $fish_function_path
     set fish_function_path $fish_custom/$plugin_path $fish_function_path
   end
 end
@@ -42,11 +49,11 @@ function _fish_source_plugin_load_file
 end
 
 function _fish_load_theme
-  if test -d $fish_path/themes/$fish_theme
+  if _test_dir $fish_path/themes/$fish_theme $fish_function_path
     set fish_function_path $fish_path/themes/$fish_theme $fish_function_path
   end
 
-  if test -d $fish_custom/themes/$fish_theme
+  if _test_dir $fish_custom/themes/$fish_theme $fish_function_path
     set fish_function_path $fish_custom/themes/$fish_theme $fish_function_path
   end
 end
@@ -66,7 +73,9 @@ set user_function_path $fish_function_path[1]
 set -e fish_function_path[1]
 
 # Add all functions
-set fish_function_path $fish_path/functions/ $fish_function_path
+if not contains $fish_path/functions/ $fish_function_path
+  set fish_function_path $fish_path/functions/ $fish_function_path
+end
 
 # Add all defined plugins
 for plugin in $fish_plugins