diff -Nru tremulous/src/game/g_admin.c tremulous.temp/src/game/g_admin.c
--- tremulous/src/game/g_admin.c	2007-02-28 18:28:08.000000000 +0100
+++ tremulous.temp/src/game/g_admin.c	2007-02-28 18:31:45.000000000 +0100
@@ -42,6 +42,11 @@
       "display your current admin level",
       ""
     },
+
+    {"allowbuild", G_admin_denybuild, "d",
+      "allow a player to build again",
+      "[^3name|slot#^7]"
+    },
     
     {"allready", G_admin_allready, "y",
       "makes everyone ready in intermission",
@@ -60,6 +65,11 @@
       ""
     },
 
+    {"denybuild", G_admin_denybuild, "d",
+      "deny a player to build",
+      "[^3name|slot#^7]"
+    },
+
     {"help", G_admin_help, "h",
       "display commands available to you or help on a specific command",
       "(^5command^7)"
@@ -2004,6 +2014,67 @@
   return qtrue;
 }
 
+qboolean G_admin_denybuild( gentity_t *ent, int skiparg )
+{
+  // TODO
+  int pids[ MAX_CLIENTS ];
+  char name[ MAX_NAME_LENGTH ], err[ MAX_STRING_CHARS ];
+  char command[ MAX_ADMIN_CMD_LEN ], *cmd;
+  gentity_t *vic;
+
+  if( G_SayArgc() < 2 + skiparg )
+  {
+    ADMP( "^3!denybuild: ^7usage: denybuild [name|slot#]\n" );
+    return qfalse;
+  }
+  G_SayArgv( skiparg, command, sizeof( command ) );
+  cmd = command;
+  if( cmd && *cmd == '!' )
+    cmd++;
+  G_SayArgv( 1 + skiparg, name, sizeof( name ) );
+  if( G_ClientNumbersFromString( name, pids ) != 1 )
+  {
+    G_MatchOnePlayer( pids, err, sizeof( err ) );
+    ADMP( va( "^3!denybuild: ^7%s\n", err ) );
+    return qfalse;
+  }
+  if( !admin_higher( ent, &g_entities[ pids[ 0 ] ] ) )
+  {
+    ADMP( "^3!denybuild: ^7sorry, but your intended victim has a higher admin"
+          " level than you\n" );
+    return qfalse;
+  }
+  vic = &g_entities[ pids[ 0 ] ];
+  if( vic->client->pers.denybuild == qtrue )
+  {
+    if( !Q_stricmp( cmd, "denybuild" ) )
+    {
+      ADMP( "^3!denybuild: ^7building has beed denied to player already\n" );
+      return qtrue;
+    }
+    vic->client->pers.denybuild = qfalse;
+    CPx( pids[ 0 ], "cp \"^1You may build again\"" );
+    AP( va( "print \"^3!allowbuild:^7 %s^7 is allowed to build again by %s^7\n\"",
+            vic->client->pers.netname,
+            ( ent ) ? ent->client->pers.netname : "console" ) );
+  }
+  else
+  {
+    if( !Q_stricmp( cmd, "allowbuild" ) )
+    {
+      ADMP( "^3!allowbuild: ^7player is allowed to build already\n" );
+      return qtrue;
+    }
+    vic->client->pers.denybuild = qtrue;
+    CPx( pids[ 0 ], "cp \"^1You can no longer build\"" );
+    AP( va( "print \"^3!denybuild:^7 building has been denied to %s^7 by %s^7\n\"",
+            vic->client->pers.netname,
+            ( ent ) ? ent->client->pers.netname : "console" ) );
+  }
+  ClientUserinfoChanged( pids[ 0 ] );
+  return qtrue;
+}
+
 qboolean G_admin_listadmins( gentity_t *ent, int skiparg )
 {
   int i, found = 0;
@@ -2136,6 +2207,7 @@
   char lname2[ MAX_NAME_LENGTH ];
   char guid_stub[ 9 ];
   char muted[ 2 ];
+  char denybuild[ 2 ];
   int l;
   char lname_fmt[ 5 ];
 
@@ -2177,6 +2249,12 @@
     {
       Q_strncpyz( muted, "M", sizeof( muted ) );
     }
+    
+    denybuild[ 0 ] = '\0';
+    if( p->pers.denybuild )
+    {
+      Q_strncpyz( denybuild, "B", sizeof( denybuild ) );
+    }
 
     l = 0;
     G_SanitiseName( p->pers.netname, n2 );
@@ -2219,7 +2297,7 @@
 
     }
 
