diff --git a/src/Environment/climate.cxx b/src/Environment/climate.cxx
index 0e23aa9b6..c433103a2 100644
--- a/src/Environment/climate.cxx
+++ b/src/Environment/climate.cxx
@@ -82,7 +82,7 @@ void FGClimate::bind()
     _tiedProperties.setRoot( _rootNode );
 
     // environment properties
-    _tiedProperties.Tie( "environment-update", &_environment_adjust );
+    _tiedProperties.Tie( "environment-update", this, &FGClimate::getEnvironmentUpdate, &FGClimate::setEnvironmentUpdate);
 
     // weather properties
     _tiedProperties.Tie( "weather-update", &_weather_update);
@@ -323,8 +323,9 @@ void FGClimate::set_tropical()
     double summer = _season_summer;
     double winter = -summer;
 
-    double hum_fact = linear(daytime(day, 3.0*HOUR), sinusoidal(summer, 0.0, 0.36),
-                                  sinusoidal(season(winter), 0.86, 1.0));
+    double hmin = sinusoidal(summer, 0.0, 0.36);
+    double hmax = sinusoidal(season(winter), 0.86, 1.0);
+    double humidity = linear(daytime(day, -9.0*HOUR), hmin, hmax);
 
     // wind based on latitude (0.0 - 15 degrees)
     double latitude_deg = _positionLatitudeNode->getDoubleValue();
@@ -343,14 +344,14 @@ void FGClimate::set_tropical()
         temp_day = triangular(summer, 29.5, 32.5);
         temp_water = triangular(season(summer, MONTH), 25.0, 27.5);
         precipitation = sinusoidal(season(winter), 150.0, 280.0);
-        relative_humidity = triangular(hum_fact, 75.0, 85.0);
+        relative_humidity = triangular(humidity, 75.0, 85.0);
         break;
     case 2: // Am: equatorial, monsoonal
         temp_night = triangular(season(summer, MONTH), 17.5, 22.5);
         temp_day = triangular(season(summer, MONTH), 27.5, 32.5);
         temp_water = triangular(season(summer, MONTH), 22.0, 27.5);
         precipitation = linear(season(summer, MONTH), 45.0, 340.0);
-        relative_humidity = triangular(season(hum_fact, MONTH), 75.0, 85.0);
+        relative_humidity = triangular(humidity, 75.0, 85.0);
         wind *= 2.0*_precipitation/320.0;
         break;
     case 3: // As: equatorial, summer dry
@@ -358,7 +359,7 @@ void FGClimate::set_tropical()
         temp_day = triangular(season(summer, MONTH), 27.5, 35.0);
         temp_water = triangular(season(summer, 2.0*MONTH), 21.5, 26.5);
         precipitation = sinusoidal(season(summer, 2.0*MONTH), 35.0, 150.0);
-        relative_humidity = triangular(season(hum_fact, 2.0*MONTH), 60.0, 80.0);
+        relative_humidity = triangular(humidity, 60.0, 80.0);
         wind *= 2.0*_precipitation/350.0;
         break;
     case 4: // Aw: equatorial, winter dry
@@ -366,7 +367,7 @@ void FGClimate::set_tropical()
         temp_day = triangular(season(summer, 2.0*MONTH), 27.5, 35.0);
         temp_water = triangular(season(summer, 2.0*MONTH), 21.5, 28.5);
         precipitation = sinusoidal(season(summer, 2.0*MONTH), 10.0, 230.0);
-        relative_humidity = triangular(season(hum_fact, 2.0*MONTH), 60.0, 80.0);
+        relative_humidity = triangular(humidity, 60.0, 80.0);
         wind *= 2.0*_precipitation/230.0;
         break;
     default:
@@ -395,8 +396,9 @@ void FGClimate::set_dry()
     double summer = _season_summer;
     double winter = -summer;
 
-    double hum_fact = linear(daytime(day, 3.0*HOUR), sinusoidal(summer, 0.0, 0.36),
-                                  sinusoidal(season(winter), 0.86, 1.0));
+    double hmin = sinusoidal(summer, 0.0, 0.36);
+    double hmax = sinusoidal(season(winter), 0.86, 1.0);
+    double humidity = linear(daytime(day, -9.0*HOUR), hmin, hmax);
 
     double temp_water = _temperature_water;
     double temp_night = _temperature_sl;
