diff --git a/src/Environment/environment_ctrl.cxx b/src/Environment/environment_ctrl.cxx
index 7e121983a..e5114a2a2 100644
--- a/src/Environment/environment_ctrl.cxx
+++ b/src/Environment/environment_ctrl.cxx
@@ -317,11 +317,13 @@ FGInterpolateEnvironmentCtrl::bucket::operator< (const bucket &b) const
 FGMetarEnvironmentCtrl::FGMetarEnvironmentCtrl ()
     : env( new FGInterpolateEnvironmentCtrl ),
       _icao( fgGetString("/sim/presets/airport-id") ),
+      search_interval_sec( 60.0 ),        // 1 minute
+      same_station_interval_sec( 900.0 ), // 15 minutes
+      search_elapsed( 9999.0 ),
+      fetch_elapsed( 9999.0 ),
       proxy_host( fgGetNode("/sim/presets/proxy/host", true) ),
       proxy_port( fgGetNode("/sim/presets/proxy/port", true) ),
-      proxy_auth( fgGetNode("/sim/presets/proxy/authentication", true) ),
-      update_interval_sec( 60.0 ),
-      elapsed( 60.0 )
+      proxy_auth( fgGetNode("/sim/presets/proxy/authentication", true) )
 {
 #ifdef ENABLE_THREADS
     thread = new MetarThread(this);
@@ -396,8 +398,10 @@ FGMetarEnvironmentCtrl::init ()
                       true );
         if ( fetch_data( a.id ) ) {
             cout << "closest station w/ metar = " << a.id << endl;
+            last_apt = a;
             _icao = a.id;
-            elapsed = 0.0;
+            search_elapsed = 0.0;
+            fetch_elapsed = 0.0;
             update_env_config();
             env->init();
             found_metar = true;
@@ -427,23 +431,34 @@ FGMetarEnvironmentCtrl::update(double delta_time_sec)
         = fgGetNode( "/position/longitude-deg", true );
     static const SGPropertyNode *latitude
         = fgGetNode( "/position/latitude-deg", true );
-    elapsed += delta_time_sec;
-    if ( elapsed > update_interval_sec ) {
+    search_elapsed += delta_time_sec;
+    fetch_elapsed += delta_time_sec;
+    if ( search_elapsed > search_interval_sec ) {
         FGAirport a = globals->get_airports()
             ->search( longitude->getDoubleValue(),
                       latitude->getDoubleValue(),
                       true );
-        if ( fetch_data( a.id ) ) {
-            cout << "closest station w/ metar = " << a.id << endl;
-           _icao = a.id;
-            elapsed = 0.0;
-            update_env_config();
-            env->reinit();
+        if ( last_apt.id != a.id
+             || fetch_elapsed > same_station_interval_sec )
+        {
+            if ( fetch_data( a.id ) ) {
+                cout << "closest station w/ metar = " << a.id << endl;
+                last_apt = a;
+                _icao = a.id;
+                search_elapsed = 0.0;
+                fetch_elapsed = 0.0;
+                update_env_config();
+                env->reinit();
+            } else {
+                // mark as no metar so it doesn't show up in subsequent
+                // searches.
+                cout << "no metar at metar = " << a.id << endl;
+                globals->get_airports()->no_metar( a.id );
+            }
         } else {
-            // mark as no metar so it doesn't show up in subsequent
-            // searches.
-            cout << "no metar at metar = " << a.id << endl;
-            globals->get_airports()->no_metar( a.id );
+            search_elapsed = 0.0;
+            // cout << "same station, waiting = "
+            //      << same_station_interval_sec - fetch_elapsed << endl;
         }
     }
 
diff --git a/src/Environment/environment_ctrl.hxx b/src/Environment/environment_ctrl.hxx
index 5032a9f59..5c8ddb8ff 100644
--- a/src/Environment/environment_ctrl.hxx
+++ b/src/Environment/environment_ctrl.hxx
@@ -158,17 +158,21 @@ public:
 private:
     FGInterpolateEnvironmentCtrl *env;
 
-    float station_elevation_ft;
-    float update_interval_sec;
-    float elapsed;
-    bool fetch_data (const string &icao);
-    void update_env_config();
-
     string _icao;
+    float station_elevation_ft;
+    float search_interval_sec;
+    float same_station_interval_sec;
+    float search_elapsed;
+    float fetch_elapsed;
+    FGAirport last_apt;
     SGPropertyNode *proxy_host;
     SGPropertyNode *proxy_port;
     SGPropertyNode *proxy_auth;
 
+    bool fetch_data (const string &icao);
+    void update_env_config();
+
+
 private:
 
 #ifdef ENABLE_THREADS