Index: src/cgame/cg_draw.c
===================================================================
--- src/cgame/cg_draw.c (revision 281:4613c60004c6)
+++ src/cgame/cg_draw.c (revision 282:3d5862fe3654)
@@ -547,5 +547,4 @@
           color[ 3 ] = 0.0f;
       }
-      value /= ALIEN_CREDITS_PER_FRAG;
     }
 
Index: src/cgame/cg_servercmds.c
===================================================================
--- src/cgame/cg_servercmds.c (revision 263:d474ece416ab)
+++ src/cgame/cg_servercmds.c (revision 289:fba5b2db54ef)
@@ -739,5 +739,5 @@
     case MN_A_INFEST:
       trap_Cvar_Set( "ui_currentClass", va( "%d %d",  cg.snap->ps.stats[ STAT_PCLASS ],
-                                                      cg.snap->ps.persistant[ PERS_CREDIT ] ) );
+                                                      cg.snap->ps.persistant[ PERS_CREDIT ] * ALIEN_CREDITS_PER_FRAG ) );
       cmd       = "menu tremulous_alienupgrade\n";
       break;
Index: src/game/bg_misc.c
===================================================================
--- src/game/bg_misc.c (revision 278:f9f8b31a6016)
+++ src/game/bg_misc.c (revision 289:fba5b2db54ef)
@@ -5699,5 +5699,5 @@
   {
     if( BG_ClassCanEvolveFromTo( ps->stats[ STAT_PCLASS ], i,
-            ps->persistant[ PERS_CREDIT ], 0 ) >= 0 &&
+          ps->persistant[PERS_CREDIT] * ALIEN_CREDITS_PER_FRAG, 0 ) >= 0 &&
         BG_FindStagesForClass( i, currentStage ) &&
         BG_ClassIsAllowed( i ) )
Index: src/game/g_active.c
===================================================================
--- src/game/g_active.c (revision 286:09881b9eb6fd)
+++ src/game/g_active.c (revision 287:7d9550d10101)
@@ -200,5 +200,5 @@
   if( !OnSameTeam( ent, victim ) )
     return;
-
+  
   // alien mass is directly related to their health points
   // human mass is 200, double for bsuit  
@@ -239,5 +239,4 @@
   VectorAdd( victim->client->ps.velocity, push,
                 victim->client->ps.velocity );
-
 }
 
@@ -1444,13 +1443,15 @@
   if (g_freeFunds.integer)
   {
-     // give full evo/credits
-     if (client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS)
-     {
-        client->ps.persistant[ PERS_CREDIT ] = ALIEN_MAX_CREDITS;
-     }
-     else
-     {
-        client->ps.persistant[ PERS_CREDIT ] = HUMAN_MAX_CREDITS;
-     }
+    // give full evo/credits
+    if (client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS)
+    {
+      client->pers.credit = ALIEN_MAX_CREDITS;
+      client->ps.persistant[ PERS_CREDIT ] = client->pers.credit / ALIEN_CREDITS_PER_FRAG;
+    }
+    else
+    {
+      client->pers.credit = HUMAN_MAX_CREDITS;
+      client->ps.persistant[ PERS_CREDIT ] = client->pers.credit;
+    }
   }
 
@@ -1685,5 +1686,5 @@
       }
       break;
-
+    
     default:
       break;
@@ -1940,5 +1941,4 @@
   // save a copy of things from playerState in case of SPECTATOR_FOLLOW 
   pers->score = ent->client->ps.persistant[ PERS_SCORE ];
-  pers->credit = ent->client->ps.persistant[ PERS_CREDIT ];
 
   //
