diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index eaa4fb410de9fda0f5850829a9f34e2385bb5923..7bdf92fdd0b9d0495d6a5a51a3785ee7e2f202d1 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -1020,6 +1020,7 @@ void event_thread(void* arg)
 
 			memcpy(&sbbs->cfg,&scfg,sizeof(scfg_t));
 
+			sprintf(sbbs->cfg.temp_dir, "temp/%lX", sbbs_random(~0));
 			prep_dir(sbbs->cfg.data_dir, sbbs->cfg.temp_dir);
 
 			// Read TIME.DAB
@@ -1581,8 +1582,10 @@ sbbs_t::sbbs_t(ushort node_num, DWORD addr, char* name, SOCKET sd,
 	if(node_num>0) {
 		strcpy(cfg.node_dir, cfg.node_path[node_num-1]);
 		prep_dir(cfg.node_dir, cfg.temp_dir);
-	} else
+	} else {
+		sprintf(cfg.temp_dir, "temp/%lX", sbbs_random(~0));
     	prep_dir(cfg.data_dir, cfg.temp_dir);
+	}
 
 	terminated = false;
 	event_thread_running = false;
@@ -1998,6 +2001,9 @@ sbbs_t::~sbbs_t()
 
 	lprintf("%s destructor begin", node);
 
+	if(!cfg.node_num)
+		rmdir(cfg.temp_dir);
+
 	if(client_socket_dup!=INVALID_SOCKET)
 		closesocket(client_socket_dup);	/* close duplicate handle */