diff --git a/plugins/cake/cake.plugin.zsh b/plugins/cake/cake.plugin.zsh
new file mode 100644
index 000000000..75997521a
--- /dev/null
+++ b/plugins/cake/cake.plugin.zsh
@@ -0,0 +1,32 @@
+# Set this to 1 if you want to cache the tasks
+cacheTaskList=1
+
+# Cache filename
+cacheFile='.cake-task-cache'
+
+_cake_does_target_list_need_generating () {
+
+	if [ $cacheTaskList -eq 0 ]; then
+		return 1;
+	fi
+
+	if [ ! -f $cacheFile ]; then return 0;
+	else
+		accurate=$(stat -f%m $cacheFile)
+		changed=$(stat -f%m Cakefile)
+		return $(expr $accurate '>=' $changed)
+	fi
+}
+
+_cake () {
+	if [ -f Cakefile ]; then
+		if _cake_does_target_list_need_generating; then
+			cake | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$' > $cacheFile
+			compadd `cat $cacheFile`
+		else
+			compadd `cake | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$'`
+		fi
+	fi
+}
+
+compdef _cake cake