diff --git a/src/Airports/GenAirports/apt_surface.cxx b/src/Airports/GenAirports/apt_surface.cxx
index a9c48b98..b15c7832 100644
--- a/src/Airports/GenAirports/apt_surface.cxx
+++ b/src/Airports/GenAirports/apt_surface.cxx
@@ -37,13 +37,14 @@ SG_USING_NAMESPACE( PLib );
 
 
 // fix node elevations.  Offset is added to the final elevation
-static void calc_elevations( const string &root, Matrix_Point3Df &Pts ) {
-    string_list elev_src;
-    elev_src.clear();
-    elev_src.push_back( "SRTM-1" );
-    elev_src.push_back( "SRTM-3" );
-    elev_src.push_back( "DEM-3" );
-    elev_src.push_back( "DEM-30" );
+static void calc_elevations( const string &root, const string_list elev_src,
+                             Matrix_Point3Df &Pts ) {
+    // string_list elev_src;
+    // elev_src.clear();
+    // elev_src.push_back( "SRTM-1" );
+    // elev_src.push_back( "SRTM-3" );
+    // elev_src.push_back( "DEM-3" );
+    // elev_src.push_back( "DEM-30" );
 
     bool done = false;
     int i, j;
@@ -164,6 +165,7 @@ static void calc_elevations( const string &root, Matrix_Point3Df &Pts ) {
 // Constructor, specify min and max coordinates of desired area in
 // lon/lat degrees
 TGAptSurface::TGAptSurface( const string& path,
+                            const string_list& elev_src,
                             Point3D _min_deg, Point3D _max_deg )
 {
     // Calculate desired size of grid
@@ -208,7 +210,7 @@ TGAptSurface::TGAptSurface( const string& path,
     }
 
     // Determine elevation of the grid points
-    calc_elevations( path, dPts );
+    calc_elevations( path, elev_src, dPts );
 
     // Build the normal res input grid from the double res version
     Matrix_Point3Df Pts(xdivs + 1, ydivs + 1);
diff --git a/src/Airports/GenAirports/apt_surface.hxx b/src/Airports/GenAirports/apt_surface.hxx
index bf0f95f2..797a713d 100644
--- a/src/Airports/GenAirports/apt_surface.hxx
+++ b/src/Airports/GenAirports/apt_surface.hxx
@@ -61,7 +61,8 @@ public:
 
     // Constructor, specify min and max coordinates of desired area in
     // lon/lat degrees
-    TGAptSurface( const string &path, Point3D _min_deg, Point3D _max_deg );
+    TGAptSurface( const string &path, const string_list& elev_src,
+                  Point3D _min_deg, Point3D _max_deg );
 
     // Destructor
     ~TGAptSurface();
diff --git a/src/Airports/GenAirports/build.cxx b/src/Airports/GenAirports/build.cxx
index 15da8476..d334ca62 100644
--- a/src/Airports/GenAirports/build.cxx
+++ b/src/Airports/GenAirports/build.cxx
@@ -323,7 +323,9 @@ static void build_runway( const TGRunway& rwy_info,
 // build 3d airport
 void build_airport( string airport_id, float alt_m,
                     string_list& runways_raw,
-                    string_list& taxiways_raw, const string& root )
+                    string_list& taxiways_raw,
+                    const string& root,
+                    const string_list& elev_src )
 {
     int i, j, k;
 
@@ -911,7 +913,7 @@ void build_airport( string airport_id, float alt_m,
     min_deg.setlat( min_deg.lat() - 0.1 * dlat );
     max_deg.setlat( max_deg.lat() + 0.1 * dlat );
 
-    TGAptSurface apt_surf( root, min_deg, max_deg );
+    TGAptSurface apt_surf( root, elev_src, min_deg, max_deg );
     cout << "Surface created" << endl;
 
     // calculate node elevations
diff --git a/src/Airports/GenAirports/build.hxx b/src/Airports/GenAirports/build.hxx
index fa6ad283..052b7757 100644
--- a/src/Airports/GenAirports/build.hxx
+++ b/src/Airports/GenAirports/build.hxx
@@ -35,7 +35,9 @@
 
 // build 3d airport
 void build_airport( string airport_id, float alt_m, string_list& runways_raw,
-                    string_list& taxiways_raw, const string& root );
+                    string_list& taxiways_raw,
+                    const string& root,
+                    const string_list& elev_src );
 
 
 
diff --git a/src/Airports/GenAirports/main.cxx b/src/Airports/GenAirports/main.cxx
index e0c007f7..d6e1652f 100644
--- a/src/Airports/GenAirports/main.cxx
+++ b/src/Airports/GenAirports/main.cxx
@@ -76,6 +76,9 @@ int main( int argc, char **argv ) {
     float max_lat = 90;
     bool ready_to_go = true;
 
+    string_list elev_src;
+    elev_src.clear();
+
     sglog().setLogLevels( SG_GENERAL, SG_INFO );
 
     // parse arguments
@@ -89,6 +92,8 @@ int main( int argc, char **argv ) {
             work_dir = arg.substr(7);
 	} else if ( arg.find("--input=") == 0 ) {
 	    input_file = arg.substr(8);
+        } else if ( arg.find("--terrain=") == 0 ) {
+            elev_src.push_back( arg.substr(10) );
  	} else if ( arg.find("--start-id=") == 0 ) {
 	    start_id = arg.substr(11);
 	    ready_to_go = false;
@@ -114,7 +119,16 @@ int main( int argc, char **argv ) {
 	}
     }
 
+    elev_src.push_back( "SRTM-1" );
+    elev_src.push_back( "SRTM-3" );
+    elev_src.push_back( "DEM-3" );
+    elev_src.push_back( "DEM-30" );
+
     SG_LOG(SG_GENERAL, SG_INFO, "Input file = " << input_file);
+    SG_LOG(SG_GENERAL, SG_INFO, "Terrain sources = ");
+    for ( unsigned int i = 0; i < elev_src.size(); ++i ) {
+        SG_LOG(SG_GENERAL, SG_INFO, "  " << work_dir << "/" << elev_src[i] );
+    }
     SG_LOG(SG_GENERAL, SG_INFO, "Work directory = " << work_dir);
     SG_LOG(SG_GENERAL, SG_INFO, "Nudge = " << nudge);
     SG_LOG(SG_GENERAL, SG_INFO, "Longitude = " << min_lon << ':' << max_lon);
@@ -215,7 +229,7 @@ int main( int argc, char **argv ) {
                         try {
                             build_airport( last_apt_id, elev * SG_FEET_TO_METER,
                                            runways_list, taxiways_list,
-                                           work_dir );
+                                           work_dir, elev_src );
                         } catch (sg_exception &e) {
                             SG_LOG( SG_GENERAL, SG_ALERT,
                                     "Failed to build airport = "
@@ -286,7 +300,7 @@ int main( int argc, char **argv ) {
                     try {
                         build_airport( last_apt_id, elev * SG_FEET_TO_METER,
                                        runways_list, taxiways_list,
-                                       work_dir );
+                                       work_dir, elev_src );
                     } catch (sg_exception &e) {
                         SG_LOG( SG_GENERAL, SG_ALERT,
                                 "Failed to build airport = "