diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 5077391baad853508caffcb8e331c6de81806fc0..f67899d8609f057cbc8b2d13f294bad9a5e95dc1 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -6049,6 +6049,7 @@ void DLLCALL ftp_server(void* arg)
 	startup->shutdown_now=FALSE;
 	terminate_server=FALSE;
 	protected_uint32_init(&thread_count, 0);
+	protected_uint32_init(&active_clients, 0);
 
 	do {
 		/* Setup intelligent defaults */
@@ -6124,8 +6125,8 @@ void DLLCALL ftp_server(void* arg)
 		else
 			SAFECOPY(scfg.temp_dir,"../temp");
 	   	prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir));
-		if(!md(scfg.temp_dir)) {
-			lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.temp_dir);
+		if((i = md(scfg.temp_dir)) != 0) {
+			lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", i, strerror(i), scfg.temp_dir);
 			cleanup(1,__LINE__);
 			break;
 		}
@@ -6155,7 +6156,6 @@ void DLLCALL ftp_server(void* arg)
 
 		lprintf(LOG_DEBUG,"Maximum inactivity: %d seconds",startup->max_inactivity);
 
-		protected_uint32_init(&active_clients, 0);
 		update_clients();
 
 		strlwr(scfg.sys_id); /* Use lower-case unix-looking System ID for group name */
diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c
index 1691863a88f61fddbb38d907ad00c859a05ca4f5..61c69d880bb60fabb114d7f7d955beaeae08bae1 100644
--- a/src/sbbs3/load_cfg.c
+++ b/src/sbbs3/load_cfg.c
@@ -326,13 +326,13 @@ void DLLCALL free_text(char* text[])
 /****************************************************************************/
 /* If the directory 'path' doesn't exist, create it.                      	*/
 /****************************************************************************/
-BOOL md(const char* inpath)
+int md(const char* inpath)
 {
 	char	path[MAX_PATH+1];
 	char*	p;
 
 	if(inpath[0]==0)
-		return(FALSE);
+		return EINVAL;
 
 	SAFECOPY(path,inpath);
 
@@ -348,10 +348,10 @@ BOOL md(const char* inpath)
 
 	if(!isdir(path)) {
 		if(mkpath(path) != 0)
-			return FALSE;
+			return errno;
 	}
 	
-	return(TRUE);
+	return 0;
 }
 
 /****************************************************************************/
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 3a1ff9a983cc7605c37d72a4b5adcde2ebf1a5c2..44607a9e5c69e0e2b3ed5f87e77b56dd00e291db 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -5867,7 +5867,6 @@ static void cleanup(int code)
 		}
 		lprintf(LOG_INFO, "0000 Done waiting for child threads to terminate");
 	}
-
 	free_cfg(&scfg);
 
 	semfile_list_free(&recycle_semfiles);
@@ -5899,7 +5898,6 @@ static void cleanup(int code)
 	if(WSAInitialized && WSACleanup()!=0) 
 		lprintf(LOG_ERR,"0000 !WSACleanup ERROR %d",ERROR_VALUE);
 #endif
-
 	thread_down();
 	status("Down");
 	if(terminate_server || code) {
@@ -6014,6 +6012,7 @@ void DLLCALL mail_server(void* arg)
 
 	SetThreadName("sbbs/mailServer");
 	protected_uint32_init(&thread_count, 0);
+	protected_uint32_init(&active_clients, 0);
 
 	do {
 		/* Setup intelligent defaults */
@@ -6084,8 +6083,8 @@ void DLLCALL mail_server(void* arg)
 		else
 			SAFECOPY(scfg.temp_dir,"../temp");
 	   	prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir));
-		if(!md(scfg.temp_dir)) {
-			lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.temp_dir);
+		if((i = md(scfg.temp_dir)) != 0) {
+			lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", i, strerror(i), scfg.temp_dir);
 			cleanup(1);
 			return;
 		}
@@ -6149,7 +6148,6 @@ void DLLCALL mail_server(void* arg)
 
 		lprintf(LOG_DEBUG,"Maximum inactivity: %u seconds",startup->max_inactivity);
 
