diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c
index 55ff9f4014b89fd964c23edfb0e5bb0cdfea7ef3..6d195cde2e3ba5a227bbc22ff972da28ca6e3a63 100644
--- a/src/sbbs3/scfglib1.c
+++ b/src/sbbs3/scfglib1.c
@@ -900,48 +900,86 @@ BOOL read_msgs_cfg(scfg_t* cfg, read_cfg_text_t* txt)
 
 void free_node_cfg(scfg_t* cfg)
 {
-	FREE_AND_NULL(cfg->mdm_result);
+	int i;
+
+	if(cfg->mdm_result!=NULL) {
+		for(i=0;i<cfg->mdm_results;i++) {
+			FREE_ALLOC(cfg->mdm_result[i].str);
+		}
+		FREE_AND_NULL(cfg->mdm_result);
+	}
+
+	for(i=0;i<10;i++) { 						/* WFC 0-9 DOS commands */
+		FREE_ALLOC(cfg->wfc_cmd[i]); 
+	}
+	for(i=0;i<12;i++) { 						/* WFC F1-F12 shrinking DOS cmds */
+		FREE_ALLOC(cfg->wfc_scmd[i]); 
+	}
 }
 
 void free_main_cfg(scfg_t* cfg)
 {
 	int i;
 
-	for(i=0;i<cfg->sys_nodes;i++)
-		FREE_AND_NULL(cfg->node_path[i]);
-	FREE_AND_NULL(cfg->node_path);
-	for(i=0;i<cfg->total_shells;i++)
-		FREE_AND_NULL(cfg->shell[i]);
-	FREE_AND_NULL(cfg->shell);
+	if(cfg->node_path!=NULL) {
+		for(i=0;i<cfg->sys_nodes;i++)
+			FREE_AND_NULL(cfg->node_path[i]);
+		FREE_AND_NULL(cfg->node_path);
+	}
+	if(cfg->shell!=NULL) {
+		for(i=0;i<cfg->total_shells;i++) {
+			FREE_ALLOC(cfg->shell[i]->name);
+			FREE_AND_NULL(cfg->shell[i]);
+		}
+		FREE_AND_NULL(cfg->shell);
+	}
 }
 
 void free_msgs_cfg(scfg_t* cfg)
 {
 	int i;
 
-	for(i=0;i<cfg->total_grps;i++)
-		FREE_AND_NULL(cfg->grp[i]);
-	FREE_AND_NULL(cfg->grp);
+	if(cfg->grp!=NULL) {
+		for(i=0;i<cfg->total_grps;i++) {
+			FREE_ALLOC(cfg->grp[i]->lname);
+			FREE_ALLOC(cfg->grp[i]->sname);
+			FREE_AND_NULL(cfg->grp[i]);
+		}
+		FREE_AND_NULL(cfg->grp);
+	}
 
-	for(i=0;i<cfg->total_subs;i++)
-		FREE_AND_NULL(cfg->sub[i]);
-	FREE_AND_NULL(cfg->sub);
+	if(cfg->sub!=NULL) {
+		for(i=0;i<cfg->total_subs;i++) {
+			FREE_ALLOC(cfg->sub[i]->lname);
+			FREE_ALLOC(cfg->sub[i]->sname);
+			FREE_ALLOC(cfg->sub[i]->qwkname);
+			FREE_AND_NULL(cfg->sub[i]);
+		}
+		FREE_AND_NULL(cfg->sub);
+	}
 
 	FREE_AND_NULL(cfg->faddr);
 	cfg->total_faddrs=0;
 
-	for(i=0;i<cfg->total_qhubs;i++) {
-		FREE_AND_NULL(cfg->qhub[i]->mode);
-		FREE_AND_NULL(cfg->qhub[i]->conf);
-		FREE_AND_NULL(cfg->qhub[i]->sub);
-		FREE_AND_NULL(cfg->qhub[i]); }
-	FREE_AND_NULL(cfg->qhub);
-	cfg->qhub=NULL;
-
-	for(i=0;i<cfg->total_phubs;i++)
-		FREE_AND_NULL(cfg->phub[i]);
-	FREE_AND_NULL(cfg->phub);
+	if(cfg->qhub!=NULL) {
+		for(i=0;i<cfg->total_qhubs;i++) {
+			FREE_ALLOC(cfg->qhub[i]->call);
+			FREE_ALLOC(cfg->qhub[i]->pack);
+			FREE_ALLOC(cfg->qhub[i]->unpack);
+			FREE_AND_NULL(cfg->qhub[i]->mode);
+			FREE_AND_NULL(cfg->qhub[i]->conf);
+			FREE_AND_NULL(cfg->qhub[i]->sub);
+			FREE_AND_NULL(cfg->qhub[i]); }
+		FREE_AND_NULL(cfg->qhub);
+	}
 
+	if(cfg->phub!=NULL) {
+		for(i=0;i<cfg->total_phubs;i++) {
+			FREE_ALLOC(cfg->phub[i]->call);
+			FREE_AND_NULL(cfg->phub[i]);
+		}
+		FREE_AND_NULL(cfg->phub);
+	}
 }
 
 /************************************************************/
