diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index ee127b7bc01b0008a614fb045b3f5ae734cf3ca9..faba9c6f81bb6b45a4d4391ba6644f9385577b13 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -2240,6 +2240,8 @@ void DLLCALL mail_terminate(void)
 
 static void cleanup(int code)
 {
+	free_cfg(&scfg);
+
 	if(server_socket!=INVALID_SOCKET) {
 		mail_close_socket(server_socket);
 		server_socket=INVALID_SOCKET;
@@ -2333,6 +2335,8 @@ void DLLCALL mail_server(void* arg)
 
 	status("Initializing");
 
+    memset(&scfg, 0, sizeof(scfg));
+
 #ifdef __unix__		/* Ignore "Broken Pipe" signal */
 	signal(SIGPIPE,SIG_IGN);
 #endif
@@ -2376,7 +2380,6 @@ void DLLCALL mail_server(void* arg)
 		,ctime(&t),startup->options);
 
 	/* Initial configuration and load from CNF files */
-    memset(&scfg, 0, sizeof(scfg));
     sprintf(scfg.ctrl_dir, "%.*s", (int)sizeof(scfg.ctrl_dir)-1
     	,startup->ctrl_dir);
     lprintf("Loading configuration files from %s", scfg.ctrl_dir);