diff -u -r angban~1/src/birth.c angband/src/birth.c
--- angban~1/src/birth.c	Tue Jul 25 20:57:48 2000
+++ angband/src/birth.c	Sun Aug 13 14:00:28 2000
@@ -861,7 +861,18 @@
 		if (ch == 'S') return (FALSE);
 		k = (islower(ch) ? A2I(ch) : -1);
 		if (ch == ESCAPE) ch = '*';
-		if (ch == '*') k = rand_int(MAX_CLASS);
+		if (ch == '*')
+		{
+			while (1)
+			{
+				k = rand_int(MAX_CLASS);
+
+				/* Try again if not a legal choice */
+				if (!(rp_ptr->choice & (1L << k))) continue;
+
+				break;
+			}
+		}
 		if ((k >= 0) && (k < n)) break;
 		if (ch == '?') do_cmd_help();
 		else bell("Illegal class!");


