diff --git a/src/sbbs3/uedit/uedit.c b/src/sbbs3/uedit/uedit.c
index 497b88c1d1aaf5eb769fbf38b408efb3293b2b16..2623e1cf923d85e8afea94b2567caf20e2152526 100644
--- a/src/sbbs3/uedit/uedit.c
+++ b/src/sbbs3/uedit/uedit.c
@@ -120,17 +120,22 @@ int confirm(char *prompt)
 	i=uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0,prompt,opt);
 	if(i==0)
 		return(1);
-	return(0);	
+	if(i==-1)
+		return(-1);
+	return(0);
 }
 
 int check_save(scfg_t *cfg,user_t *user)
 {
+	int i;
+
 	if(modified) {
-		if(confirm("Save Changes?")) {
+		i=confirm("Save Changes?");
+		if(i==1) {
 			putuserdat(cfg,user);
 		}
 	}
-	return(0);
+	return(i);
 }
 
 /* Edit "Extended comment" */
@@ -200,6 +205,18 @@ int edit_stats(scfg_t *cfg, user_t *user)
  */
 int edit_security(scfg_t *cfg, user_t *user)
 {
+	int 	i,j;
+	char 	**opt;
+	char	onech[2];
+
+	if((opt=(char **)MALLOC(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)
+			allocfail(MAX_OPLN);
+
+	
+	
 	return(0);
 }
 
@@ -222,6 +239,125 @@ int edit_security(scfg_t *cfg, user_t *user)
  */
 int edit_personal(scfg_t *cfg, user_t *user)
 {
+	int 	i,j;
+	char 	**opt;
+	char	onech[2];
+
+	if((opt=(char **)MALLOC(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)
+			allocfail(MAX_OPLN);
+
+	j=0;
+	while(1) {
+		i=0;
+		sprintf(opt[i++],"Real Name:  %s",user->name);
+		sprintf(opt[i++],"Computer:   %s",user->comp);
+		sprintf(opt[i++],"NetMail:    %s",user->netmail);
+		sprintf(opt[i++],"Phone:      %s",user->phone);
+		sprintf(opt[i++],"Note:       %s",user->note);
+		sprintf(opt[i++],"Comment:    %s",user->comment);
+		sprintf(opt[i++],"Gender:     %c",user->sex);
+		sprintf(opt[i++],"Connection: %s",user->modem);
+		sprintf(opt[i++],"Handle:     %s",user->alias);
+		sprintf(opt[i++],"Bitrate:    Hrm...");
+		sprintf(opt[i++],"Password:   %s",user->pass);
+		sprintf(opt[i++],"Location:   %s",user->location);
+		sprintf(opt[i++],"Address:    %s",user->address);
+		sprintf(opt[i++],"Postal/Zip: %s",user->zipcode);
+		uifc.changes=FALSE;
+		switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&j,0,"Personal Settings",opt)) {
+			case -1:
+				freeopt(opt);
+				return(0);
+			case 0:
+				/* Real Name */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Real Name",user->name,LEN_NAME,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 1:
+				/* Computer */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Computer",user->comp,LEN_COMP,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 2:
+				/* NetMail */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"NetMail Address",user->netmail,LEN_NETMAIL,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 3:
+				/* Phone */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Phone",user->phone,LEN_PHONE,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 4:
+				/* Note */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Note",user->note,LEN_NOTE,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 5:
+				/* Comment */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Comment",user->comment,LEN_COMMENT,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 6:
+				/* Gender */
+				sprintf(onech,"%c",user->sex);
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Gender",onech,1,K_UPPER|K_ALPHA|K_EDIT);
+				if(onech[0]!=user->sex && (onech[0]=='M' || onech[0]=='F')) {
+					modified=1;
+					user->sex=onech[0];
+				}
+				break;
+			case 7:
+				/* Connection */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Connection",user->modem,LEN_MODEM,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 8:
+				/* Handle */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Handle",user->alias,LEN_ALIAS,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 9:
+				/* Bitrate */
+				break;
+			case 10:
+				/* Password */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Password",user->pass,LEN_PASS,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 11:
+				/* Location */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Location",user->location,LEN_LOCATION,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 12:
+				/* Address */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Address",user->address,LEN_ADDRESS,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+			case 13:
+				/* Postal/Zip */
+				uifc.input(WIN_MID|WIN_SAV,0,0,"Postal/Zip Code",user->zipcode,LEN_ZIPCODE,K_EDIT);
+				if(uifc.changes)
+					modified=1;
+				break;
+		}
+	}
+
 	return(0);
 }
 
@@ -263,14 +399,16 @@ int edit_user(scfg_t *cfg, int usernum)
 		switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0,"Edit User",opt)) {
 			case -1:
 				if(modified) {
-					check_save(cfg,&user);
+					j=check_save(cfg,&user);
+				}
+				if(j!=-1) {
+					freeopt(opt);
+					return(0);
 				}
-				freeopt(opt);
-				return(0);
 				break;
 
 			case 0:
-				if(modified && confirm("This will undo any changes you have made.  Continue?")) {
+				if(modified && confirm("This will undo any changes you have made.  Continue?")==1) {
 					getuserdat(cfg,&user);
 				}