@@ -410,28 +412,28 @@ void FGClimate::set_dry()
         temp_day = triangular(season(summer, 2.0*MONTH), 27.5, 35.0);
         temp_water = triangular(season(summer, 2.5*MONTH), 18.5, 28.5);
         precipitation = long_low(season(summer, 2.0*MONTH), 8.0, 117.0);
-        relative_humidity = triangular(season(hum_fact, 2.0*MONTH), 20.0, 30.0);
+        relative_humidity = triangular(humidity, 20.0, 30.0);
         break;
     case 6: // BSk: arid, steppe, cold arid
         temp_night = sinusoidal(season(summer, MONTH), -14.0, 12.0);
         temp_day = sinusoidal(season(summer, MONTH), 0.0, 30.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), 5.0, 25.5);
         precipitation = sinusoidal(season(summer, MONTH), 15.0, 34.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 48.0, 67.0);
+        relative_humidity = sinusoidal(humidity, 48.0, 67.0);
         break;
     case 7: // BWh: arid, desert, hot arid
         temp_night = sinusoidal(season(summer, 1.5*MONTH), 7.5, 22.0);
         temp_day = even(season(summer, 1.5*MONTH), 22.5, 37.5);
         temp_water = even(season(summer, 2.5*MONTH), 15.5, 33.5);
         precipitation = monsoonal(season(summer, 2.0*MONTH), 3.0, 18.0);
-        relative_humidity = monsoonal(season(hum_fact, 2.0*MONTH), 25.0, 55.0);
+        relative_humidity = monsoonal(humidity, 25.0, 55.0);
         break;
     case 8: // BWk: arid, desert, cold arid
         temp_night = sinusoidal(season(summer, MONTH), -15.0, 15.0);
         temp_day = sinusoidal(season(summer, MONTH), -2.0, 30.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), 4.0, 26.5);
         precipitation = linear(season(summer, MONTH), 4.0, 14.0);
-        relative_humidity = linear(season(hum_fact, MONTH), 45.0, 61.0);
+        relative_humidity = linear(humidity, 45.0, 61.0);
         break;
     default:
         break;
@@ -461,8 +463,9 @@ void FGClimate::set_temperate()
     double summer = _season_summer;
     double winter = -summer;
 
-    double hum_fact = linear(daytime(day, 3.0*HOUR), sinusoidal(summer, 0.0, 0.36),
-                                  sinusoidal(season(winter), 0.86, 1.0));
+    double hmin = sinusoidal(summer, 0.0, 0.36);
+    double hmax = sinusoidal(season(winter), 0.86, 1.0);
+    double humidity = linear(daytime(day, -9.0*HOUR), hmin, hmax);
 
     double temp_water = _temperature_water;
     double temp_night = _temperature_sl;
@@ -476,63 +479,63 @@ void FGClimate::set_temperate()
         temp_day = sinusoidal(season(summer, 1.5*MONTH), 10.0, 33.0);
         temp_water = sinusoidal(season(summer, 2.5*MONTH), 8.0, 28.5);
         precipitation = sinusoidal(summer, 60.0, 140.0);
-        relative_humidity = sinusoidal(hum_fact, 65.0, 80.0);
+        relative_humidity = sinusoidal(humidity, 65.0, 80.0);
         break;
     case 10: // Cfb: warm temperature, fully humid, warm summer
         temp_night = sinusoidal(season(summer, 1.5*MONTH), -3.0, 10.0);
         temp_day = sinusoidal(season(summer, 1.5*MONTH), 5.0, 25.0);
         temp_water = sinusoidal(season(summer, 2.5*MONTH), 3.0, 20.5);
         precipitation = sinusoidal(season(winter, 3.5*MONTH), 65.0, 90.0);
-        relative_humidity = sinusoidal(season(hum_fact, 1.5*MONTH), 68.0, 87.0);
+        relative_humidity = sinusoidal(humidity, 68.0, 87.0);
         break;
     case 11: // Cfc: warm temperature, fully humid, cool summer
         temp_night = long_low(season(summer, 1.5*MONTH), -3.0, 8.0);
         temp_day = long_low(season(summer, 1.5*MONTH), 2.0, 14.0);
         temp_water = long_low(season(summer, 2.5*MONTH), 3.0, 11.5);
         precipitation = linear(season(winter), 90.0, 200.0);
-        relative_humidity = long_low(season(hum_fact, 1.5*MONTH), 70.0, 85.0);
+        relative_humidity = long_low(humidity, 70.0, 85.0);
         break;
     case 12: // Csa: warm temperature, summer dry, hot summer
         temp_night = sinusoidal(season(summer, MONTH), 2.0, 16.0);
         temp_day = sinusoidal(season(summer, MONTH), 12.0, 33.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), 10.0, 27.5);
         precipitation = linear(season(winter), 25.0, 70.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 58.0, 72.0);
