diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index 989bf42e131976d65d96e11c8dbc37c10e2eb36b..643a3b6866f7c23321389754dfd3c72cd97bfa49 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -515,7 +515,7 @@ typedef enum {						/* Values for xtrn_t.event				*/
 #define LEN_COMP		30	/* User computer description					*/
 #define LEN_COMMENT 	60	/* User comment 								*/
 #define LEN_NETMAIL 	60	/* NetMail forwarding address					*/
-#define LEN_PASS		 8	/* User password								*/
+#define LEN_OLDPASS		 8	/* User password (old)							*/
 #define LEN_PHONE		12	/* User phone number							*/
 #define LEN_BIRTH		 8	/* Birthday in MM/DD/YY format					*/
 #define LEN_ADDRESS 	30	/* User address 								*/
@@ -526,9 +526,10 @@ typedef enum {						/* Values for xtrn_t.event				*/
 #define LEN_FCDT		 9	/* 9 digits for file credit values				*/
 #define LEN_TITLE		70	/* Message title								*/
 #define LEN_MAIN_CMD	34	/* Storage in user.dat for custom commands		*/
-#define LEN_XFER_CMD	40
+#define LEN_PASS		40
+#define MIN_PASS_LEN	 4
 #define LEN_SCAN_CMD	35
-#define LEN_IPADDR	45
+#define LEN_IPADDR		45
 #define LEN_CID 		45	/* Caller ID (phone number) 					*/
 #define LEN_ARSTR		40	/* Max length of Access Requirement string		*/
 #define LEN_CHATACTCMD	 9	/* Chat action command							*/
@@ -551,8 +552,8 @@ typedef enum {						/* Values for xtrn_t.event				*/
 #define U_LOCATION	U_ADDRESS+LEN_ADDRESS
 #define U_ZIPCODE	U_LOCATION+LEN_LOCATION
 
-#define U_PASS		U_ZIPCODE+LEN_ZIPCODE+2
-#define U_PHONE  	U_PASS+8  			/* Offset to phone-number */
+#define U_OLDPASS	U_ZIPCODE+LEN_ZIPCODE+2
+#define U_PHONE  	U_OLDPASS+LEN_OLDPASS  	/* Offset to phone-number */
 #define U_BIRTH  	U_PHONE+12 		/* Offset to users birthday	*/
 #define U_MODEM     U_BIRTH+8
 #define U_LASTON	U_MODEM+8
@@ -593,8 +594,8 @@ typedef enum {						/* Values for xtrn_t.event				*/
 #define U_CURSUB	U_LEECH+2  	/* Current sub (internal code)  */
 #define U_CURXTRN	U_CURSUB+16 /* Current xtrn (internal code) */
 #define U_MAIN_CMD	U_CURXTRN+8+2 	/* unused */
-#define U_XFER_CMD	U_MAIN_CMD+LEN_MAIN_CMD 		/* unused */
-#define U_SCAN_CMD	U_XFER_CMD+LEN_XFER_CMD+2  	/* unused */
+#define U_PASS		U_MAIN_CMD+LEN_MAIN_CMD
+#define U_SCAN_CMD	U_PASS+LEN_PASS+2  				/* unused */
 #define U_IPADDR	U_SCAN_CMD+LEN_SCAN_CMD 		/* unused */
 #define U_FREECDT	U_IPADDR+LEN_IPADDR+2
 #define U_FLAGS3	U_FREECDT+10 	/* Flag set #3 */
diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index 2583f96f4ddcda042d083810d32305547190863c..925a150b3ad0bb6b5f2cd19100fd48908083595e 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -296,6 +296,8 @@ int parseuserdat(scfg_t* cfg, char *userdat, user_t *user)
 	getrec(userdat,U_LOCATION,LEN_LOCATION,user->location);
 	getrec(userdat,U_ZIPCODE,LEN_ZIPCODE,user->zipcode);
 	getrec(userdat,U_PASS,LEN_PASS,user->pass);
+	if(user->pass[0] == 0)	// Backwards compatibility hack
+		getrec(userdat, U_OLDPASS, LEN_OLDPASS, user->pass);
 	getrec(userdat,U_PHONE,LEN_PHONE,user->phone);
 	getrec(userdat,U_BIRTH,LEN_BIRTH,user->birth);
 	getrec(userdat,U_MODEM,LEN_MODEM,user->modem);
@@ -530,6 +532,7 @@ int putuserdat(scfg_t* cfg, user_t* user)
 	putrec(userdat,U_ZIPCODE+LEN_ZIPCODE,2,crlf);
 
 	putrec(userdat,U_PASS,LEN_PASS,user->pass);
+	putrec(userdat,U_OLDPASS,LEN_OLDPASS,user->pass);	// So a sysop can downgrade to a previous build/version
 	putrec(userdat,U_PHONE,LEN_PHONE,user->phone);
 	putrec(userdat,U_BIRTH,LEN_BIRTH,user->birth);
 	putrec(userdat,U_MODEM,LEN_MODEM,user->modem);
@@ -580,7 +583,7 @@ int putuserdat(scfg_t* cfg, user_t* user)
 	putrec(userdat,U_CURXTRN,8,user->curxtrn);
 	putrec(userdat,U_CURXTRN+8,2,crlf);
 
-	putrec(userdat,U_XFER_CMD+LEN_XFER_CMD,2,crlf);
+	putrec(userdat,U_PASS+LEN_PASS, 2, crlf);
 
 	putrec(userdat,U_IPADDR+LEN_IPADDR,2,crlf);
 
@@ -2104,6 +2107,9 @@ int getuserrec(scfg_t* cfg, int usernumber,int start, int length, char *str)
 		if(str[c]==ETX || str[c]==CR) break;
 	str[c]=0;
 
+	if(c == 0 && start == LEN_PASS) // Backwards compatibility hack
+		return getuserrec(cfg, usernumber, U_OLDPASS, LEN_OLDPASS, str);
+
 	return(0);
 }