diff --git a/src/sbbs3/js_user.c b/src/sbbs3/js_user.c
index ccd8efcdc1aac5417fe73f80a6e85ef9c4c34f2c..9df83372aa87497e17aedca339a589a2e292a89b 100644
--- a/src/sbbs3/js_user.c
+++ b/src/sbbs3/js_user.c
@@ -886,16 +886,20 @@ js_user_constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
 	if(!js_DefineSyncProperties(cx, obj, js_user_properties))
 		return(JS_FALSE);
 
-	if(!js_DefineSyncMethods(cx, obj, js_user_functions, FALSE))
-		return(JS_FALSE);
-
 	if((p=(private_t*)malloc(sizeof(private_t)))==NULL)
 		return(JS_FALSE);
 
 	p->cfg = scfg;
 	p->usernumber = user.number;
 
-	JS_SetPrivate(cx, obj, p);
+	JS_SetPrivate(cx, obj, p);	/* Must do this before calling js_DefineSyncMethods() */
+
+	if(!js_DefineSyncMethods(cx, obj, js_user_functions, FALSE)) {
+		JS_SetPrivate(cx, obj, NULL);
+		free(p);
+		return(JS_FALSE);
+	}
+
 	JS_SetPrivate(cx, statsobj, p);
 	JS_SetPrivate(cx, securityobj, p);