diff --git a/src/Airports/GenAirports/apt_surface.cxx b/src/Airports/GenAirports/apt_surface.cxx
index 131e1611..a49d4a15 100644
--- a/src/Airports/GenAirports/apt_surface.cxx
+++ b/src/Airports/GenAirports/apt_surface.cxx
@@ -221,10 +221,15 @@ TGAptSurface::TGAptSurface( const string& path,
             double accum = 0.0;
             for ( int ii = 0; ii < mult; ++ii ) {
                 for ( int jj = 0; jj < mult; ++jj ) {
+                    double value = dPts(mult*(i+1) - (mult/2) + ii,
+                                        mult*(j+1) - (mult/2) + jj).z();
+                    SG_LOG( SG_GENERAL, SG_DEBUG, "value = " << value );
                     accum += dPts(mult*(i+1) - (mult/2) + ii,
                                   mult*(j+1) - (mult/2) + jj).z();
                 }
             }
+            SG_LOG( SG_GENERAL, SG_DEBUG,
+                    "  average = " << accum / (mult*mult) );
             Pts(i,j) = Point3Df( min_deg.lon() + i * dlon,
                                  min_deg.lat() + j * dlat,
                                  accum / (mult*mult) );
diff --git a/src/Airports/GenAirports/build.cxx b/src/Airports/GenAirports/build.cxx
index 267627e3..b3b997d5 100644
--- a/src/Airports/GenAirports/build.cxx
+++ b/src/Airports/GenAirports/build.cxx
@@ -316,13 +316,15 @@ static void build_runway( const TGRunway& rwy_info,
 
     TGPolygon base, safe_base;
     if ( rwy_info.really_taxiway ) {
-	base = gen_runway_area_w_extend( rwy_info, 0.0, 10.0, 10.0 );
+	base = gen_runway_area_w_extend( rwy_info, 0.0, 10.0, 0.0, 0.0, 10.0 );
         // also clear a safe area around the taxiway
-        safe_base = gen_runway_area_w_extend( rwy_info, 0.0, 40.0, 40.0 );
+        safe_base
+            = gen_runway_area_w_extend( rwy_info, 0.0, 40.0, 0.0, 0.0, 40.0 );
     } else {
-	base = gen_runway_area_w_extend( rwy_info, 0.0, 20.0, 20.0 );
+	base = gen_runway_area_w_extend( rwy_info, 0.0, 20.0, 0.0, 0.0, 20.0 );
         // also clear a safe area around the runway
-        safe_base = gen_runway_area_w_extend( rwy_info, 0.0, 180.0, 50.0 );
+        safe_base
+            = gen_runway_area_w_extend( rwy_info, 0.0, 180.0, 0.0, 0.0, 50.0 );
     }
     *apt_clearing = polygon_union(safe_base, *apt_clearing);
 
@@ -436,10 +438,10 @@ void build_airport( string airport_id, float alt_m,
     }
 
     SGBucket b( apt_lon / (double)rwy_count, apt_lat / (double)rwy_count );
-    Point3D center_geod( b.get_center_lon() * SGD_DEGREES_TO_RADIANS,
-			 b.get_center_lat() * SGD_DEGREES_TO_RADIANS, 0 );
-    Point3D gbs_center = sgGeodToCart( center_geod );
     SG_LOG(SG_GENERAL, SG_INFO, b.gen_base_path() << "/" << b.gen_index_str());
+    Point3D center_geod( b.get_center_lon() * SGD_DEGREES_TO_RADIANS, 	 
+                         b.get_center_lat() * SGD_DEGREES_TO_RADIANS, 0 );
+    Point3D gbs_center = sgGeodToCart( center_geod );
 
     // parse taxiways and generate the vertex list
     runway_list taxiways;
@@ -1140,10 +1142,17 @@ void build_airport( string airport_id, float alt_m,
 	p.setx( geod_nodes[i].x() * SGD_DEGREES_TO_RADIANS );
 	p.sety( geod_nodes[i].y() * SGD_DEGREES_TO_RADIANS );
 	p.setz( geod_nodes[i].z() );
-	wgs84_nodes.push_back( sgGeodToCart( p ) );
+        SG_LOG(SG_GENERAL, SG_DEBUG, "geod pt = " << geod_nodes[i] );
+        Point3D cart = sgGeodToCart( p );
+        SG_LOG(SG_GENERAL, SG_DEBUG, "  cart pt = " << cart );
+        Point3D geod = sgCartToGeod( cart );
+        SG_LOG(SG_GENERAL, SG_DEBUG, "    remapped goed pt = " << geod );
+	wgs84_nodes.push_back( cart );
     }
     float gbs_radius = sgCalcBoundingRadius( gbs_center, wgs84_nodes );
     SG_LOG(SG_GENERAL, SG_DEBUG, "Done with wgs84 node mapping");
+    SG_LOG(SG_GENERAL, SG_DEBUG, "  center = " << gbs_center
+           << " radius = " << gbs_radius );
 
     // null structures
     group_list fans_v; fans_v.clear();
diff --git a/src/Airports/GenAirports/lights.cxx b/src/Airports/GenAirports/lights.cxx
index b6b96a3d..821fd1a0 100644
--- a/src/Airports/GenAirports/lights.cxx
+++ b/src/Airports/GenAirports/lights.cxx
@@ -44,7 +44,8 @@ static Point3D gen_runway_light_vector( const TGRunway& rwy_info,
     double length;
 
     // Generate the 4 corners of the runway
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 0.0, 0.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 0.0, 0.0, 0.0, 0.0 );
     point_list corner;
     for ( int i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
 	corner.push_back( poly_corners.get_pt( 0, i ) );
@@ -99,7 +100,11 @@ static superpoly_list gen_runway_edge_lights( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 2.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 2.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    2.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -209,7 +214,8 @@ static superpoly_list gen_taxiway_edge_lights( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 2.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 0.0, 0.0, 2.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -286,7 +292,11 @@ static superpoly_list gen_runway_threshold_lights( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 0.0, 0.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 0.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    0.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -418,7 +428,11 @@ static superpoly_list gen_runway_center_line_lights( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 2.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 2.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    2.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -516,7 +530,8 @@ static superpoly_list gen_taxiway_center_line_lights( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 2.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 0.0, 0.0, 2.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -584,7 +599,11 @@ static TGSuperPoly gen_touchdown_zone_lights( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 0.0, 0.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 0.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    0.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -688,7 +707,11 @@ static TGSuperPoly gen_vasi( const TGRunway& rwy_info, float alt_m,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 0.0, 0.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 0.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    0.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -829,7 +852,11 @@ static TGSuperPoly gen_papi( const TGRunway& rwy_info, float alt_m,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 0.0, 0.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 0.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    0.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -925,7 +952,11 @@ static TGSuperPoly gen_reil( const TGRunway& rwy_info, float alt_m,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 0.0, 0.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 0.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    0.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -997,7 +1028,7 @@ static TGSuperPoly gen_reil( const TGRunway& rwy_info, float alt_m,
 
 // generate Calvert-I/II approach lighting schemes
 static superpoly_list gen_calvert( const TGRunway& rwy_info,
-                                float alt_m, const string &kind, bool recip )
+                                   float alt_m, const string &kind, bool recip )
 {
     point_list g_lights; g_lights.clear();
     point_list w_lights; w_lights.clear();
@@ -1009,19 +1040,14 @@ static superpoly_list gen_calvert( const TGRunway& rwy_info,
     point_list s_normals; s_normals.clear();
     int i, j;
     string flag;
-    if (kind == "1")
-    {
-   	 cout << "gen Calvert lights " << rwy_info.rwy_no << endl;
-    } else if (kind == "2")
-    {
+    if ( kind == "1" ) {
+        cout << "gen Calvert lights " << rwy_info.rwy_no << endl;
+    } else if ( kind == "2" ) {
 	cout << "gen Calvert/II lights " << rwy_info.rwy_no << endl;
-    } else
-    {
+    } else {
 	cout << "gen unknown Calvert lights " << rwy_info.rwy_no << endl;
     }
 
-
-
     Point3D normal1 = gen_runway_light_vector( rwy_info, 3.0, recip );
     Point3D normal2 = gen_runway_light_vector( rwy_info, 3.0, !recip );
 
@@ -1032,7 +1058,11 @@ static superpoly_list gen_calvert( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 2.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 2.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    2.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -1122,152 +1152,129 @@ static superpoly_list gen_calvert( const TGRunway& rwy_info,
                             -1 * CALVERT_HORIZ_SPACING, &lat, &lon, &r );
         pt = Point3D( lon, lat, 0.0 );
 
-	if (kind == "1" )
-	{
-		if (i >= 10 && i < 20)
-		{
-		
-			
-        	    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                           CALVERT_VERT_SPACING/2, &lat, &lon, &r );
-        	    pair = Point3D( lon, lat, 0.0 );
-        	    w_lights.push_back( pair );
-        	    w_normals.push_back( normal1 );
+	if (kind == "1" ) {
+            if ( i >= 10 && i < 20 ) {
+                geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                    CALVERT_VERT_SPACING/2, &lat, &lon, &r );
+                pair = Point3D( lon, lat, 0.0 );
+                w_lights.push_back( pair );
+                w_normals.push_back( normal1 );
 
-        	    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                           -1 * CALVERT_VERT_SPACING/2, &lat, &lon, &r );
-        	    pair = Point3D( lon, lat, 0.0 );
-        	    w_lights.push_back( pair );
-        	    w_normals.push_back( normal1 );
+                geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                    -1 * CALVERT_VERT_SPACING/2, &lat, &lon,
+                                    &r );
+                pair = Point3D( lon, lat, 0.0 );
+                w_lights.push_back( pair );
+                w_normals.push_back( normal1 );
+            } else if (i >= 20)	{
+                w_lights.push_back( pt );
+                w_normals.push_back( normal1 );
 
+                geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                    CALVERT_VERT_SPACING, &lat, &lon, &r );
+                pair = Point3D( lon, lat, 0.0 );
+                w_lights.push_back( pair );
+                w_normals.push_back( normal1 );
 
-		} else if (i >= 20)
-		{
-        	    w_lights.push_back( pt );
-        	    w_normals.push_back( normal1 );
-
-        	    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                           CALVERT_VERT_SPACING, &lat, &lon, &r );
-        	    pair = Point3D( lon, lat, 0.0 );
-        	    w_lights.push_back( pair );
-        	    w_normals.push_back( normal1 );
-
-        	    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                           -1 * CALVERT_VERT_SPACING, &lat, &lon, &r );
-        	    pair = Point3D( lon, lat, 0.0 );
-        	    w_lights.push_back( pair );
-        	    w_normals.push_back( normal1 );
-
-
-
-		} else
-		{
-        	    w_lights.push_back( pt );
-        	    w_normals.push_back( normal1 );
-		}
-	} else
-	{
-	    if (i < 10)
-	    {
+                geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                    -1 * CALVERT_VERT_SPACING, &lat, &lon, &r );
+                pair = Point3D( lon, lat, 0.0 );
+                w_lights.push_back( pair );
+                w_normals.push_back( normal1 );
+            } else {
+                w_lights.push_back( pt );
+                w_normals.push_back( normal1 );
+            }
+	} else {
+	    if ( i < 10 ) {
 		// cal2 has red centre lights
         	r_lights.push_back( pt );
         	r_normals.push_back( normal1 );
-	    } else
-	    {
+	    } else {
 		// cal2 has red centre lights
         	w_lights.push_back( pt );
         	w_normals.push_back( normal1 );
-
 	    }
 	}
 
-	switch(i)
-	{
+	switch ( i ) {
 	case 4:
-		crossbar[0] = pt;
-		break;
+            crossbar[0] = pt;
+            break;
 	case 9:
-		crossbar[1] = pt;
-		break;
+            crossbar[1] = pt;
+            break;
 	case 14:
-		crossbar[2] = pt;
-		break;
+            crossbar[2] = pt;
+            break;
 	case 19:
-		crossbar[3] = pt;
-		break;
+            crossbar[3] = pt;
+            break;
 	case 24:
-		crossbar[4] = pt;
-		break;
+            crossbar[4] = pt;
+            break;
 	}
 			
 	// add 2 more rows if CAL/II (white)
 	//
 	
-	
-	
-	if (kind == "2" )
-	{
-		saved = pt;
-        	geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                            CALVERT2_VERT_SPACING, &lat, &lon, &r );
-        	pt = Point3D( lon, lat, 0.0 );
-        	w_lights.push_back( pt );
-        	w_normals.push_back( normal1 );
+	if ( kind == "2" ) {
+            saved = pt;
+            geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                CALVERT2_VERT_SPACING, &lat, &lon, &r );
+            pt = Point3D( lon, lat, 0.0 );
+            w_lights.push_back( pt );
+            w_normals.push_back( normal1 );
 
-		// five rows < 300m
-		if (i < 10)
-		{
-        	     geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                            CALVERT2_VERT_SPACING, &lat, &lon, &r );
-        	     pt = Point3D( lon, lat, 0.0 );
-        	     w_lights.push_back( pt );
-        	     w_normals.push_back( normal1 );
+            // five rows < 300m
+            if ( i < 10 ) {
+                geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                    CALVERT2_VERT_SPACING, &lat, &lon, &r );
+                pt = Point3D( lon, lat, 0.0 );
+                w_lights.push_back( pt );
+                w_normals.push_back( normal1 );
 
-		     // outer strip of lights
-		     for (j=0;j<9;j++)
-		     {
-		         geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg,
-                            CALVERT2_VERT_SPACING, &lat, &lon, &r );
-                         pt = Point3D( lon, lat, 0.0 );
-			 if (i == 0 || j > 3)
-			 {
-                           w_lights.push_back( pt );
-                           w_normals.push_back( normal1 );
-			 }
-		     }
-		}
+                // outer strip of lights
+                for (j=0;j<9;j++) {
+                    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg,
+                                        CALVERT2_VERT_SPACING, &lat, &lon, &r );
+                    pt = Point3D( lon, lat, 0.0 );
+                    if ( i == 0 || j > 3 ) {
+                        w_lights.push_back( pt );
+                        w_normals.push_back( normal1 );
+                    }
+                }
+            }
 
-		pt = saved;
-        	geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                            -1 * CALVERT2_VERT_SPACING, &lat, &lon, &r );
-        	pt = Point3D( lon, lat, 0.0 );
-        	w_lights.push_back( pt );
-        	w_normals.push_back( normal1 );
+            pt = saved;
+            geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                -1 * CALVERT2_VERT_SPACING, &lat, &lon, &r );
+            pt = Point3D( lon, lat, 0.0 );
+            w_lights.push_back( pt );
+            w_normals.push_back( normal1 );
 
-		// five rows < 300m
-		if (i < 10)
-		{
-        	    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                            -1 * CALVERT2_VERT_SPACING, &lat, &lon, &r );
-        	    pt = Point3D( lon, lat, 0.0 );
-        	    w_lights.push_back( pt );
-        	    w_normals.push_back( normal1 );
-		     // outer strip of lights
-		     for (j=0;j<9;j++)
-		     {
-		         geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg,
-                            -1 * CALVERT2_VERT_SPACING, &lat, &lon, &r );
-                         pt = Point3D( lon, lat, 0.0 );
-			 if (i == 0 || j > 3)
-			 {
-                           w_lights.push_back( pt );
-                           w_normals.push_back( normal1 );
-			 }
-		     }
-		}
+            // five rows < 300m
+            if ( i < 10 ) {
+                geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                    -1 * CALVERT2_VERT_SPACING, &lat, &lon,
+                                    &r );
+                pt = Point3D( lon, lat, 0.0 );
+                w_lights.push_back( pt );
+                w_normals.push_back( normal1 );
+                // outer strip of lights
+                for ( j = 0; j < 9; j++ ) {
+                    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg,
+                                        -1 * CALVERT2_VERT_SPACING, &lat, &lon,
+                                        &r );
+                    pt = Point3D( lon, lat, 0.0 );
+                    if ( i == 0 || j > 3 ) {
+                        w_lights.push_back( pt );
+                        w_normals.push_back( normal1 );
+                    }
+                }
+            }
 
-
-		pt = saved;	
+            pt = saved;	
 
 	}
 	ref = pt;