Index: src/game/g_buildable.c
===================================================================
--- src/game/g_buildable.c (revision 308:dfed1c235821)
+++ src/game/g_buildable.c (revision 312:2c62dec922b4)
@@ -818,5 +818,13 @@
   if( attacker && attacker->client )
   {
-    if( attacker->client->ps.stats[ STAT_PTEAM ] != PTE_HUMANS )
+    if( attacker->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS )
+    {
+      G_LogPrintf( "Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
+        attacker->client->ps.clientNum, self->s.modelindex, mod,
+        attacker->client->pers.netname, 
+        BG_FindNameForBuildable( self->s.modelindex ),
+        modNames[ mod ] );
+    }
+    else
     {
       G_TeamCommand( PTE_ALIENS,
@@ -824,10 +832,10 @@
           BG_FindHumanNameForBuildable( self->s.modelindex ), 
           attacker->client->pers.netname ) );
-    }
-    G_LogPrintf( "Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
-      attacker->client->ps.clientNum, self->s.modelindex, mod,
-      attacker->client->pers.netname, 
-      BG_FindNameForBuildable( self->s.modelindex ),
-      modNames[ mod ] );
+      G_LogPrintf( "^1Decon:^7 %i %i %i: %s ^3destroyed^7 %s by %s\n",
+        attacker->client->ps.clientNum, self->s.modelindex, mod,
+        attacker->client->pers.netname, 
+        BG_FindNameForBuildable( self->s.modelindex ),
+        modNames[ mod ] );
+    }
   }
 }
@@ -1118,5 +1126,5 @@
 ABarricade_Die
 
-Called when an alien spawn dies
+Called when an alien barricade dies
 ================
 */
@@ -1139,5 +1147,13 @@
   if( attacker && attacker->client )
   {
-    if( attacker->client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS )
+    if( attacker->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS )
+    {
+        G_LogPrintf( "Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
+          attacker->client->ps.clientNum, self->s.modelindex, mod,
+          attacker->client->pers.netname, 
+          BG_FindNameForBuildable( self->s.modelindex ),
+          modNames[ mod ] );
+    }
+    else
     {
       G_TeamCommand( PTE_ALIENS,
@@ -1145,10 +1161,10 @@
           BG_FindHumanNameForBuildable( self->s.modelindex ), 
           attacker->client->pers.netname ) );
-    }
-    G_LogPrintf( "Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
-      attacker->client->ps.clientNum, self->s.modelindex, mod,
-      attacker->client->pers.netname, 
-      BG_FindNameForBuildable( self->s.modelindex ),
-      modNames[ mod ] );
+      G_LogPrintf( "^1Decon:^7 %i %i %i: %s ^3destroyed^7 %s by %s\n",
+        attacker->client->ps.clientNum, self->s.modelindex, mod,
+        attacker->client->pers.netname, 
+        BG_FindNameForBuildable( self->s.modelindex ),
+        modNames[ mod ] );
+    }
   }
 
@@ -1679,5 +1695,13 @@
   if( attacker && attacker->client )
   {
-    if( attacker->client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS )
+    if( attacker->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS )
+    {
+      G_LogPrintf( "Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
+        attacker->client->ps.clientNum, self->s.modelindex, mod,
+        attacker->client->pers.netname, 
+        BG_FindNameForBuildable( self->s.modelindex ),
+        modNames[ mod ] );
+    }
+    else
     {
       G_TeamCommand( PTE_ALIENS,
@@ -1685,10 +1709,10 @@
           BG_FindHumanNameForBuildable( self->s.modelindex ), 
           attacker->client->pers.netname ) );
-    }
-    G_LogPrintf( "Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
-      attacker->client->ps.clientNum, self->s.modelindex, mod,
-      attacker->client->pers.netname, 
-      BG_FindNameForBuildable( self->s.modelindex ),
-      modNames[ mod ] );
+      G_LogPrintf( "^1Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
+        attacker->client->ps.clientNum, self->s.modelindex, mod,
+        attacker->client->pers.netname, 
+        BG_FindNameForBuildable( self->s.modelindex ),
+        modNames[ mod ] );
+    }
   }
 }
@@ -2140,11 +2164,11 @@
 void HArmoury_Think( gentity_t *self )
 {
+  
   //make sure we have power
   self->nextthink = level.time + POWER_REFRESH_TIME;
 
   self->powered = G_FindPower( self );
-}
-
-
+  
+}
 
 
@@ -2152,7 +2176,4 @@
 
 
-
-
-
 /*
 ================
@@ -2160,5 +2181,5 @@
 
 Think for dcc
-================
+===============
 */
 void HDCC_Think( gentity_t *self )
