diff --git a/src/simutrans/world/simcity.cc b/src/simutrans/world/simcity.cc
index f5ac20392..06f3f80b6 100644
--- a/src/simutrans/world/simcity.cc
+++ b/src/simutrans/world/simcity.cc
@@ -4078,19 +4078,22 @@ void stadt_t::build()
 		}
 	}

-	// since only a single location is checked, we can stop after we have found a positive rule
-	best_haus.reset(k);
-	const uint32 num_house_rules = house_rules.get_count();
-	offset = simrand(num_house_rules); // start with random rule
-	for(  uint32 i = 0;  i < num_house_rules  &&  !best_haus.found();  i++  ) {
-		uint32 rule = ( i+offset ) % num_house_rules;
-		bewerte_haus(k, 8 + house_rules[rule]->chance, *house_rules[rule]);
-	}
-	// one rule applied?
-	if(  best_haus.found()  ) {
-		build_city_building(best_haus.get_pos());
-		INT_CHECK("simcity 1163");
-		return;
+	grund_t *gr = welt->lookup_kartenboden(k);
+	if (gr->ist_natur()) {
+		// since only a single location is checked, we can stop after we have found a positive rule
+		best_haus.reset(k);
+		const uint32 num_house_rules = house_rules.get_count();
+		offset = simrand(num_house_rules); // start with random rule
+		for(  uint32 i = 0;  i < num_house_rules  &&  !best_haus.found();  i++  ) {
+			uint32 rule = ( i+offset ) % num_house_rules;
+			bewerte_haus(k, 8 + house_rules[rule]->chance, *house_rules[rule]);
+		}
+		// one rule applied?
+		if(  best_haus.found()  ) {
+			build_city_building(best_haus.get_pos());
+			INT_CHECK("simcity 1163");
+			return;
+		}
 	}
 }

