diff -Nru -x .svn -x .cdtproject -x .project -x .settings -x build -x build-linux-x86 -x q3asm -x q3cpp -x q3lcc -x q3rcc -x '*.orig' -x '*.rej' ori/src/game/g_cmds.c new/src/game/g_cmds.c
--- ori/src/game/g_cmds.c	2007-06-20 19:53:54.000000000 +0200
+++ new/src/game/g_cmds.c	2007-06-20 19:54:48.000000000 +0200
@@ -1629,6 +1629,10 @@
       trap_SendServerCommand( ent-g_entities, va( "print \"Unknown class\n\"" ) );
       return;
     }
+	else if( g_grangerMode.integer && newClass == PCL_ALIEN_BUILDER0_UPG && !level.overmindPresent)
+	{
+		newClass = PCL_ALIEN_BUILDER0;
+	}
 
     //if we are not currently spectating, we are attempting evolution
     if( ent->client->pers.classSelection != PCL_NONE )
diff -Nru -x .svn -x .cdtproject -x .project -x .settings -x build -x build-linux-x86 -x q3asm -x q3cpp -x q3lcc -x q3rcc -x '*.orig' -x '*.rej' ori/src/game/g_local.h new/src/game/g_local.h
--- ori/src/game/g_local.h	2007-06-20 19:53:54.000000000 +0200
+++ new/src/game/g_local.h	2007-06-20 19:54:33.000000000 +0200
@@ -1131,6 +1131,7 @@
 extern  vmCvar_t  g_rankings;
 extern  vmCvar_t  g_allowShare;
 extern  vmCvar_t  g_allowDonate;
+extern  vmCvar_t  g_grangerMode;
 extern  vmCvar_t  g_enableDust;
 extern  vmCvar_t  g_enableBreath;
 extern  vmCvar_t  g_singlePlayer;
diff -Nru -x .svn -x .cdtproject -x .project -x .settings -x build -x build-linux-x86 -x q3asm -x q3cpp -x q3lcc -x q3rcc -x '*.orig' -x '*.rej' ori/src/game/g_main.c new/src/game/g_main.c
--- ori/src/game/g_main.c	2007-06-20 19:53:54.000000000 +0200
+++ new/src/game/g_main.c	2007-06-20 19:54:33.000000000 +0200
@@ -150,6 +150,8 @@
 vmCvar_t  g_allowShare;
 vmCvar_t  g_allowDonate;
 
+vmCvar_t  g_grangerMode;
+
 vmCvar_t g_freeFunds;
 vmCvar_t g_fastBuild;
 vmCvar_t g_noBaseAttack;
@@ -298,7 +300,8 @@
   { &wbpguid, "wbpguid", "", CVAR_ARCHIVE, 0, qfalse },
   
   { &g_allowDonate, "g_allowDonate", "1", CVAR_ARCHIVE, 0, qfalse},
-  { &g_allowShare, "g_allowShare", "1", CVAR_ARCHIVE, 0, qfalse}
+  { &g_allowShare, "g_allowShare", "1", CVAR_ARCHIVE, 0, qfalse},
+  { &g_grangerMode, "g_grangerMode", "0", 0, 0, qfalse }
 };
 
 static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] );