diff --git a/src/sbbs3/scfglib2.c b/src/sbbs3/scfglib2.c
index ad832c99f6b6df37bdeca8375cfd0e895bca70ab..7018204c85ab28bb53117a273259df7c6741b3ce 100644
--- a/src/sbbs3/scfglib2.c
+++ b/src/sbbs3/scfglib2.c
@@ -1097,70 +1097,141 @@ void free_file_cfg(scfg_t* cfg)
 {
 	uint i;
 
-	for(i=0;i<cfg->total_fextrs;i++)
-		FREE_AND_NULL(cfg->fextr[i]);
-	FREE_AND_NULL(cfg->fextr);
-
-	for(i=0;i<cfg->total_fcomps;i++)
-		FREE_AND_NULL(cfg->fcomp[i]);
-	FREE_AND_NULL(cfg->fcomp);
-
-	for(i=0;i<cfg->total_fviews;i++)
-		FREE_AND_NULL(cfg->fview[i]);
-	FREE_AND_NULL(cfg->fview);
-
-	for(i=0;i<cfg->total_ftests;i++)
-		FREE_AND_NULL(cfg->ftest[i]);
-	FREE_AND_NULL(cfg->ftest);
-
-	for(i=0;i<cfg->total_dlevents;i++)
-		FREE_AND_NULL(cfg->dlevent[i]);
-	FREE_AND_NULL(cfg->dlevent);
-
-	for(i=0;i<cfg->total_prots;i++)
-		FREE_AND_NULL(cfg->prot[i]);
-	FREE_AND_NULL(cfg->prot);
-
-	for(i=0;i<cfg->altpaths;i++)
-		FREE_AND_NULL(cfg->altpath[i]);
-	FREE_AND_NULL(cfg->altpath);
+	if(cfg->fextr!=NULL) {
+		for(i=0;i<cfg->total_fextrs;i++) {
+			FREE_ALLOC(cfg->fextr[i]->cmd);
+			FREE_AND_NULL(cfg->fextr[i]);
+		}
+		FREE_AND_NULL(cfg->fextr);
+	}
 
-	for(i=0;i<cfg->total_libs;i++)
-		FREE_AND_NULL(cfg->lib[i]);
-	FREE_AND_NULL(cfg->lib);
+	if(cfg->fcomp!=NULL) {
+		for(i=0;i<cfg->total_fcomps;i++) {
+			FREE_ALLOC(cfg->fcomp[i]->cmd);
+			FREE_AND_NULL(cfg->fcomp[i]);
+		}
+		FREE_AND_NULL(cfg->fcomp);
+	}
 
-	for(i=0;i<cfg->total_dirs;i++)
-		FREE_AND_NULL(cfg->dir[i]);
-	FREE_AND_NULL(cfg->dir);
+	if(cfg->fview!=NULL) {
+		for(i=0;i<cfg->total_fviews;i++) {
+			FREE_ALLOC(cfg->fview[i]->cmd);
+			FREE_AND_NULL(cfg->fview[i]);
+		}
+		FREE_AND_NULL(cfg->fview);
+	}
+
+	if(cfg->ftest!=NULL) {
+		for(i=0;i<cfg->total_ftests;i++) {
+			FREE_ALLOC(cfg->ftest[i]->cmd);
+			FREE_ALLOC(cfg->ftest[i]->workstr);
+			FREE_AND_NULL(cfg->ftest[i]);
+		}
+		FREE_AND_NULL(cfg->ftest);
+	}
+
+	if(cfg->dlevent!=NULL) {
+		for(i=0;i<cfg->total_dlevents;i++) {
+			FREE_ALLOC(cfg->dlevent[i]->cmd);
+			FREE_ALLOC(cfg->dlevent[i]->workstr);
+			FREE_AND_NULL(cfg->dlevent[i]);
+		}
+		FREE_AND_NULL(cfg->dlevent);
+	}
+
+	if(cfg->prot!=NULL) {
+		for(i=0;i<cfg->total_prots;i++) {
+			FREE_ALLOC(cfg->prot[i]->name);
+			FREE_ALLOC(cfg->prot[i]->ulcmd);
+			FREE_ALLOC(cfg->prot[i]->dlcmd);
+			FREE_ALLOC(cfg->prot[i]->batulcmd);
+			FREE_ALLOC(cfg->prot[i]->batdlcmd);
+			FREE_ALLOC(cfg->prot[i]->blindcmd);
+			FREE_ALLOC(cfg->prot[i]->bicmd);
+			FREE_AND_NULL(cfg->prot[i]);
+		}
+		FREE_AND_NULL(cfg->prot);
+	}
+
+	if(cfg->altpath!=NULL) {
+		for(i=0;i<cfg->altpaths;i++)
+			FREE_AND_NULL(cfg->altpath[i]);
+		FREE_AND_NULL(cfg->altpath);
+	}
+
+	if(cfg->lib!=NULL) {
+		for(i=0;i<cfg->total_libs;i++) {
+			FREE_ALLOC(cfg->lib[i]->lname);
+			FREE_ALLOC(cfg->lib[i]->sname);
+			FREE_AND_NULL(cfg->lib[i]);
+		}
+		FREE_AND_NULL(cfg->lib);
+	}
+
+	if(cfg->dir!=NULL) {
+		for(i=0;i<cfg->total_dirs;i++) {
+			FREE_ALLOC(cfg->dir[i]->lname);
+			FREE_ALLOC(cfg->dir[i]->sname);
+			FREE_ALLOC(cfg->dir[i]->exts);
+			FREE_ALLOC(cfg->dir[i]->upload_sem);
+			FREE_AND_NULL(cfg->dir[i]);
+		}
+		FREE_AND_NULL(cfg->dir);
+	}
 
-	for(i=0;i<cfg->total_txtsecs;i++)
-		FREE_AND_NULL(cfg->txtsec[i]);
-	FREE_AND_NULL(cfg->txtsec);
+	if(cfg->txtsec!=NULL) {
+		for(i=0;i<cfg->total_txtsecs;i++) {
+			FREE_ALLOC(cfg->txtsec[i]->name);
+			FREE_AND_NULL(cfg->txtsec[i]);
+		}
+		FREE_AND_NULL(cfg->txtsec);
+	}
 }
 
 void free_chat_cfg(scfg_t* cfg)
 {
 	int i;
 
-	for(i=0;i<cfg->total_actsets;i++)
-		FREE_AND_NULL(cfg->actset[i]);
-	FREE_AND_NULL(cfg->actset);
-
-	for(i=0;i<cfg->total_chatacts;i++)
-		FREE_AND_NULL(cfg->chatact[i]);
-	FREE_AND_NULL(cfg->chatact);
+	if(cfg->actset!=NULL) {
+		for(i=0;i<cfg->total_actsets;i++) {
+			FREE_ALLOC(cfg->actset[i]->name);
+			FREE_AND_NULL(cfg->actset[i]);
+		}
+		FREE_AND_NULL(cfg->actset);
+	}
+
+	if(cfg->chatact!=NULL) {
+		for(i=0;i<cfg->total_chatacts;i++) {
+			FREE_ALLOC(cfg->chatact[i]->cmd);
+			FREE_ALLOC(cfg->chatact[i]->out);
+			FREE_AND_NULL(cfg->chatact[i]);
+		}
+		FREE_AND_NULL(cfg->chatact);
+	}
 
-	for(i=0;i<cfg->total_chans;i++)
-		FREE_AND_NULL(cfg->chan[i]);
-	FREE_AND_NULL(cfg->chan);
+	if(cfg->chan!=NULL) {
+		for(i=0;i<cfg->total_chans;i++) {
+			FREE_ALLOC(cfg->chan[i]->name);
+			FREE_AND_NULL(cfg->chan[i]);
+		}
+		FREE_AND_NULL(cfg->chan);
+	}
 
-	for(i=0;i<cfg->total_gurus;i++)
-		FREE_AND_NULL(cfg->guru[i]);
-	FREE_AND_NULL(cfg->guru);
+	if(cfg->guru!=NULL) {
+		for(i=0;i<cfg->total_gurus;i++) {
+			FREE_ALLOC(cfg->guru[i]->name);
+			FREE_AND_NULL(cfg->guru[i]);
+		}
+		FREE_AND_NULL(cfg->guru);
+	}
 
-	for(i=0;i<cfg->total_pages;i++)
-		FREE_AND_NULL(cfg->page[i]);
-	FREE_AND_NULL(cfg->page);
+	if(cfg->page!=NULL) {
+		for(i=0;i<cfg->total_pages;i++) {
+			FREE_ALLOC(cfg->page[i]->cmd);
+			FREE_AND_NULL(cfg->page[i]);
+		}
+		FREE_AND_NULL(cfg->page);
+	}
 
 }
 