+        relative_humidity = sinusoidal(humidity, 58.0, 72.0);
         break;
     case 13: // Csb: warm temperature, summer dry, warm summer
         temp_night = linear(season(summer, 1.5*MONTH), -4.0, 10.0);
         temp_day = linear(season(summer, 1.5*MONTH), 6.0, 27.0);
         temp_water = linear(season(summer, 2.5*MONTH), 4.0, 21.5);
         precipitation = linear(season(winter), 25.0, 120.0);
-        relative_humidity = linear(season(hum_fact, 1.5*MONTH), 50.0, 72.0);
+        relative_humidity = linear(humidity, 50.0, 72.0);
         break;
     case 14: // Csc: warm temperature, summer dry, cool summer
         temp_night = sinusoidal(season(summer, 0.5*MONTH), -4.0, 5.0);
         temp_day = sinusoidal(season(summer, 0.5*MONTH), 5.0, 16.0);
         temp_water = sinusoidal(season(summer, 1.5*MONTH), 3.0, 14.5);
         precipitation = sinusoidal(season(winter, -MONTH), 60.0, 95.0);
-        relative_humidity = sinusoidal(hum_fact, 55.0, 75.0);
+        relative_humidity = sinusoidal(humidity, 55.0, 75.0);
         break;
     case 15: // Cwa: warm temperature, winter dry, hot summer
         temp_night = even(season(summer, MONTH), 4.0, 20.0);
         temp_day = long_low(season(summer, MONTH), 15.0, 30.0);
         temp_water = long_low(season(summer, 2.0*MONTH), 7.0, 24.5);
         precipitation = long_low(season(summer, MONTH), 10.0, 320.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 60.0, 79.0);
+        relative_humidity = sinusoidal(humidity, 60.0, 79.0);
         break;
     case 16: // Cwb: warm temperature, winter dry, warm summer
         temp_night = even(season(summer, MONTH), 1.0, 13.0);
         temp_day = long_low(season(summer, MONTH), 15.0, 27.0);
         temp_water = even(season(summer, 2.0*MONTH), 5.0, 22.5);
         precipitation = long_low(season(summer, MONTH), 10.0, 250.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 58.0, 72.0);
+        relative_humidity = sinusoidal(humidity, 58.0, 72.0);
         break;
     case 17: // Cwc: warm temperature, winter dry, cool summer
         temp_night = long_low(season(summer, MONTH), -9.0, 6.0);
         temp_day = long_high(season(summer, MONTH), 6.0, 17.0);
         temp_water = long_high(season(summer, 2.0*MONTH), 8.0, 15.5);
         precipitation = long_low(season(summer, MONTH), 5.0, 200.0);
-        relative_humidity = long_high(season(hum_fact, MONTH), 50.0, 58.0);
+        relative_humidity = long_high(humidity, 50.0, 58.0);
         break;
     default:
         break;
@@ -560,8 +563,9 @@ void FGClimate::set_continetal()
     double summer = _season_summer;
     double winter = -summer;
 
-    double hum_fact = linear(daytime(day, 3.0*HOUR), sinusoidal(summer, 0.0, 0.36),
-                                  sinusoidal(season(winter), 0.86, 1.0));
+    double hmin = sinusoidal(summer, 0.0, 0.36);
+    double hmax = sinusoidal(season(winter), 0.86, 1.0);
+    double humidity = linear(daytime(day, -9.0*HOUR), hmin, hmax);
 
     double temp_water = _temperature_water;
     double temp_day = _temperature_sl;
@@ -575,77 +579,77 @@ void FGClimate::set_continetal()
         temp_day = sinusoidal(season(summer, MONTH), -5.0, 30.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), 0.0, 26.5);
         precipitation = linear(season(summer, MONTH), 30.0, 70.0);
-        relative_humidity = sinusoidal(hum_fact, 68.0, 72.0);
+        relative_humidity = sinusoidal(humidity, 68.0, 72.0);
         break;
     case 19: // Dfb: snow, fully humid, warm summer, warm summer
         temp_night = sinusoidal(season(summer, MONTH), -17.5, 10.0);
         temp_day = sinusoidal(season(summer, MONTH), -7.5, 25.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), -2.0, 22.5);
         precipitation = linear(season(summer, MONTH), 30.0, 70.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 69.0, 81.0);
