diff --git a/doc/error_codes.md b/doc/error_codes.md
new file mode 100644
index 0000000000000000000000000000000000000000..06d760d3d540e10b9b65580f3ec41867bd12458f
--- /dev/null
+++ b/doc/error_codes.md
@@ -0,0 +1,3 @@
+* 0: OK
+* 1: Generic error
+* 10: source-only command was called without vcsh being sourced
diff --git a/vcsh b/vcsh
index 6fa6644aaed8b2462fe7070f53451ae12197675b..4ba30e53e7e3635406782fdbdd6677c1636e4ac0 100755
--- a/vcsh
+++ b/vcsh
@@ -5,6 +5,13 @@
 [ -z "$VCSH_BASE" ]       && VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d"
 
 SELF=$(basename $0)
+if [ "$SELF" = 'bash' ] ||
+   [ "$SELF" = 'dash' ] ||
+   [ "$SELF" = 'sh' ] ||
+   [ "$SELF" = 'zsh' ]; then
+	SELF='vcsh'
+	VCSH_SOURCED=1
+fi
 
 
 help() {
@@ -176,6 +183,7 @@ elif [ "$VCSH_COMMAND" = 'exit' ]; then
 #		unset VCSH_NO_IGNORE_EOF
 #		setopt NO_IGNORE_EOF
 #	fi
+	[ -z "$VCSH_SOURCED" ] && echo "$SELF $VCSH_COMMAND: You need to source vcsh if you want to run in this mode" && return 10
 	leave
 #	[ -n "$ZSH_VERSION" ] && [ "$USER" = richih ] && buildPS1
 	verbose "exit end"
@@ -251,6 +259,7 @@ elif [ "$VCSH_COMMAND" = 'use' ]; then
 #		zle -N vcsh_exit
 #		bindkey '^d' 'vcsh_exit'
 #	fi
+	[ -z "$VCSH_SOURCED" ] && echo "$SELF $VCSH_COMMAND: You need to source vcsh if you want to run in this mode" && return 10
 	use || return $?
 #	[ -n "$ZSH_VERSION" ] && [ "$USER" = richih ] && buildPS1
 	verbose "use end"