@@ -1168,24 +1239,55 @@ void free_xtrn_cfg(scfg_t* cfg)
 {
 	int i;
 
-	for(i=0;i<cfg->total_swaps;i++)
-		FREE_AND_NULL(cfg->swap[i]);
-	FREE_AND_NULL(cfg->swap);
-
-	for(i=0;i<cfg->total_xedits;i++)
-		FREE_AND_NULL(cfg->xedit[i]);
-	FREE_AND_NULL(cfg->xedit);
-
-	for(i=0;i<cfg->total_xtrnsecs;i++)
-		FREE_AND_NULL(cfg->xtrnsec[i]);
-	FREE_AND_NULL(cfg->xtrnsec);
+	if(cfg->swap!=NULL) {
+		for(i=0;i<cfg->total_swaps;i++) {
+			FREE_ALLOC(cfg->swap[i]->cmd);
+			FREE_AND_NULL(cfg->swap[i]);
+		}
+		FREE_AND_NULL(cfg->swap);
+	}
+
+	if(cfg->xedit!=NULL) {
+		for(i=0;i<cfg->total_xedits;i++) {
+			FREE_ALLOC(cfg->xedit[i]->name);
+			FREE_ALLOC(cfg->xedit[i]->lcmd);
+			FREE_ALLOC(cfg->xedit[i]->rcmd);
+			FREE_AND_NULL(cfg->xedit[i]);
+		}
+		FREE_AND_NULL(cfg->xedit);
+	}
 
-	for(i=0;i<cfg->total_xtrns;i++)
-		FREE_AND_NULL(cfg->xtrn[i]);
-	FREE_AND_NULL(cfg->xtrn);
+	if(cfg->xtrnsec!=NULL) {
+		for(i=0;i<cfg->total_xtrnsecs;i++) {
+			FREE_ALLOC(cfg->xtrnsec[i]->name);
+			FREE_AND_NULL(cfg->xtrnsec[i]);
+		}
+		FREE_AND_NULL(cfg->xtrnsec);
+	}
+
+	if(cfg->xtrn!=NULL) {
+		for(i=0;i<cfg->total_xtrns;i++) {
+			FREE_ALLOC(cfg->xtrn[i]->name);
+			FREE_ALLOC(cfg->xtrn[i]->cmd);
+			FREE_ALLOC(cfg->xtrn[i]->clean);
+			FREE_AND_NULL(cfg->xtrn[i]);
+		}
+		FREE_AND_NULL(cfg->xtrn);
+	}
 
-	for(i=0;i<cfg->total_events;i++)
-		FREE_AND_NULL(cfg->event[i]);
-	FREE_AND_NULL(cfg->event);
+	if(cfg->event!=NULL) {
+		for(i=0;i<cfg->total_events;i++) {
+			FREE_ALLOC(cfg->event[i]->cmd);
+			FREE_AND_NULL(cfg->event[i]);
+		}
+		FREE_AND_NULL(cfg->event);
+	}
 
+	if(cfg->natvpgm!=NULL) {
+		for(i=0;i<cfg->total_natvpgms;i++) {
+			FREE_ALLOC(cfg->natvpgm[i]->name);
+			FREE_AND_NULL(cfg->natvpgm[i]);
+		}
+		FREE_AND_NULL(cfg->natvpgm);
+	}
 }