+        relative_humidity = sinusoidal(humidity, 69.0, 81.0);
         break;
     case 20: // Dfc: snow, fully humid, cool summer, cool summer
         temp_night = sinusoidal(season(summer, MONTH), -30.0, 4.0);
         temp_day = sinusoidal(season(summer, MONTH), -20.0, 15.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), -10.0, 12.5);
         precipitation = linear(season(summer, 1.5*MONTH), 22.0, 68.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 70.0, 88.0);
+        relative_humidity = sinusoidal(humidity, 70.0, 88.0);
         break;
     case 21: // Dfd: snow, fully humid, extremely continetal
         temp_night = sinusoidal(season(summer, MONTH), -45.0, 4.0);
         temp_day = sinusoidal(season(summer, MONTH), -35.0, 10.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), -15.0, 8.5);
         precipitation = long_low(season(summer, 1.5*MONTH), 7.5, 45.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 80.0, 90.0);
+        relative_humidity = sinusoidal(humidity, 80.0, 90.0);
         break;
     case 22: // Dsa: snow, summer dry, hot summer
         temp_night = sinusoidal(season(summer, 1.5*MONTH), -10.0, 10.0);
         temp_day = sinusoidal(season(summer, 1.5*MONTH), 0.0, 30.0);
         temp_water = sinusoidal(season(summer, 3.5*MONTH), 4.0, 24.5);
         precipitation = long_high(season(winter, 2.0*MONTH), 5.0, 65.0);
-        relative_humidity = sinusoidal(season(hum_fact, 1.5*MONTH), 48.0, 58.08);
+        relative_humidity = sinusoidal(humidity, 48.0, 58.08);
         break;
     case 23: // Dsb: snow, summer dry, warm summer
         temp_night = sinusoidal(season(summer, 1.5*MONTH), -15.0, 6.0);
         temp_day = sinusoidal(season(summer, 1.5*MONTH), -4.0, 25.0);
         temp_water = sinusoidal(season(summer, 2.5*MONTH), 0.0, 19.5);
         precipitation = long_high(season(winter, 2.0*MONTH), 12.0, 65.0);
-        relative_humidity = sinusoidal(season(hum_fact, 1.5*MONTH), 50.0, 68.0);
+        relative_humidity = sinusoidal(humidity, 50.0, 68.0);
         break;
     case 24: // Dsc: snow, summer dry, cool summer
         temp_night = sinusoidal(season(summer, MONTH), -27.5, 2.0);
         temp_day = sinusoidal(season(summer, MONTH), -4.0, 15.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), 0.0, 12.5);
         precipitation = long_low(season(summer, MONTH), 32.5, 45.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 50.0, 60.0);
+        relative_humidity = sinusoidal(humidity, 50.0, 60.0);
         break;
     case 25: // Dsd: snow, summer dry, extremely continetal
         temp_night = sinusoidal(season(summer, MONTH), -11.5, -6.5);
         temp_day = sinusoidal(season(summer, MONTH), 14.0, 27.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), 8.0, 20.5);
         precipitation = long_low(season(summer, MONTH), 5.0, 90.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 48.0, 62.0);
+        relative_humidity = sinusoidal(humidity, 48.0, 62.0);
         break;
     case 26: // Dwa: snow, winter dry, hot summer
         temp_night = sinusoidal(season(summer, MONTH), -18.0, 16.5);
         temp_day = sinusoidal(season(summer, MONTH), -5.0, 25.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), 0.0, 23.5);
         precipitation = long_low(season(summer, 1.5*MONTH), 5.0, 180.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 60.0, 68.0);
+        relative_humidity = sinusoidal(humidity, 60.0, 68.0);
         break;
     case 27: // Dwb: snow, winter dry, warm summer
         temp_night = sinusoidal(season(summer, MONTH), -28.0, 10.0);
         temp_day = sinusoidal(season(summer, MONTH), -12.5, 22.5);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), -5.0, 18.5);
         precipitation = long_low(season(summer, 1.5*MONTH), 10.0, 140.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 60.0, 72.0);
+        relative_humidity = sinusoidal(humidity, 60.0, 72.0);
         break;
     case 28: // Dwc: snow, winter dry, cool summer
         temp_night = sinusoidal(season(summer, MONTH), -33.0, 5.0);
         temp_day = sinusoidal(season(summer, MONTH), -20.0, 20.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), -10.0, 16.5);
         precipitation = long_low(season(summer, 1.5*MONTH), 10.0, 110.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 60.0, 78.0);
