Index: station_cmd.c
===================================================================
--- station_cmd.c	(revision 7292)
+++ station_cmd.c	(working copy)
@@ -1673,12 +1673,12 @@
 
 	/* Check if local auth refuses a new airport */
 	{
-		uint num = 0;
+		uint noise = GetAirport(p1)->noise_level;
 		FOR_ALL_STATIONS(st) {
 			if (st->town == t && st->facilities&FACIL_AIRPORT && st->airport_type != AT_OILRIG)
-				num++;
+				noise += GetAirport(st->airport_type)->noise_level;
 		}
-		if (num >= 2) {
+		if (noise > t->population / 800 + 3) {
 			SetDParam(0, t->index);
 			return_cmd_error(STR_2035_LOCAL_AUTHORITY_REFUSES);
 		}
Index: airport.c
===================================================================
--- airport.c	(revision 7292)
+++ airport.c	(working copy)
@@ -33,7 +33,7 @@
 	const byte entry_point,  const byte acc_planes,
 	const AirportFTAbuildup *apFA,
 	const TileIndexDiffC *depots, const byte nof_depots,
-	uint size_x, uint size_y
+	uint size_x, uint size_y, byte noise_level
 );
 static void AirportFTAClass_Destructor(AirportFTAClass *apc);
 
@@ -60,7 +60,7 @@
 		_airport_fta_country,
 		_airport_depots_country,
 		lengthof(_airport_depots_country),
-		4, 3
+		4, 3, 3
 	);
 
 	// city airport
@@ -75,7 +75,7 @@
 		_airport_fta_city,
 		_airport_depots_city,
 		lengthof(_airport_depots_city),
-		6, 6
+		6, 6, 5
 	);
 
 	// metropolitan airport
@@ -90,7 +90,7 @@
 		_airport_fta_metropolitan,
 		_airport_depots_metropolitan,
 		lengthof(_airport_depots_metropolitan),
-		6, 6
+		6, 6, 8
 	);
 
 	// international airport
@@ -105,7 +105,7 @@
 		_airport_fta_international,
 		_airport_depots_international,
 		lengthof(_airport_depots_international),
-		7, 7
+		7, 7, 12
 	);
 
 	// intercontintental airport
@@ -120,7 +120,7 @@
 		_airport_fta_intercontinental,
 		_airport_depots_intercontinental,
 		lengthof(_airport_depots_intercontinental),
-		9,11
+		9,11, 17
 	);
 
 	// heliport, oilrig
@@ -135,7 +135,7 @@
 		_airport_fta_heliport_oilrig,
 		NULL,
 		0,
-		1, 1
+		1, 1, 1
 	);
 
 	Oilrig = Heliport;  // exactly the same structure for heliport/oilrig, so share state machine
@@ -152,7 +152,7 @@
 		_airport_fta_commuter,
 		_airport_depots_commuter,
 		lengthof(_airport_depots_commuter),
-		5,4
+		5,4, 4
 	);
 
 	// helidepot airport
@@ -167,7 +167,7 @@
 		_airport_fta_helidepot,
 		_airport_depots_helidepot,
 		lengthof(_airport_depots_helidepot),
-		2,2
+		2,2, 1
 	);
 
 	// helistation airport
@@ -182,7 +182,7 @@
 		_airport_fta_helistation,
 		_airport_depots_helistation,
 		lengthof(_airport_depots_helistation),
-		4,2
+		4,2, 2
 	);
 
 }
@@ -205,7 +205,7 @@
 	const byte entry_point, const byte acc_planes,
 	const AirportFTAbuildup *apFA,
 	const TileIndexDiffC *depots, const byte nof_depots,
-	uint size_x, uint size_y
+	uint size_x, uint size_y, byte noise_level
 )
 {
 	byte nofterminals, nofhelipads;
@@ -214,6 +214,8 @@
 	apc->size_x = size_x;
 	apc->size_y = size_y;
 
+	apc->noise_level = noise_level;
+
 	/* Set up the terminal and helipad count for an airport.
 	 * TODO: If there are more than 10 terminals or 4 helipads, internal variables
 	 * need to be changed, so don't allow that for now */
Index: airport.h
===================================================================
--- airport.h	(revision 7292)
+++ airport.h	(working copy)
@@ -137,6 +137,7 @@
 	struct AirportFTA *layout;            // state machine for airport
 	byte size_x;
 	byte size_y;
+	byte noise_level;
 } AirportFTAClass;
 
 // internal structure used in openttd - Finite sTate mAchine --> FTA
