diff --git a/vcsh b/vcsh
index 0df962b0b6cc48def7ef63e95243c8e91d92ab35..7f475fe22b0b2ec256311e11af3e48d0595ac80b 100755
--- a/vcsh
+++ b/vcsh
@@ -5,19 +5,19 @@
 SELF=$(basename $0)
 
 [ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"
-for check_directory in "$XDG_CONFIG_HOME" "$XDG_CONFIG_HOME/vcsh" "$XDG_CONFIG_HOME/vcsh/repo.d"
+[ -z "$VCSH_BASE" ]       && VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d"
+for check_directory in "$VCSH_BASE"
 do
 	if [ ! -d "$check_directory" ]; then
 		if [ -e "$check_directory" ]; then
 			echo "$SELF: error: $check_directory exists but is not a directory" >&2
 			exit 2
 		else
-			mkdir "$check_directory" || (echo "$SELF: error: could not create $check_directory" >&2; exit 2)
+			mkdir -p "$check_directory" || (echo "$SELF: error: could not create $check_directory" >&2; exit 2)
 		fi
 	fi
 done
 
-VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d"
 
 debug() {
 	[ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1"