@@ -1277,95 +1284,82 @@ static superpoly_list gen_calvert( const TGRunway& rwy_info,
     ref = ref_save;
 
     int spacing;
-    int num_lights;
+    int num_lights = 0;
 
     // draw nice crossbars
-    for(i=0;i<5;i++)
-    {
-	
-	if (kind == "1")
-	{
-		spacing = CALVERT_VERT_SPACING;
-	} else
-	{
-		spacing = CALVERT2_VERT_SPACING;
+    for ( i = 0; i < 5; i++ ) {
+	if (kind == "1") {
+            spacing = CALVERT_VERT_SPACING;
+	} else {
+            spacing = CALVERT2_VERT_SPACING;
 	}
-	switch(i)
-	{
+	switch ( i ) {
 	case 0:
-		num_lights = 4;
-		break;
+            num_lights = 4;
+            break;
 	case 1:
-		num_lights = 5;
-		break;
+            num_lights = 5;
+            break;
 	case 2:
-		num_lights = 6;
-		break;
+            num_lights = 6;
+            break;
 	case 3:
-		num_lights = 7;
-		break;
+            num_lights = 7;
+            break;
 	case 4:
-		num_lights = 8;
-		break;
+            num_lights = 8;
+            break;
 	}
 
 	pt = crossbar[i];
-	for (j=0;j<num_lights;j++)
-	{	
-        	// left side lights
+	for ( j = 0 ; j < num_lights; j++ ) {	
+            // left side lights
 
-		// space out from centre lights
-		if (j==0)
-		{
-		    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg,
-                            CALVERT_VERT_SPACING * j, &lat, &lon, &r );
-                    pt = Point3D( lon, lat, 0.0 );
-		}
+            // space out from centre lights
+            if ( j == 0 ) {
+                geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg,
+                                    CALVERT_VERT_SPACING * j, &lat, &lon, &r );
+                pt = Point3D( lon, lat, 0.0 );
+            }
 
-        	geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                            spacing, &lat, &lon, &r );
-        	pt = Point3D( lon, lat, 0.0 );
+            geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                spacing, &lat, &lon, &r );
+            pt = Point3D( lon, lat, 0.0 );
 
-		if (kind == "1" || i >= 2)
-		{
-			w_lights.push_back( pt );
-        		w_normals.push_back( normal1 );
-		} else
-		{
-	        	r_lights.push_back( pt );
-       			r_normals.push_back( normal1 );
-		}
+            if ( kind == "1" || i >= 2 ) {
+                w_lights.push_back( pt );
+                w_normals.push_back( normal1 );
+            } else {
+                r_lights.push_back( pt );
+                r_normals.push_back( normal1 );
+            }
 	}
 
 	pt = crossbar[i];
-	for (j=0;j<num_lights;j++)
-        {
-        	// right side lights
-		// space out from centre lights
-		if (j==0)
-		{
-		    geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg,
-                            -1 * CALVERT_VERT_SPACING * j, &lat, &lon, &r );
-                    pt = Point3D( lon, lat, 0.0 );
-		}
+	for ( j = 0; j < num_lights; j++ ) {
+            // right side lights
+            // space out from centre lights
+            if ( j == 0 ) {
+                geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg,
+                                    -1 * CALVERT_VERT_SPACING * j, &lat, &lon,
+                                    &r );
+                pt = Point3D( lon, lat, 0.0 );
+            }
 
-        	geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
-                            -1 * spacing, &lat, &lon, &r );
-        	pt = Point3D( lon, lat, 0.0 );
+            geo_direct_wgs_84 ( alt_m, pt.lat(), pt.lon(), left_hdg, 
+                                -1 * spacing, &lat, &lon, &r );
+            pt = Point3D( lon, lat, 0.0 );
 
-        	if (kind == "1" || i >= 2)
-        	{
-               	 	w_lights.push_back( pt );
-               	 	w_normals.push_back( normal1 );
-        	} else
-        	{
-                	r_lights.push_back( pt );
-                	r_normals.push_back( normal1 );
-        	}
+            if ( kind == "1" || i >= 2 ) {
+                w_lights.push_back( pt );
+                w_normals.push_back( normal1 );
+            } else {
+                r_lights.push_back( pt );
+                r_normals.push_back( normal1 );
+            }
         }
     }
     
