diff -Nru tremulous/src/game/g_active.c tremulous.temp/src/game/g_active.c
--- tremulous/src/game/g_active.c	2007-02-28 18:31:53.000000000 +0100
+++ tremulous.temp/src/game/g_active.c	2007-02-28 18:32:18.000000000 +0100
@@ -716,7 +716,7 @@
             ent->client->ps.pm_type != PM_DEAD )
         {
           ent->client->medKitHealthToRestore--;
-          ent->health++;
+          do_health( ent,1 );
         }
         else
           ent->client->ps.stats[ STAT_STATE ] &= ~SS_MEDKIT_ACTIVE;
@@ -731,7 +731,7 @@
           if( level.time > client->medKitIncrementTime )
           {
             ent->client->medKitHealthToRestore--;
-            ent->health++;
+            do_health( ent,1 );
 
             client->medKitIncrementTime = level.time +
               ( remainingStartupTime / MEDKIT_STARTUP_SPEED );
@@ -808,7 +808,7 @@
 
       if( ent->health > 0 && ent->health < client->ps.stats[ STAT_MAX_HEALTH ] &&
           ( ent->lastDamageTime + ALIEN_REGEN_DAMAGE_TIME ) < level.time )
-        ent->health += BG_FindRegenRateForClass( client->ps.stats[ STAT_PCLASS ] ) * modifier;
+        do_health( ent,BG_FindRegenRateForClass( client->ps.stats[ STAT_PCLASS ] ) * modifier );
 
       if( ent->health > client->ps.stats[ STAT_MAX_HEALTH ] )
         ent->health = client->ps.stats[ STAT_MAX_HEALTH ];
@@ -1832,4 +1832,19 @@
   SendPendingPredictableEvents( &ent->client->ps );
 }
 
+void do_health( gentity_t *ent, int quantity )
+{
+  int i = 0;
+
+  if( ent->health == ent->client->ps.stats[ STAT_MAX_HEALTH ] )
+    return;
+
+  ent->health += quantity;
+  if( ent->health >= ent->client->ps.stats[ STAT_MAX_HEALTH ] )
+  {
+    ent->health = ent->client->ps.stats[ STAT_MAX_HEALTH ];
+    for( i = 0; i < MAX_CLIENTS; i++ )
+      ent->credits[ i ] = 0;
+  }
+}
 
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:51.000000000 +0100
+++ tremulous.temp/src/game/g_buildable.c	2007-02-28 18:32:18.000000000 +0100
@@ -1836,7 +1836,7 @@
       if( self->enemy->client && self->enemy->client->ps.stats[ STAT_STATE ] & SS_MEDKIT_ACTIVE )
         self->enemy->client->ps.stats[ STAT_STATE ] &= ~SS_MEDKIT_ACTIVE;
 
-      self->enemy->health++;
+      do_health( self->enemy,1 );
 
       //if they're completely healed, give them a medkit
       if( self->enemy->health >= self->enemy->client->ps.stats[ STAT_MAX_HEALTH ] &&
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:32:18.000000000 +0100
+++ tremulous.temp/src/game/g_local.h	2007-02-28 18:32:18.000000000 +0100
@@ -1220,3 +1220,5 @@
 
 void      trap_SnapVector( float *v );
 void      trap_SendGameStat( const char *data );
+
+void      do_health( gentity_t *ent, int quantity );