+        relative_humidity = sinusoidal(humidity, 60.0, 78.0);
         break;
     case 29: // Dwd: snow, winter dry, extremely continetal
         temp_night = sinusoidal(season(summer, MONTH), -57.5, 0.0);
@@ -678,9 +682,9 @@ void FGClimate::set_polar()
     double summer = _season_summer;
     double winter = -summer;
 
-    double hum_fact = linear(daytime(day, 3.0*HOUR),
-                             sinusoidal(summer, 0.0, 0.36),
-                             sinusoidal(season(winter), 0.86, 1.0));
+    double hmin = sinusoidal(summer, 0.0, 0.36);
+    double hmax = sinusoidal(season(winter), 0.86, 1.0);
+    double humidity = linear(daytime(day, -9.0*HOUR), hmin, hmax);
 
     // polar climate also occurs high in the mountains
     double temp_water = _temperature_water;
@@ -695,14 +699,14 @@ void FGClimate::set_polar()
         temp_day = long_low(season(summer, MONTH), -32.5, 0.0);
         temp_water = long_low(season(summer, 2.0*MONTH), -27.5, -3.5);
         precipitation = linear(season(summer, 2.5*MONTH), 50.0, 80.0);
-        relative_humidity = long_low(season(hum_fact, MONTH), 65.0, 75.0);
+        relative_humidity = long_low(humidity, 65.0, 75.0);
         break;
     case 31: // ET: polar tundra
         temp_night = sinusoidal(season(summer, MONTH), -30.0, 0.0);
         temp_day = sinusoidal(season(summer, 1.5*MONTH), -22.5, 8.0);
         temp_water = sinusoidal(season(summer, 2.0*MONTH), -15.0, 5.0);
         precipitation = sinusoidal(season(summer, 2.0*MONTH), 15.0, 45.0);
-        relative_humidity = sinusoidal(season(hum_fact, MONTH), 60.0, 88.0);
+        relative_humidity = sinusoidal(humidity, 60.0, 88.0);
         break;
     default:
         break;
@@ -784,7 +788,8 @@ void FGClimate::set_environment()
         _set(_lichen_cover, 0.5*pow(wetness*cover, 1.5));
     }
 
-    _rootNode->setDoubleValue("day-light-pct", _day_light*100.0);
+    _rootNode->setDoubleValue("daytime-pct", _daytime*100.0);
+    _rootNode->setDoubleValue("daylight-pct", _day_light*100.0);
     _rootNode->setDoubleValue("day-noon-pct", _day_noon*100.0);
     _rootNode->setDoubleValue("season-summer-pct", _season_summer*100.0);
     _rootNode->setDoubleValue("seasons-year-pct", _seasons_year*100.0);
@@ -817,6 +822,30 @@ void FGClimate::set_environment()
     }
 }
 
+void FGClimate::setEnvironmentUpdate(bool value)
+{
+    _environment_adjust = value;
+
+    if (_metarSnowLevelNode)
+    {
+        if (value) {
+            update(0.0);
+        }
+        else
+        {
+            if (!_metarSnowLevelNode->getBoolValue()) {
+                fgSetDouble("/environment/snow-level-m", 8000.0);
+            }
+            fgSetDouble("/environment/surface/snow-thickness-factor", 0.0);
+            fgSetDouble("/environment/sea/surface/ice-cover", 0.0);
+            fgSetDouble("/environment/surface/dust-cover-factor", 0.0);
+            fgSetDouble("/environment/surface/wetness-set", 0.0);
+            fgSetDouble("/environment/surface/lichen-cover-factor", 0.0);
+            fgSetDouble("/environment/season", 0.0);
+        }
+    }
+}
+
 // ---------------------------------------------------------------------------
 
 const std::string FGClimate::_classification[MAX_CLIMATE_CLASSES] = {
diff --git a/src/Environment/climate.hxx b/src/Environment/climate.hxx
index 87db1eba4..1280753f5 100644
--- a/src/Environment/climate.hxx
+++ b/src/Environment/climate.hxx
@@ -63,6 +63,9 @@ public:
     double get_humidity_pct() { return _relative_humidity_gl; }
     double get_wind_kmh() { return _wind; }
 
+    bool getEnvironmentUpdate() const { return _environment_adjust; }
+    void setEnvironmentUpdate(bool value);
+
     void test();
 private:
     static const std::string _classification[MAX_CLIMATE_CLASSES];