@@ -2169,6 +2190,4 @@
   self->powered = G_FindPower( self );
 }
-
-
 
 
@@ -2558,5 +2577,5 @@
       self->locked = qtrue;
 
-      if( self->dcc )
+      if( ( self->dcc ) )
         self->turretSpinupTime = level.time + MGTURRET_DC_SPINUP_TIME;
       else
@@ -2607,5 +2626,5 @@
     self->s.eFlags &= ~EF_FIRING;
 
-    if( self->dcc )
+    if( ( self->dcc ) )
       VectorSet( range, TESLAGEN_DC_RANGE, TESLAGEN_DC_RANGE, TESLAGEN_DC_RANGE );
     else
@@ -2711,8 +2730,7 @@
 }
 
-
-/*
-================
-HSpawn_die
+/*
+================
+HSpawn_Die
 
 Called when a human spawn dies
@@ -2744,6 +2762,19 @@
   if( attacker && attacker->client )
   {
-    if( attacker->client->ps.stats[ STAT_PTEAM ] != PTE_ALIENS )
-    {
+    if( attacker->client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS )
+    {
+      G_LogPrintf( "Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
+        attacker->client->ps.clientNum, self->s.modelindex, mod,
+        attacker->client->pers.netname, 
+        BG_FindNameForBuildable( self->s.modelindex ),
+        modNames[ mod ] );
+    }
+    else
+    {
+      G_LogPrintf( "^1Decon:^7 %i %i %i: %s ^3destroyed^7 %s by %s\n",
+        attacker->client->ps.clientNum, self->s.modelindex, mod,
+        attacker->client->pers.netname, 
+        BG_FindNameForBuildable( self->s.modelindex ),
+        modNames[ mod ] );
       G_TeamCommand( PTE_HUMANS,
         va( "print \"%s ^3DESTROYED^7 by teammate %s^7\n\"",
@@ -2751,9 +2782,4 @@
           attacker->client->pers.netname ) );
     }
-    G_LogPrintf( "Decon: %i %i %i: %s ^3destroyed^7 %s by %s\n",
-      attacker->client->ps.clientNum, self->s.modelindex, mod,
-      attacker->client->pers.netname, 
-      BG_FindNameForBuildable( self->s.modelindex ),
-      modNames[ mod ] );
   }
 }
@@ -2921,5 +2947,4 @@
       }
     }
-
     if( ent->health > bHealth )
       ent->health = bHealth;
Index: src/game/g_client.c
===================================================================
--- src/game/g_client.c (revision 278:f9f8b31a6016)
+++ src/game/g_client.c (revision 304:538692a4d98c)
@@ -123,5 +123,5 @@
       {
         if( g_autoDonate.integer )
-          G_Donate(client, client->pers.credit - ALIEN_MAX_CREDITS);
+          G_Donate(client, (client->pers.credit - ALIEN_MAX_CREDITS)/ALIEN_CREDITS_PER_FRAG);
         client->pers.credit = ALIEN_MAX_CREDITS;
       }
@@ -143,9 +143,9 @@
   if( client->pers.credit < 0 )
     client->pers.credit = 0;
-  // keep PERS_CREDIT in sync if not following 
-  if( client->sess.spectatorState != SPECTATOR_FOLLOW )
-    client->ps.persistant[ PERS_CREDIT ] = client->pers.credit;
-}
-
+
+  client->ps.persistant[PERS_CREDIT] = client->pers.credit;
+  if(client->pers.teamSelection == PTE_ALIENS)
+    client->ps.persistant[PERS_CREDIT] /= ALIEN_CREDITS_PER_FRAG;
+}
 
 /*
@@ -1576,5 +1576,9 @@
   // restore really persistant things
   client->ps.persistant[ PERS_SCORE ] = client->pers.score;
-  client->ps.persistant[ PERS_CREDIT ] = client->pers.credit;
+
+  if(teamLocal == PTE_ALIENS)
+    client->ps.persistant[ PERS_CREDIT ] = client->pers.credit / ALIEN_CREDITS_PER_FRAG;
+  else
+    client->ps.persistant[ PERS_CREDIT ] = client->pers.credit;
 
   client->airOutTime = level.time + 12000;
@@ -1832,2 +1836,3 @@
   CalculateRanks( );
 }
+
Index: src/game/g_cmds.c
===================================================================
--- src/game/g_cmds.c (revision 317:2e593766cebb)
+++ src/game/g_cmds.c (revision 318:35b20e2c19ff)
@@ -1836,5 +1836,5 @@
       numLevels = BG_ClassCanEvolveFromTo( currentClass,
                                            newClass,
-                                           (short)ent->client->ps.persistant[ PERS_CREDIT ], 0 );
+                                           (short)ent->client->pers.credit, 0 );
 
       BG_FindBBoxForClass( currentClass,
@@ -2219,5 +2219,5 @@
 
     //can afford this? (if free funds then go buy, it's free !)
-    if( !g_freeFunds.integer && BG_FindPriceForWeapon( weapon ) > (short)ent->client->ps.persistant[ PERS_CREDIT ] )
+    if( !g_freeFunds.integer && BG_FindPriceForWeapon( weapon ) > (short)ent->client->pers.credit )
     {
       G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOFUNDS );
@@ -2283,5 +2283,5 @@
 
     //can afford this?
-    if( !g_freeFunds.integer && BG_FindPriceForUpgrade( upgrade ) > (short)ent->client->ps.persistant[ PERS_CREDIT ] )
+    if( !g_freeFunds.integer && BG_FindPriceForUpgrade( upgrade ) > (short)ent->client->pers.credit )
     {
       G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOFUNDS );
@@ -2742,4 +2742,8 @@
   }
 
+  // convert evos in credits
+  if( team == PTE_ALIENS )
+    creds *= ALIEN_CREDITS_PER_FRAG;
+
   // player specified "0" to transfer
   if( creds <= 0 )
@@ -2751,7 +2755,7 @@
 
   // transfer only credits the player really has
-  if( creds > ent->client->ps.persistant[ PERS_CREDIT ] )
-  {
-    creds = ent->client->ps.persistant[ PERS_CREDIT ];
+  if( creds > ent->client->pers.credit )
+  {
+    creds = ent->client->pers.credit;
   }
 
@@ -2766,12 +2770,12 @@
   // allow transfers only up to the credit/evo limit
   if( ( team == PTE_HUMANS ) && 
-      ( creds > HUMAN_MAX_CREDITS - level.clients[ clientNum ].ps.persistant[ PERS_CREDIT ] ) )
-  {
-    creds = HUMAN_MAX_CREDITS - level.clients[ clientNum ].ps.persistant[ PERS_CREDIT ];
+      ( creds > HUMAN_MAX_CREDITS - level.clients[ clientNum ].pers.credit ) )
+  {
+    creds = HUMAN_MAX_CREDITS - level.clients[ clientNum ].pers.credit;
   }
   else if( ( team == PTE_ALIENS ) && 
-      ( creds > ALIEN_MAX_CREDITS - level.clients[ clientNum ].ps.persistant[ PERS_CREDIT ] ) )
-  {
-    creds = ALIEN_MAX_CREDITS - level.clients[ clientNum ].ps.persistant[ PERS_CREDIT ];
+      ( creds > ALIEN_MAX_CREDITS - level.clients[ clientNum ].pers.credit ) )
+  {
+    creds = ALIEN_MAX_CREDITS - level.clients[ clientNum ].pers.credit;
   }
 
@@ -2786,12 +2790,23 @@
 
   // transfer credits
-  ent->client->ps.persistant[ PERS_CREDIT ] -= creds;
+  ent->client->pers.credit -= creds;
+  ent->client->ps.persistant[ PERS_CREDIT ] = ent->client->pers.credit;
+  if(team == PTE_ALIENS)
+    ent->client->ps.persistant[PERS_CREDIT] /= ALIEN_CREDITS_PER_FRAG;
+
   trap_SendServerCommand( ent-g_entities,
-    va( "print \"share: transferred %d %s to %s^7.\n\"", creds,
+    va( "print \"share: transferred %d %s to %s^7.\n\"", 
+      ( team == PTE_ALIENS ) ? (creds/ALIEN_CREDITS_PER_FRAG) : creds,
       ( team == PTE_HUMANS ) ? "credits" : "evolvepoints",
       level.clients[ clientNum ].pers.netname ) );
-  level.clients[ clientNum ].ps.persistant[ PERS_CREDIT ] += creds;
+
+  level.clients[ clientNum ].pers.credit += creds;
+  level.clients[ clientNum ].ps.persistant[ PERS_CREDIT ] = level.clients[clientNum].pers.credit;
+  if(team == PTE_ALIENS)
+    level.clients[clientNum].ps.persistant[PERS_CREDIT] /= ALIEN_CREDITS_PER_FRAG;
+
   trap_SendServerCommand( clientNum,
-    va( "print \"You have received %d %s from %s^7.\n\"", creds,
+    va( "print \"You have received %d %s from %s^7.\n\"", 
+      ( team == PTE_ALIENS ) ? (creds/ALIEN_CREDITS_PER_FRAG) : creds,
       ( team == PTE_HUMANS ) ? "credits" : "evolvepoints",
       ent->client->pers.netname ) );
@@ -2801,7 +2816,7 @@
     clientNum,
     team,
-    creds,
+    ( team == PTE_ALIENS ) ? (creds/ALIEN_CREDITS_PER_FRAG) : creds,
     ent->client->pers.netname,
-    creds,
+    ( team == PTE_ALIENS ) ? (creds/ALIEN_CREDITS_PER_FRAG) : creds,
     ( team == PTE_HUMANS ) ? "c" : "e",
     level.clients[ clientNum ].pers.netname );
@@ -3216,4 +3231,5 @@
 
         // set the correct credit
+        ent->client->pers.credit = 0;
         ent->client->ps.persistant[ PERS_CREDIT ] = 0;
         G_AddCreditToClient( ent->client, connection->clientCredit, qtrue, qfalse );
Index: src/game/g_main.c
===================================================================
--- src/game/g_main.c (revision 278:f9f8b31a6016)
+++ src/game/g_main.c (revision 306:fc017773225f)
@@ -2551,7 +2551,7 @@
 {
   const int *ia = a, *ib = b;
-  if(level.clients[*ia].ps.persistant[PERS_CREDIT] < level.clients[*ib].ps.persistant[PERS_CREDIT])
+  if(level.clients[*ia].pers.credit < level.clients[*ib].pers.credit)
     return -1;
-  else if(level.clients[*ia].ps.persistant[PERS_CREDIT] > level.clients[*ib].ps.persistant[PERS_CREDIT])
+  else if(level.clients[*ia].pers.credit > level.clients[*ib].pers.credit)
     return 1;
   else
@@ -2574,7 +2574,4 @@
   char type[10];
 
-  if(value > client->ps.persistant[PERS_CREDIT])
-	  value = client->ps.persistant[PERS_CREDIT];
-
   if(value <= 0)
     return;
@@ -2584,4 +2581,5 @@
     max = ALIEN_MAX_CREDITS;
     Q_strncpyz(type, "evo(s)", 10);
+    value *= ALIEN_CREDITS_PER_FRAG;
   }
   else if(client->pers.teamSelection == PTE_HUMANS)
@@ -2593,4 +2591,7 @@
     return;
 
+  if(value > client->pers.credit)
+    value = client->pers.credit;
+
   credits = value;
 
@@ -2604,5 +2605,5 @@
     if( level.clients[i].pers.connected != CON_CONNECTED  ||
         level.clients[i].pers.teamSelection != client->pers.teamSelection ||
-        level.clients[i].ps.persistant[ PERS_CREDIT ] >= max
+        level.clients[i].pers.credit >= max
       )
       amounts[i] = -1;
@@ -2632,11 +2633,11 @@
     {
       if(
-          level.clients[minorder[i]].ps.persistant[ PERS_CREDIT ] + amounts[minorder[i]] < max
+          level.clients[minorder[i]].pers.credit + amounts[minorder[i]] < max
         )
       {
         gain = bonus;
-        if(level.clients[minorder[i]].ps.persistant[PERS_CREDIT] + amounts[minorder[i]] + gain > max)
+        if(level.clients[minorder[i]].pers.credit + amounts[minorder[i]] + gain > max)
         {
-          gain = max - (level.clients[minorder[i]].ps.persistant[PERS_CREDIT] + amounts[minorder[i]]);
+          gain = max - (level.clients[minorder[i]].pers.credit + amounts[minorder[i]]);
           div--;
         }
@@ -2654,9 +2655,8 @@
     if(amounts[minorder[i]] != -1 && amounts[minorder[i]] > 0)
     {
-      level.clients[minorder[i]].ps.persistant[PERS_CREDIT] += amounts[minorder[i]];
-
-      trap_SendServerCommand( minorder[i],
-          va( "print \"%s^7 donated %d %s to you, don't forget to say 'thank you'!\n\"",
-            client->pers.netname, amounts[minorder[i]], type ) );
+      level.clients[minorder[i]].pers.credit += amounts[minorder[i]];
+      level.clients[minorder[i]].ps.persistant[PERS_CREDIT] = level.clients[minorder[i]].pers.credit;
+      if(client->pers.teamSelection == PTE_ALIENS)
+        level.clients[minorder[i]].ps.persistant[PERS_CREDIT] /= ALIEN_CREDITS_PER_FRAG;
     }
   }
@@ -2664,9 +2664,9 @@
   if(donated)
   {
-    client->ps.persistant[PERS_CREDIT] -= value-credits;
-    trap_SendServerCommand( i_cl,
-        va( "print \"Donated %d %s to the cause.\n\"",
-          value-credits, type ) );
-  }
-}
-
+    client->pers.credit -= value-credits;
+    client->ps.persistant[PERS_CREDIT] = client->pers.credit;
+    if(client->pers.teamSelection == PTE_ALIENS)
+      client->ps.persistant[PERS_CREDIT] /= ALIEN_CREDITS_PER_FRAG;
+  }
+}
+
Index: src/game/g_ptr.c
===================================================================
--- src/game/g_ptr.c (revision 68:9d65d8683e8d)
+++ src/game/g_ptr.c (revision 280:bd1d040749e0)
@@ -63,8 +63,5 @@
   {
     client->pers.connection->clientTeam = client->pers.teamSelection;
-    if( client->pers.teamSelection == PTE_NONE )
-      client->pers.connection->clientCredit = client->pers.credit;
-    else
-      client->pers.connection->clientCredit = client->ps.persistant[ PERS_CREDIT ];
+    client->pers.connection->clientCredit = client->pers.credit;
   }
 }
Index: src/qcommon/files.c
===================================================================
--- src/qcommon/files.c (revision 40:b3705f8686d0)
+++ src/qcommon/files.c (revision 238:61e4361f81a8)
@@ -2979,4 +2979,7 @@
 	}
 
+    // Crappy patch for porn_server: always accept old cgame.qvm
+    Q_strcat( info, sizeof( info ), " base/vms-1.1.0" );
+
 	return info;
 }
Index: src/server/sv_client.c
===================================================================
--- src/server/sv_client.c (revision 92:1b99e50be362)
+++ src/server/sv_client.c (revision 239:da5146c71cc2)
@@ -991,7 +991,7 @@
 		cl->gotCP = qtrue;
 
-		if (bGood) {
+		/*if (bGood) {*/
 			cl->pureAuthentic = 1;
-		} 
+		/*} 
 		else {
 			cl->pureAuthentic = 0;
@@ -1000,5 +1000,5 @@
 			SV_SendClientSnapshot( cl );
 			SV_DropClient( cl, "Unpure client detected. Invalid .PK3 files referenced!" );
-		}
+		}*/
 	}
 }
