Index: ai/aicity.c
===================================================================
--- ai/aicity.c	(revision 12298)
+++ ai/aicity.c	(working copy)
@@ -1097,21 +1098,23 @@
                    || is_building_replaced(pcity, id)) {
           /* Don't consider impossible or redundant buildings */
           pcity->ai.building_want[id] = 0;
-        } else if (pplayer->ai.control
-                   && pcity->ai.next_recalc <= game.info.turn) {
+        } else {
           /* Building wants vary relatively slowly, so not worthwhile
            * recalculating them every turn.
            * We DO want to calculate (tech) wants because of buildings
            * we already have. */
           const bool already = city_got_building(pcity, id);
 
-          adjust_improvement_wants_by_effects(pplayer, pcity, 
-                                              pimpr, already);
-
-          assert(!(already && 0 < pcity->ai.building_want[id]));
-        } else if (city_got_building(pcity, id)) {
-          /* Never want to build something we already have. */
-          pcity->ai.building_want[id] = 0;
+	  if ((!pplayer->ai.control || pcity->ai.next_recalc > game.info.turn)
+	      && already) {
+            /* Never want to build something we already have. */
+	    pcity->ai.building_want[id] = 0;
+	  } else if (!pplayer->ai.control
+	             || pcity->ai.next_recalc <= game.info.turn) {
+            adjust_improvement_wants_by_effects(pplayer, pcity, 
+                                                pimpr, already);
+	    assert(!(already && 0 < pcity->ai.building_want[id]));
+	  }
         }
         /* else wait until a later turn */
       } city_list_iterate_end;