-    ADMBP( va( "%2i %s%s^7 %-2i %s^7 (*%s) ^1%1s^7 %s^7 %s%s^7%s\n",
+    ADMBP( va( "%2i %s%s^7 %-2i %s^7 (*%s) ^1%1s%1s^7 %s^7 %s%s^7%s\n",
              i,
              c,
              t,
@@ -2227,6 +2305,7 @@
              ( *lname ) ? lname2 : "", 
              guid_stub,
              muted,
+             denybuild,
              p->pers.netname,
              ( *n ) ? "(a.k.a. " : "",
              n,
diff -Nru tremulous/src/game/g_admin.h tremulous.temp/src/game/g_admin.h
--- tremulous/src/game/g_admin.h	2007-02-28 18:28:08.000000000 +0100
+++ tremulous.temp/src/game/g_admin.h	2007-02-28 18:31:45.000000000 +0100
@@ -152,6 +152,7 @@
 qboolean G_admin_listplayers( gentity_t *ent, int skiparg );
 qboolean G_admin_map( gentity_t *ent, int skiparg );
 qboolean G_admin_mute( gentity_t *ent, int skiparg );
+qboolean G_admin_denybuild( gentity_t *ent, int skiparg );
 qboolean G_admin_showbans( gentity_t *ent, int skiparg );
 qboolean G_admin_help( gentity_t *ent, int skiparg );
 qboolean G_admin_admintest( gentity_t *ent, int skiparg );
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:31:45.000000000 +0100
+++ tremulous.temp/src/game/g_buildable.c	2007-02-28 18:31:45.000000000 +0100
@@ -2995,6 +2995,11 @@
   if( reason == IBE_NONE && ( tr2.fraction < 1.0 || tr3.fraction < 1.0 ) )
     return IBE_NOROOM;
 
+  //the user is not allowed to build
+  if( ent->client->pers.denybuild )
+    return IBE_DENIED;
+    
+
   return reason;
 }
 
@@ -3346,6 +3351,10 @@
       G_Build( ent, buildable, origin, ent->s.apos.trBase );
       return qtrue;
 
+    case IBE_DENIED:
+      ADMP( "^7sorry, but you aren't allowed to build\n" );
+      return qfalse;
+
     case IBE_RPTWARN2:
       G_TriggerMenu( ent->client->ps.clientNum, MN_H_RPTWARN2 );
       return qfalse;
diff -Nru tremulous/src/game/g_cmds.c tremulous.temp/src/game/g_cmds.c
--- tremulous/src/game/g_cmds.c	2007-02-28 18:31:40.000000000 +0100
+++ tremulous.temp/src/game/g_cmds.c	2007-02-28 18:31:45.000000000 +0100
@@ -1708,6 +1708,11 @@
   vec3_t      forward, end;
   trace_t     tr;
   gentity_t   *traceEnt;
+  
+  if( ent->client->pers.denybuild ) {
+    ADMP( "^7sorry, but you aren't allowed to build or deconstruct\n" );
+    return;
+  }
 
   if( ent->client->ps.stats[ STAT_STATE ] & SS_HOVELING )
     G_Damage( ent->client->hovel, ent, ent, forward, ent->s.origin, 10000, 0, MOD_SUICIDE );
@@ -2287,6 +2292,11 @@
   float         dist;
   vec3_t        origin;
   pTeam_t       team;
+  
+  if( ent->client->pers.denybuild ) {
+    ADMP( "^7sorry, but you aren't allowed to build\n" );
+    return;
+  }
 
   trap_Argv( 1, s, sizeof( s ) );
 
diff -Nru tremulous/src/game/g_local.h tremulous.temp/src/game/g_local.h
--- tremulous/src/game/g_local.h	2007-02-28 18:31:23.000000000 +0100
+++ tremulous.temp/src/game/g_local.h	2007-02-28 18:31:45.000000000 +0100
@@ -351,6 +351,7 @@
   char                ip[ 16 ];
   qboolean            muted;
   int                 adminLevel;
+  qboolean            denybuild;
 } clientPersistant_t;
 
 #define MAX_UNLAGGED_MARKERS 10
@@ -716,6 +717,8 @@
   IBE_NORMAL,
   IBE_NOROOM,
   IBE_PERMISSION,
+  
+  IBE_DENIED,
 
   IBE_MAXERRORS
 } itemBuildError_t;
