diff -r -u ../freeciv-cvs/common/city.c ./common/city.c
--- ../freeciv-cvs/common/city.c	Sat Jan 29 16:08:16 2000
+++ ./common/city.c	Wed Feb  2 06:34:35 2000
@@ -1172,9 +1172,6 @@
{
   int city_shield_surplus = pcity->shield_surplus;

-  if(city_shield_surplus==0 && !city_unhappy(pcity))
-    city_shield_surplus=1;
-
   if (city_shield_surplus > 0)
   {
     int rounds, cost;
diff -r -u ../freeciv-cvs/server/cityturn.c ./server/cityturn.c
--- ../freeciv-cvs/server/cityturn.c	Tue Jan 25 16:50:02 2000
+++ ./server/cityturn.c	Wed Feb  2 06:37:31 2000
@@ -1112,7 +1112,7 @@
   struct government *g = get_gov_pplayer(pplayer);
   int space_part;

-  if (pcity->shield_surplus<0) {
+  while (pcity->shield_surplus<0) {
     unit_list_iterate(pcity->units_supported, punit) {
       if (utype_shield_cost(get_unit_type(punit->type), g)) {
	notify_player_ex(pplayer, pcity->x, pcity->y, E_UNIT_LOST,
@@ -1125,8 +1125,6 @@
     unit_list_iterate_end;
   }

-  if(pcity->shield_surplus<=0 && !city_unhappy(pcity))
-    pcity->shield_surplus=1;
   pcity->shield_stock+=pcity->shield_surplus;
   if (!pcity->is_building_unit) {
     if (pcity->currently_building==B_CAPITAL) {