diff --git a/plugins/wd/README.md b/plugins/wd/README.md
new file mode 100644
index 000000000..f9f4e7ac1
--- /dev/null
+++ b/plugins/wd/README.md
@@ -0,0 +1,38 @@
+## wd
+
+**Maintainer:** [mfaerevaag](https://github.com/mfaerevaag)
+
+`wd` (warp directory) lets you jump to custom directories in zsh, without using cd. Why? Because cd seems ineffecient when the folder is frequently visited or has a long path. [Source](https://github.com/mfaerevaag/wd)
+
+### Usage
+
+ * Add warp point to current working directory:
+
+        wd add test
+
+    If a warp point with the same name exists, use `add!` to overwrite it.
+
+ * From an other directory, warp to test with:
+
+        wd test
+
+ * You can warp back to previous directory, and so on, with the puncticulation syntax:
+
+        wd ..
+        wd ...
+
+    This is a wrapper for the zsh `dirs` function.
+
+ * Remove warp point test point:
+
+        wd rm test
+
+ * List warp points to current directory (stored in `~/.warprc`):
+
+        wd show
+
+ * List all warp points (stored in `~/.warprc`):
+
+        wd ls
+
+ * Print usage with no opts or the `help` argument.
diff --git a/plugins/wd/_wd.sh b/plugins/wd/_wd.sh
new file mode 100644
index 000000000..950564435
--- /dev/null
+++ b/plugins/wd/_wd.sh
@@ -0,0 +1,48 @@
+#compdef wd.sh
+
+zstyle ":completion:*:descriptions" format "%B%d%b"
+
+CONFIG=$HOME/.warprc
+
+local -a main_commands
+main_commands=(
+    add:'Adds the current working directory to your warp points'
+    #add'\!':'Overwrites existing warp point' # TODO: Fix
+    rm:'Removes the given warp point'
+    ls:'Outputs all stored warp points'
+    show:'Outputs warp points to current directory'
+)
+
+local -a points
+while read line
+do
+    points+=$(awk "{ gsub(/\/Users\/$USER|\/home\/$USER/,\"~\"); print }" <<< $line)
+done < $CONFIG
+
+_wd()
+{
+    # init variables
+    local curcontext="$curcontext" state line
+    typeset -A opt_args
+
+    # init state
+    _arguments \
+        '1: :->command' \
+        '2: :->argument'
+
+    case $state in
+        command)
+            compadd "$@" add rm ls show
+            _describe -t warp-points 'Warp points:' points && ret=0
+            ;;
+        argument)
+            case $words[2] in
+                rm|add!)
+                    _describe -t warp-points 'warp points' points && ret=0
+                    ;;
+                *)
+            esac
+    esac
+}
+
+_wd "$@"
diff --git a/plugins/wd2/wd2/wd.plugin.zsh b/plugins/wd/wd.plugin.zsh
similarity index 63%
rename from plugins/wd2/wd2/wd.plugin.zsh
rename to plugins/wd/wd.plugin.zsh
index e0846ffd9..bbec4a715 100755
--- a/plugins/wd2/wd2/wd.plugin.zsh
+++ b/plugins/wd/wd.plugin.zsh
@@ -6,4 +6,4 @@
 #
 # @github.com/mfaerevaag/wd
 
-alias wd='. ~/.oh-my-zsh/plugins/wd/wd.sh'
+alias wd='. $ZSH/plugins/wd/wd.sh'
diff --git a/plugins/wd2/wd2/wd.sh b/plugins/wd/wd.sh
similarity index 88%
rename from plugins/wd2/wd2/wd.sh
rename to plugins/wd/wd.sh
index 7852028c0..744f58bc2 100755
--- a/plugins/wd2/wd2/wd.sh
+++ b/plugins/wd/wd.sh
@@ -19,6 +19,13 @@ RED="\033[91m"
 NOC="\033[m"
 
 
+# check if config file exists
+if [[ ! -a $CONFIG ]]
+then
+  # if not: create config file
+  touch $CONFIG
+fi
+
 ## load warp points
 typeset -A points
 while read line
@@ -120,11 +127,12 @@ wd_print_msg()
 
 wd_print_usage()
 {
-		print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>"
+    print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>"
     print "\nCommands:"
     print "\t add \t Adds the current working directory to your warp points"
     print "\t add! \t Overwrites existing warp point"
     print "\t remove  Removes the given warp point"
+    print "\t show \t Outputs warp points to current directory"
     print "\t list \t Outputs all stored warp points"
     print "\t help \t Show this extremely helpful text"
 }
@@ -135,13 +143,20 @@ wd_print_usage()
 # get opts
 args=`getopt -o a:r:lhs -l add:,remove:,list,help,show -- $*`
 
+# check if no arguments were given
 if [[ $? -ne 0 || $#* -eq 0 ]]
 then
     wd_print_usage
-else
-    # can't exit, as this would exit the excecuting shell
-    # e.i. your terminal
 
+# check if config file is writeable
+elif [[ ! -w $CONFIG ]]
+then
+    wd_print_msg $RED "\'$CONFIG\' is not writeable."
+    # do nothing => exit
+    # can't run `exit`, as this would exit the executing shell
+    # i.e. your terminal
+
+else
     #set -- $args # WTF
 
     for i