-
     TGPolygon lights_poly; lights_poly.erase();
     TGPolygon normals_poly; normals_poly.erase();
     lights_poly.add_contour( g_lights, false );
@@ -1450,7 +1444,11 @@ static superpoly_list gen_alsf( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 2.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 2.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    2.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -1953,7 +1951,11 @@ static TGSuperPoly gen_odals( const TGRunway& rwy_info, float alt_m,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 0.0, 0.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 0.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    0.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -2060,7 +2062,11 @@ static superpoly_list gen_ssalx( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 2.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 2.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    2.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
@@ -2326,7 +2332,11 @@ static superpoly_list gen_malsx( const TGRunway& rwy_info,
 
     // using TGPolygon is a bit innefficient, but that's what the
     // routine returns.
-    TGPolygon poly_corners = gen_runway_area_w_extend( rwy_info, 0.0, 2.0, 2.0 );
+    TGPolygon poly_corners
+        = gen_runway_area_w_extend( rwy_info, 0.0, 2.0,
+                                    rwy_info.disp_thresh1 * SG_FEET_TO_METER,
+                                    rwy_info.disp_thresh2 * SG_FEET_TO_METER,
+                                    2.0 );
 
     point_list corner;
     for ( i = 0; i < poly_corners.contour_size( 0 ); ++i ) {
diff --git a/src/Airports/GenAirports/main.cxx b/src/Airports/GenAirports/main.cxx
index 8d5c934c..06422888 100644
--- a/src/Airports/GenAirports/main.cxx
+++ b/src/Airports/GenAirports/main.cxx
@@ -98,6 +98,7 @@ static void help( int argc, char **argv ) {
     cout << "SRTM-North_America-3\n";
     cout << "SRTM-South_America-3\n";
     cout << "SRTM-Eurasia-3\n";
+    cout << "SRTM-Africa-3\n";
     cout << "DEM-USGS-3\n";
     cout << "SRTM-30";
     cout << "\n\n";
@@ -117,7 +118,7 @@ int main( int argc, char **argv ) {
     string_list elev_src;
     elev_src.clear();
 
-    sglog().setLogLevels( SG_GENERAL, SG_INFO );
+    sglog().setLogLevels( SG_GENERAL, SG_DEBUG );
 
     // parse arguments
     string work_dir = "";
@@ -177,6 +178,7 @@ int main( int argc, char **argv ) {
     elev_src.push_back( "SRTM-North_America-3" );
     elev_src.push_back( "SRTM-South_America-3" );
     elev_src.push_back( "SRTM-Eurasia-3" );
+    elev_src.push_back( "SRTM-Africa-3" );
     elev_src.push_back( "DEM-USGS-3" );
     elev_src.push_back( "SRTM-30" );
 
diff --git a/src/Airports/GenAirports/runway.cxx b/src/Airports/GenAirports/runway.cxx
index 729b805f..64c557f2 100644
--- a/src/Airports/GenAirports/runway.cxx
+++ b/src/Airports/GenAirports/runway.cxx
@@ -37,8 +37,13 @@
 // given a runway center point, length, width, and heading, and
 // altitude (meters) generate the lon and lat 4 corners using wgs84
 // math.
-TGPolygon gen_wgs84_area( Point3D origin, double length_m, double width_m,
-                          double heading_deg, double alt_m, bool add_mid )
+static TGPolygon gen_wgs84_area( Point3D origin,
+                                 double length_m,
+                                 double displ1, double displ2,
+                                 double width_m,
+                                 double heading_deg,
+                                 double alt_m,
+                                 bool add_mid )
 {
     TGPolygon result_list;
     double length_hdg = heading_deg;
@@ -49,7 +54,7 @@ TGPolygon gen_wgs84_area( Point3D origin, double length_m, double width_m,
     Point3D ref = origin;
     double lon, lat, r;
     geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), length_hdg, 
-                        length_m / 2.0, &lat, &lon, &r );
+                        length_m / 2.0 - displ2, &lat, &lon, &r );
     ref = Point3D( lon, lat, 0.0 );
 
     // move to the l,-w corner (then we add points in a clockwise direction)
@@ -77,7 +82,7 @@ TGPolygon gen_wgs84_area( Point3D origin, double length_m, double width_m,
     // move to the -l end/center of the runway
     ref = origin;
     geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), length_hdg, 
-                        -length_m / 2.0, &lat, &lon, &r );
+                        displ1 - length_m/2.0, &lat, &lon, &r );
     ref = Point3D( lon, lat, 0.0 );
 
     // move to the -l,w corner (then we add points in a clockwise direction)
@@ -117,8 +122,9 @@ TGPolygon gen_runway_area_w_scale( const TGRunway& runway,
     Point3D origin(runway.lon, runway.lat, 0);
 
     result_list = gen_wgs84_area( origin,
-                                  runway.length * length_scale * SG_FEET_TO_METER,
-                                  runway.width * width_scale * SG_FEET_TO_METER,
+                                  runway.length*length_scale * SG_FEET_TO_METER,
+                                  0.0, 0.0,
+                                  runway.width*width_scale * SG_FEET_TO_METER,
                                   runway.heading, alt_m, false );
 
     // display points
@@ -136,6 +142,7 @@ TGPolygon gen_runway_area_w_scale( const TGRunway& runway,
 TGPolygon gen_runway_area_w_extend( const TGRunway& runway,
                                     double alt_m,
 				    double length_extend,
+                                    double displ1, double displ2,
 				    double width_extend ) {
 
     TGPolygon result_list;
@@ -143,8 +150,9 @@ TGPolygon gen_runway_area_w_extend( const TGRunway& runway,
 
     result_list
         = gen_wgs84_area( origin,
-                          runway.length * SG_FEET_TO_METER + 2.0 * length_extend,
-                          runway.width * SG_FEET_TO_METER + 2.0 * width_extend,
+                          runway.length*SG_FEET_TO_METER + 2.0*length_extend,
+                          displ1, displ2,
+                          runway.width*SG_FEET_TO_METER + 2.0*width_extend,
                           runway.heading, alt_m, false );
 
     // display points
@@ -167,7 +175,8 @@ TGPolygon gen_runway_w_mid( const TGRunway& runway,
 
     result_list = gen_wgs84_area( origin,
                                   runway.length * SG_FEET_TO_METER
-                                    + 2.0 * length_extend_m,
+                                    + 2.0*length_extend_m,
+                                  0.0, 0.0,
                                   runway.width * SG_FEET_TO_METER
                                     + 2.0 * width_extend_m,
                                   runway.heading, alt_m, true );
diff --git a/src/Airports/GenAirports/runway.hxx b/src/Airports/GenAirports/runway.hxx
index fca82389..e859dcb0 100644
--- a/src/Airports/GenAirports/runway.hxx
+++ b/src/Airports/GenAirports/runway.hxx
@@ -78,15 +78,16 @@ TGPolygon gen_runway_area_w_scale( const TGRunway& runway,
 // (return result points in degrees)
 TGPolygon gen_runway_area_w_extend( const TGRunway& runway, 
                                     double alt_m,
-				    double length_extend = 0.0,
-				    double width_extend = 0.0 );
+				    double length_extend,
+                                    double displ1, double displ2,
+				    double width_extend );
 
 
 // generate an area for half a runway
 TGPolygon gen_runway_w_mid( const TGRunway& runway,
                             double alt_m,
-			    double length_extend_m = 0.0,
-			    double width_extend_m = 0.0 );
+			    double length_extend_m,
+			    double width_extend_m );
 
 
 #endif // _RUNWAY_HXX
diff --git a/src/Airports/GenAirports/rwy_simple.cxx b/src/Airports/GenAirports/rwy_simple.cxx
index 7b87221e..3b2e8983 100644
--- a/src/Airports/GenAirports/rwy_simple.cxx
+++ b/src/Airports/GenAirports/rwy_simple.cxx
@@ -43,7 +43,7 @@ void gen_simple_rwy( const TGRunway& rwy_info,
 {
     int j, k;
 
-    TGPolygon runway = gen_runway_w_mid( rwy_info, alt_m );
+    TGPolygon runway = gen_runway_w_mid( rwy_info, alt_m, 0.0, 0.0 );
 
     // runway half "a"
     TGPolygon runway_a;
diff --git a/src/Airports/GenAirports/taxiway.cxx b/src/Airports/GenAirports/taxiway.cxx
index 71c87c96..bfea5925 100644
--- a/src/Airports/GenAirports/taxiway.cxx
+++ b/src/Airports/GenAirports/taxiway.cxx
@@ -43,7 +43,7 @@ void gen_taxiway( const TGRunway& rwy_info,
 {
     int j, k;
 
-    TGPolygon runway = gen_runway_w_mid( rwy_info, alt_m );
+    TGPolygon runway = gen_runway_w_mid( rwy_info, alt_m, 0.0, 0.0 );
 
     // runway half "a"
     TGPolygon runway_a;