-		protected_uint32_init(&active_clients, 0);
 		update_clients();
 
 		/* open a socket and wait for a client */
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index d07f8e3f3920a2bedadbdf3389e5902e1793ad1b..dc20a334cd513c4ad51201baa4b7495f203fa04f 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -3312,8 +3312,8 @@ sbbs_t::sbbs_t(ushort node_num, union xp_sockaddr *addr, size_t addr_len, const
 		else
 			SAFECOPY(cfg.temp_dir,"../temp");
     	prep_dir(cfg.ctrl_dir, cfg.temp_dir, sizeof(cfg.temp_dir));
-		if(!md(cfg.temp_dir))
-			lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), cfg.temp_dir);
+		if((i = md(cfg.temp_dir)) != 0)
+			lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", i, strerror(i), cfg.temp_dir);
 		if(sd==INVALID_SOCKET) {	/* events thread */
 			if(startup->first_node==1)
 				SAFEPRINTF(path,"%sevent",cfg.temp_dir);
@@ -3541,8 +3541,8 @@ bool sbbs_t::init()
 		return(false);
 	}
 
-	if(!md(cfg.temp_dir)) {
-		lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), cfg.temp_dir);
+	if((i = md(cfg.temp_dir)) != 0) {
+		lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", i, strerror(i), cfg.temp_dir);
 		return false;
 	}
 
@@ -5124,8 +5124,9 @@ void DLLCALL bbs_thread(void* arg)
 	lprintf(LOG_INFO,"Verifying/creating node directories");
 	for(i=0;i<=scfg.sys_nodes;i++) {
 		if(i) {
-			if(!md(scfg.node_path[i-1])) {
-				lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.node_path[i-1]);
+			int err;
+			if((err = md(scfg.node_path[i-1])) != 0) {
+				lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", err, strerror(err), scfg.node_path[i-1]);
 				cleanup(1);
 				return;
 			}
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index ad52dda442783c221d6594ec0fad395b797dcd39..062e9747181ba733acdf27c3824e95a46f0dfbfc 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -1259,8 +1259,7 @@ extern "C" {
 	DLLEXPORT void		DLLCALL free_text(char* text[]);
 	DLLEXPORT ushort	DLLCALL sys_timezone(scfg_t* cfg);
 	DLLEXPORT char *	DLLCALL prep_dir(const char* base, char* dir, size_t buflen);
-	DLLEXPORT BOOL 		DLLCALL md(const char *path);
-
+	DLLEXPORT int 		DLLCALL md(const char *path);
 
 	/* scfgsave.c */
 	DLLEXPORT BOOL		DLLCALL save_cfg(scfg_t* cfg, int backup_level);
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index d2346e18c276bb71792f54024ed17b7579583920..f09ba8ee17dde8a0a4ce8007e55c88dbf4b3f58b 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -1837,8 +1837,8 @@ void DLLCALL services_thread(void* arg)
 		else
 			SAFECOPY(scfg.temp_dir,"../temp");
 	   	prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir));
-		if(!md(scfg.temp_dir)) {
-			lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.temp_dir);
+		if((i = md(scfg.temp_dir)) != 0) {
+			lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", i, strerror(i), scfg.temp_dir);
 			cleanup(1);
 			return;
 		}
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index d7a10d54b4a48a172d563ca43d36d223ecaca9d0..bfabe167b4b37e9d8f668705917f63a6d06766d1 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -6914,7 +6914,8 @@ void DLLCALL web_server(void* arg)
 	http_session_t *	session=NULL;
 	void			*acc_type;
 	char			*ssl_estr;
-	int			lvl;
+	int				lvl;
+	int				i;
 
 	startup=(web_startup_t*)arg;
 
@@ -6953,6 +6954,7 @@ void DLLCALL web_server(void* arg)
 	startup->shutdown_now=FALSE;
 	terminate_server=FALSE;
 	protected_uint32_init(&thread_count, 0);
+	protected_uint32_init(&active_clients,0);
 
 	do {
 		/* Setup intelligent defaults */
@@ -7033,8 +7035,8 @@ void DLLCALL web_server(void* arg)
 		else
 			SAFECOPY(scfg.temp_dir,"../temp");
 		prep_dir(startup->ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir));
-		if(!md(scfg.temp_dir)) {
-			lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.temp_dir);
+		if((i = md(scfg.temp_dir)) != 0) {
+			lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", i, strerror(i), scfg.temp_dir);
 			cleanup(1);
 			return;
 		}
@@ -7074,7 +7076,6 @@ void DLLCALL web_server(void* arg)
 		if(uptime==0)
 			uptime=time(NULL);	/* this must be done *after* setting the timezone */
 
-		protected_uint32_init(&active_clients,0);
 		update_clients();
 
 		/* open a socket and wait for a client */