diff -Nru tremulous/src/game/g_buildable.c tremulous.temp/src/game/g_buildable.c
--- tremulous/src/game/g_buildable.c	2007-02-28 18:32:22.000000000 +0100
+++ tremulous.temp/src/game/g_buildable.c	2007-02-28 18:32:41.000000000 +0100
@@ -3599,7 +3599,8 @@
         "found, using map default\n" );
       return;
   }
-  layoutNum = ( rand( ) & ( cnt - 1 ) ) + 1;
+  // layoutNum = ( rand( ) & ( cnt - 1 ) ) + 1; // WTF?! >_>
+  layoutNum = ( rand( ) % ( cnt ) ) + 1;
   cnt = 0;
 
   Q_strncpyz( layouts2, layouts, sizeof( layouts2 ) );
@@ -3607,12 +3608,12 @@
   s = COM_ParseExt( &l, qfalse );
   while( *s )
   {
-    Q_strncpyz( level.layout, s, sizeof( level.layout ) );
     cnt++;
     if( cnt >= layoutNum )
       break;
     s = COM_ParseExt( &l, qfalse );
   }
+  Q_strncpyz( level.layout, s, sizeof( level.layout ) );
   G_Printf("using layout \"%s\" from list ( %s)\n", level.layout, layouts ); 
 }
 
