diff --git a/src/sbbs3/js_user.c b/src/sbbs3/js_user.c
index 62b29719e40da89da480486f622dce33bf60debb..48e6f9b25a1aa04c3d659a1f4b60399efc77941c 100644
--- a/src/sbbs3/js_user.c
+++ b/src/sbbs3/js_user.c
@@ -66,7 +66,10 @@ enum {
 	,USER_PROP_ZIPCODE
 	,USER_PROP_PASS
 	,USER_PROP_PHONE  	
-	,USER_PROP_BIRTH  
+	,USER_PROP_BIRTH
+	,USER_PROP_BIRTHYEAR
+	,USER_PROP_BIRTHMONTH
+	,USER_PROP_BIRTHDAY
 	,USER_PROP_AGE		/* READ ONLY */
 	,USER_PROP_MODEM     
 	,USER_PROP_LASTON	
@@ -209,6 +212,15 @@ static JSBool js_user_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
 		case USER_PROP_BIRTH:
 			s=p->user->birth;
 			break;
+		case USER_PROP_BIRTHYEAR:
+			val = getbirthyear(p->user->birth);
+			break;
+		case USER_PROP_BIRTHMONTH:
+			val = getbirthmonth(scfg, p->user->birth);
+			break;
+		case USER_PROP_BIRTHDAY:
+			val = getbirthday(scfg, p->user->birth);
+			break;
 		case USER_PROP_AGE:
 			val=getage(scfg,p->user->birth);
 			break;
@@ -506,6 +518,18 @@ static JSBool js_user_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict,
 			SAFECOPY(p->user->birth,str);
 			putuserrec(scfg,p->user->number,U_BIRTH,LEN_BIRTH,str);
 			break;
+		case USER_PROP_BIRTHYEAR:
+			SAFEPRINTF(tmp, "%04u", atoi(str));
+			putuserrec(scfg,p->user->number, U_BIRTH, 4, tmp);
+			break;
+		case USER_PROP_BIRTHMONTH:
+			SAFEPRINTF(tmp, "%02u", atoi(str));
+			putuserrec(scfg,p->user->number, U_BIRTH + 4, 2, tmp);
+			break;
+		case USER_PROP_BIRTHDAY:
+			SAFEPRINTF(tmp, "%02u", atoi(str));
+			putuserrec(scfg,p->user->number, U_BIRTH + 6, 2, tmp);
+			break;
 		case USER_PROP_MODEM:     
 			SAFECOPY(p->user->modem,str);
 			putuserrec(scfg,p->user->number,U_MODEM,LEN_MODEM,str);
@@ -754,6 +778,9 @@ static jsSyncPropertySpec js_user_properties[] = {
 	{	"zipcode"			,USER_PROP_ZIPCODE	 	,USER_PROP_FLAGS,		310},
 	{	"phone"				,USER_PROP_PHONE  	 	,USER_PROP_FLAGS,		310},
 	{	"birthdate"			,USER_PROP_BIRTH  	 	,USER_PROP_FLAGS,		310},
+	{	"birthyear"			,USER_PROP_BIRTHYEAR   	,USER_PROP_FLAGS,		31802},
+	{	"birthmonth"		,USER_PROP_BIRTHMONTH  	,USER_PROP_FLAGS,		31802},
+	{	"birthday"			,USER_PROP_BIRTHDAY  	,USER_PROP_FLAGS,		31802},
 	{	"age"				,USER_PROP_AGE			,USER_PROP_FLAGS|JSPROP_READONLY,		310},
 	{	"connection"		,USER_PROP_MODEM      	,USER_PROP_FLAGS,		310},
 	{	"modem"				,USER_PROP_MODEM      	,USER_PROP_FLAGS,		310},
@@ -795,7 +822,10 @@ static char* user_prop_desc[] = {
 	,"location (e.g. city, state)"
 	,"zip/postal code"
 	,"phone number"
-	,"birth date in either MM/DD/YY or DD/MM/YY format depending on system configuration"
+	,"birth date in 'YYYYMMDD' format or legacy format: 'MM/DD/YY' or 'DD/MM/YY', depending on system configuration"
+	,"birth year"
+	,"birth month (1-12)"
+	,"birth day of month (1-31)"
 	,"calculated age in years - <small>READ ONLY</small>"
 	,"connection type (protocol)"
 	,"AKA connection"