diff --git a/src/sbbs3/uedit/uedit.c b/src/sbbs3/uedit/uedit.c
index 9351e8190f4a1b9b770afcc0f63c2210d604be61..4a931550d7126c961cd7a99adce35f44bffe0ee3 100644
--- a/src/sbbs3/uedit/uedit.c
+++ b/src/sbbs3/uedit/uedit.c
@@ -129,16 +129,6 @@ void allocfail(uint size)
     bail(1);
 }
 
-void freeopt(char** opt)
-{
-	int i;
-
-	for(i=0;i<(MAX_OPTS+1);i++)
-		free(opt[i]);
-
-	free(opt);
-}
-
 int confirm(char *prompt)
 {
 	int i=0;
@@ -239,10 +229,10 @@ int edit_terminal(scfg_t *cfg, user_t *user)
 	char 	**opt;
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -263,7 +253,6 @@ int edit_terminal(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT|WIN_SAV,0,0,0,&j,0,"Terminal Settings",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -338,10 +327,10 @@ int edit_logon(scfg_t *cfg, user_t *user)
 	char 	**opt;
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -356,7 +345,6 @@ int edit_logon(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT|WIN_SAV,0,0,0,&j,0,"Logon Settings",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -402,10 +390,10 @@ int edit_chat(scfg_t *cfg, user_t *user)
 	char 	**opt;
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -420,7 +408,6 @@ int edit_chat(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT|WIN_SAV,0,0,0,&j,0,"Chat Settings",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -460,7 +447,7 @@ int edit_shell(scfg_t *cfg, user_t *user)
 	int 	i,j;
 	char 	**opt;
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 
 
@@ -479,7 +466,6 @@ int edit_shell(scfg_t *cfg, user_t *user)
 			}
 			break;
 	}
-	free(opt);
 	return(0);
 }
 
@@ -493,10 +479,10 @@ int edit_cmd(scfg_t *cfg, user_t *user)
 	char 	**opt;
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -508,7 +494,6 @@ int edit_cmd(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT|WIN_SAV,0,0,0,&j,0,"Command Shell",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -532,7 +517,7 @@ int edit_xedit(scfg_t *cfg, user_t *user)
 	int 	i,j;
 	char 	**opt;
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 
 	getuserdat(cfg,user);
@@ -555,7 +540,6 @@ int edit_xedit(scfg_t *cfg, user_t *user)
 			}
 			break;
 	}
-	free(opt);
 	return(0);
 }
 
@@ -570,10 +554,10 @@ int edit_msgopts(scfg_t *cfg, user_t *user)
 	char 	**opt;
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -586,7 +570,6 @@ int edit_msgopts(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT|WIN_SAV,0,0,0,&j,0,"Message Options",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -615,7 +598,7 @@ int edit_tmpqwktype(scfg_t *cfg, user_t *user)
 	int		j=0;
 	char 	**opt;
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 
 	getuserdat(cfg,user);
@@ -635,7 +618,6 @@ int edit_tmpqwktype(scfg_t *cfg, user_t *user)
 			}
 			break;
 	}
-	free(opt);
 	return(0);
 }
 
@@ -658,10 +640,10 @@ int edit_qwk(scfg_t *cfg, user_t *user)
 	char 	**opt;
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -686,7 +668,6 @@ int edit_qwk(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT|WIN_SAV,0,0,0,&j,0,"Command Shell",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -776,7 +757,7 @@ int edit_proto(scfg_t *cfg, user_t *user)
 	int		j=0;
 	char 	**opt;
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 
 	getuserdat(cfg,user);
@@ -802,7 +783,6 @@ int edit_proto(scfg_t *cfg, user_t *user)
 			}
 			break;
 	}
-	free(opt);
 	return(0);
 }
 
