diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn
index cc7edc22e57b97886ff980d781441085fb6bf586..719736b4d445bf16aec4b774528c1f02dedb3575 100644
--- a/doc/vcsh.1.ronn
+++ b/doc/vcsh.1.ronn
@@ -5,7 +5,7 @@ vcsh(1) - Version Control System for $HOME - multiple Git repositories in $HOME
 
 `vcsh` [<options>] <command>
 
-`vcsh` alias [<alias>[=<command>]]
+`vcsh` alias [-d] [<alias>[=<command>]]
 
 `vcsh` clone [-b <branch>] <url> [<repo>]
 
@@ -85,11 +85,13 @@ an interactive user.
 ## COMMANDS
 
 * alias:
-  List all defined aliases.
+  List all aliases in <$XDG_CONFIG_HOME/vcsh/aliases>.
 
   `<alias>`: Print the right side of alias definition.
 
-  `<alias>=<command>`: Add an alias definition to <XDG_CONFIG_HOME/vcsh/aliases>.
+  `<alias>=<command>`: Add alias. Make backup in <$XDG_CONFIG_HOME/vcsh/aliases.bak>.
+
+  `-d <alias>`: Delete alias. Make backup in <$XDG_CONFIG_HOME/vcsh/aliases.bak>.
 
 * clone:
   Clone an existing repository.
diff --git a/vcsh b/vcsh
index 99d201f59d3d0b0ef365f42c2a464cc20e0565ec..1361f4afc2efdecf8b9d98349627c7e7a3e70ed4 100755
--- a/vcsh
+++ b/vcsh
@@ -193,14 +193,32 @@ alias_write() {
 	fi
 }
 
+alias_remove() {
+	[ -w "$XDG_CONFIG_HOME/vcsh/aliases" ] ||
+	[ ! -e "$XDG_CONFIG_HOME/vcsh/aliases" -a -w "$XDG_CONFIG_HOME/vcsh/" ] ||
+		fatal "File '$XDG_CONFIG_HOME/vcsh/aliases' not writeable"
+	[ -n "$1" ] || fatal 'Empty alias'
+	local regex="/^$1\s*=/d"
+	sed -i.bak -re "$regex" "$XDG_CONFIG_HOME/vcsh/aliases"
+}
+
 aliases() {
 	if [ -n "$1" ]; then
-		local alias=$(<<<"$@" sed -re 's/(\w+)\s*=\s*(\w.*)/\1 = \2/')
+		local opts subcmd
+		while getopts d: opts; do
+			if [ $opts == d ]; then
+				alias_remove "$OPTARG"
+			fi
+		done
+		shift $(($OPTIND - 1))
+		local alias=$(<<<"$@" sed -nre 's/(\w+)\s*=\s*(\w.*)/\1 = \2/p')
 		if [ -n "$alias" ]; then
 			alias_write $alias
+		else
+			alias_get "$1"
 		fi
-		alias_get "$1"
 	else
+		# print all aliases
 		local a cmd
 		while read a cmd; do
 			if [ -n "$a" ]; then