diff -pruN ../../asss-1.4.4-orig/src/core/billing_ssc.c ./core/billing_ssc.c
--- ../../asss-1.4.4-orig/src/core/billing_ssc.c	2008-07-11 15:45:28.000000000 -0400
+++ ./core/billing_ssc.c	2008-07-11 15:56:46.000000000 -0400
@@ -641,7 +641,7 @@ local void process_user_login(const char
 			memset(&bdata->saved_score, 0, sizeof(bdata->saved_score));
 
 		ad.demodata = (pkt->Result == B2S_LOGIN_ASKDEMOGRAPHICS);
-		ad.code = AUTH_OK;
+		ad.code = (pkt->Result == B2S_LOGIN_ASKDEMOGRAPHICS) ? AUTH_ASKDEMOGRAPHICS : AUTH_OK;
 		ad.authenticated = TRUE;
 		astrncpy(ad.name, pkt->Name, sizeof(ad.name));
 		astrncpy(ad.sendname, pkt->Name, sizeof(ad.sendname));
diff -pruN ../../asss-1.4.4-orig/src/core/core.c ./core/core.c
--- ../../asss-1.4.4-orig/src/core/core.c	2008-07-11 15:45:28.000000000 -0400
+++ ./core/core.c	2008-07-12 15:23:41.000000000 -0400
@@ -514,12 +514,6 @@ void PLogin(Player *p, byte *opkt, int l
 		 * characters. */
 		lp->name[19] = '\0';
 
-		if (lp->name[0] == '\0')
-		{
-			fail_login_with(p, AUTH_NONAME, "Your player name is blank", "name is blank");
-			return;
-		}
-
 		/* only allow printable characters in names, excluding colon.
 		 * while we're at it, remove leading, trailing, and series of
 		 * spaces */
@@ -747,7 +741,7 @@ local const char *get_auth_code_msg(int 
 		case AUTH_NOSCORES: return "the server is not recordng scores";
 		case AUTH_SERVERBUSY: return "the server is busy";
 		case AUTH_TOOLOWUSAGE: return "too low usage";
-		case AUTH_NONAME: return "no name sent";
+		case AUTH_ASKDEMOGRAPHICS: return "need demographics";
 		case AUTH_TOOMANYDEMO: return "too many demo players";
 		case AUTH_NODEMO: return "no demo players allowed";
 		default: return "???";
diff -pruN ../../asss-1.4.4-orig/src/include/core.h ./include/core.h
--- ../../asss-1.4.4-orig/src/include/core.h	2008-07-11 15:45:28.000000000 -0400
+++ ./include/core.h	2008-07-11 15:57:55.000000000 -0400
@@ -14,31 +14,31 @@
 
 /* authentication return codes */
 /* pyconst: define int, "AUTH_*" */
-#define AUTH_OK             0x00   /* success */
-#define AUTH_NEWNAME        0x01   /* fail */
-#define AUTH_BADPASSWORD    0x02   /* fail */
-#define AUTH_ARENAFULL      0x03   /* fail */
-#define AUTH_LOCKEDOUT      0x04   /* fail */
-#define AUTH_NOPERMISSION   0x05   /* fail */
-#define AUTH_SPECONLY       0x06   /* success */
-#define AUTH_TOOMANYPOINTS  0x07   /* fail */
-#define AUTH_TOOSLOW        0x08   /* fail */
-#define AUTH_NOPERMISSION2  0x09   /* fail */
-#define AUTH_NONEWCONN      0x0A   /* fail */
-#define AUTH_BADNAME        0x0B   /* fail */
-#define AUTH_OFFENSIVENAME  0x0C   /* fail */
-#define AUTH_NOSCORES       0x0D   /* success */
-#define AUTH_SERVERBUSY     0x0E   /* fail */
-#define AUTH_TOOLOWUSAGE    0x0F   /* fail */
-#define AUTH_NONAME         0x10   /* fail */
-#define AUTH_TOOMANYDEMO    0x11   /* fail */
-#define AUTH_NODEMO         0x12   /* fail */
-#define AUTH_CUSTOMTEXT     0x13   /* fail */      /* contonly */
+#define AUTH_OK              0x00   /* success */
+#define AUTH_NEWNAME         0x01   /* fail */
+#define AUTH_BADPASSWORD     0x02   /* fail */
+#define AUTH_ARENAFULL       0x03   /* fail */
+#define AUTH_LOCKEDOUT       0x04   /* fail */
+#define AUTH_NOPERMISSION    0x05   /* fail */
+#define AUTH_SPECONLY        0x06   /* success */
+#define AUTH_TOOMANYPOINTS   0x07   /* fail */
+#define AUTH_TOOSLOW         0x08   /* fail */
+#define AUTH_NOPERMISSION2   0x09   /* fail */
+#define AUTH_NONEWCONN       0x0A   /* fail */
+#define AUTH_BADNAME         0x0B   /* fail */
+#define AUTH_OFFENSIVENAME   0x0C   /* fail */
+#define AUTH_NOSCORES        0x0D   /* success */
+#define AUTH_SERVERBUSY      0x0E   /* fail */
+#define AUTH_TOOLOWUSAGE     0x0F   /* fail */
+#define AUTH_ASKDEMOGRAPHICS 0x10   /* success */
+#define AUTH_TOOMANYDEMO     0x11   /* fail */
+#define AUTH_NODEMO          0x12   /* fail */
+#define AUTH_CUSTOMTEXT      0x13   /* fail */      /* contonly */
 
 /** which authentication result codes result in the player moving
  ** forward in the login process. */
 #define AUTH_IS_OK(a) \
-	((a) == AUTH_OK || (a) == AUTH_SPECONLY || (a) == AUTH_NOSCORES)
+	((a) == AUTH_OK || (a) == AUTH_SPECONLY || (a) == AUTH_NOSCORES || (a) == AUTH_ASKDEMOGRAPHICS)
 
 
 /** an authentication module must fill in one of these structs to return
diff -pruN ../../asss-1.4.4-orig/src/packets/billing.h ./packets/billing.h
--- ../../asss-1.4.4-orig/src/packets/billing.h	2008-07-11 15:45:28.000000000 -0400
+++ ./packets/billing.h	2008-07-11 15:46:35.000000000 -0400
@@ -137,8 +137,8 @@ struct S2B_ServerCapabilities {
 
 enum {
 	B2S_LOGIN_OK=0,B2S_LOGIN_NEWUSER=1,B2S_LOGIN_INVALIDPW=2,B2S_LOGIN_BANNED=3,
-	B2S_LOGIN_NONEWCONNS=4,B2S_LOGIN_BADUSERNAME=5,B2S_LOGIN_ASKDEMOGRAPHICS=6,
-	B2S_LOGIN_SERVERBUSY=7,B2S_LOGIN_DEMOVERSION=8
+	B2S_LOGIN_NONEWCONNS=4,B2S_LOGIN_BADUSERNAME=5,B2S_LOGIN_DEMOVERSION=6,
+	B2S_LOGIN_SERVERBUSY=7,B2S_LOGIN_ASKDEMOGRAPHICS=8
 };
 
 struct B2S_UserLogin {