@@ -821,10 +801,10 @@ int edit_fileopts(scfg_t *cfg, user_t *user)
 	char 	**opt;
 	char 	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -844,7 +824,6 @@ int edit_fileopts(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT|WIN_SAV,0,0,0,&j,0,"File Options",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -996,10 +975,10 @@ int edit_stats(scfg_t *cfg, user_t *user)
 	char	str[256];
 	time_t	temptime,temptime2;
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -1029,7 +1008,6 @@ int edit_stats(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT,0,0,0,&j,0,"Statistics",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -1280,10 +1258,10 @@ int edit_security(scfg_t *cfg, user_t *user)
 	char 	**opt;
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -1304,7 +1282,6 @@ int edit_security(scfg_t *cfg, user_t *user)
 		opt[i][0]=0;
 		switch(uifc.list(WIN_MID|WIN_ACT,0,0,0,&j,0,"Security Settings",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 				break;
 			case 0:
@@ -1449,10 +1426,10 @@ int edit_personal(scfg_t *cfg, user_t *user)
 	char	onech[2];
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	j=0;
@@ -1478,7 +1455,6 @@ int edit_personal(scfg_t *cfg, user_t *user)
 		uifc.changes=FALSE;
 		switch(uifc.list(WIN_MID|WIN_ACT,0,0,0,&j,0,"Personal Settings",opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 			case 0:
 				/* Real Name */
@@ -1608,10 +1584,10 @@ int edit_user(scfg_t *cfg, int usernum)
 	user_t	user;
 	char	str[256];
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	user.number=usernum;
@@ -1639,7 +1615,6 @@ int edit_user(scfg_t *cfg, int usernum)
 		sprintf(str,"Edit User: %d (%s)",user.number,user.name[0]?user.name:user.alias);
 		switch(uifc.list(WIN_ORG|WIN_ACT,0,0,0,&j,0,str,opt)) {
 			case -1:
-				freeopt(opt);
 				return(0);
 
 			case 0:
@@ -1693,7 +1668,7 @@ int finduser(scfg_t *cfg, user_t *user)
 	struct user_list **opt;
 	int done=0;
 
-	if((opt=(struct user_list **)malloc(sizeof(struct user_list *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(struct user_list **)alloca(sizeof(struct user_list *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(struct user_list *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
 		opt[i]=NULL;
@@ -1711,13 +1686,13 @@ int finduser(scfg_t *cfg, user_t *user)
 			getuserdat(cfg,user);
 			if(strcasestr(user->alias, str)!=NULL || strcasestr(user->name, str)!=NULL || strcasestr(user->handle, str)!=NULL
 					|| user->number==un) {
-				if((opt[j]=(struct user_list *)malloc(sizeof(struct user_list)))==NULL)
+				if((opt[j]=(struct user_list *)alloca(sizeof(struct user_list)))==NULL)
 					allocfail(sizeof(struct user_list));
 				sprintf(opt[j]->info,"%1.1s�%1.1s� %-25.25s � %-25.25s",user->misc&DELETED?"*":" ",user->misc&INACTIVE?"*":" ",user->name,user->alias);
 				opt[j++]->usernum=i;
 			}
 		}
-		if((opt[j]=(struct user_list *)malloc(sizeof(struct user_list)))==NULL)
+		if((opt[j]=(struct user_list *)alloca(sizeof(struct user_list)))==NULL)
 			allocfail(sizeof(struct user_list));
 		opt[j]->info[0]=0;
 		i=0;
@@ -1743,7 +1718,7 @@ int getuser(scfg_t *cfg, user_t *user, char* str)
 	struct user_list **opt;
 	int done=0;
 
-	if((opt=(struct user_list **)malloc(sizeof(struct user_list *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(struct user_list **)alloca(sizeof(struct user_list *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(struct user_list *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
 		opt[i]=NULL;
@@ -1757,13 +1732,13 @@ int getuser(scfg_t *cfg, user_t *user, char* str)
 			user->number=i;
 			getuserdat(cfg,user);
 			if(strcasestr(user->alias, str)!=NULL || strcasestr(user->name, str)!=NULL || strcasestr(user->handle, str)!=NULL) {
-				if((opt[j]=(struct user_list *)malloc(sizeof(struct user_list)))==NULL)
+				if((opt[j]=(struct user_list *)alloca(sizeof(struct user_list)))==NULL)
 					allocfail(sizeof(struct user_list));
 				sprintf(opt[j]->info,"%1.1s�%1.1s� %-25.25s � %-25.25s",user->misc&DELETED?"*":" ",user->misc&INACTIVE?"*":" ",user->name,user->alias);
 				opt[j++]->usernum=i;
 			}
 		}
-		if((opt[j]=(struct user_list *)malloc(sizeof(struct user_list)))==NULL)
+		if((opt[j]=(struct user_list *)alloca(sizeof(struct user_list)))==NULL)
 			allocfail(sizeof(struct user_list));
 		opt[j]->info[0]=0;
 		i=0;
@@ -2046,16 +2021,16 @@ int main(int argc, char** argv)  {
 		exit(1);
 	}
 
-	if((opt=(char **)malloc(sizeof(char *)*(MAX_OPTS+1)))==NULL)
+	if((opt=(char **)alloca(sizeof(char *)*(MAX_OPTS+1)))==NULL)
 		allocfail(sizeof(char *)*(MAX_OPTS+1));
 	for(i=0;i<(MAX_OPTS+1);i++)
-		if((opt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
-	if((mopt=(char **)malloc(sizeof(char *)*MAX_OPTS))==NULL)
+	if((mopt=(char **)alloca(sizeof(char *)*MAX_OPTS))==NULL)
 		allocfail(sizeof(char *)*MAX_OPTS);
 	for(i=0;i<MAX_OPTS;i++)
-		if((mopt[i]=(char *)malloc(MAX_OPLN))==NULL)
+		if((mopt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
 	sprintf(title,"Synchronet User Editor %s-%s",revision,PLATFORM_DESC);