diff --git a/src/invitation.c b/src/invitation.c
index 6ccfc1f4..59bcf456 100644
--- a/src/invitation.c
+++ b/src/invitation.c
@@ -823,7 +823,7 @@ int cmd_join(int argc, char *argv[]) {
 	}
 
 	// Make sure confbase exists and is accessible.
-	if(strcmp(confdir, confbase) && mkdir(confdir, 0755) && errno != EEXIST) {
+	if(!confbase_given && mkdir(confdir, 0755) && errno != EEXIST) {
 		fprintf(stderr, "Could not create directory %s: %s\n", confdir, strerror(errno));
 		return 1;
 	}
diff --git a/src/names.c b/src/names.c
index a631ad97..37708f81 100644
--- a/src/names.c
+++ b/src/names.c
@@ -26,6 +26,7 @@
 char *netname = NULL;
 char *confdir = NULL;           /* base configuration directory */
 char *confbase = NULL;          /* base configuration directory for this instance of tinc */
+bool confbase_given;
 char *identname = NULL;         /* program name for syslog */
 char *unixsocketname = NULL;    /* UNIX socket location */
 char *logfilename = NULL;       /* log file location */
@@ -41,6 +42,7 @@ void make_names(void) {
 	char installdir[1024] = "";
 	DWORD len = sizeof installdir;
 #endif
+	confbase_given = confbase;
 
 	if(netname && confbase)
 		logger(DEBUG_ALWAYS, LOG_INFO, "Both netname and configuration directory given, using the latter...");
diff --git a/src/names.h b/src/names.h
index 6f43a2c8..1163ff6e 100644
--- a/src/names.h
+++ b/src/names.h
@@ -23,6 +23,7 @@
 
 extern char *confdir;
 extern char *confbase;
+extern bool confbase_given;
 extern char *netname;
 extern char *identname;
 extern char *unixsocketname;
diff --git a/src/tincctl.c b/src/tincctl.c
index a6673901..a986af76 100644
--- a/src/tincctl.c
+++ b/src/tincctl.c
@@ -1739,7 +1739,7 @@ static int cmd_init(int argc, char *argv[]) {
 		return 1;
 	}
 
-	if(strcmp(confdir, confbase) && mkdir(confdir, 0755) && errno != EEXIST) {
+	if(!confbase_given && mkdir(confdir, 0755) && errno != EEXIST) {
 		fprintf(stderr, "Could not create directory %s: %s\n", confdir, strerror(errno));
 		return 1;
 	}