From 146530a5d0bc0b82ab66507cb96a800c05f5dc0f Mon Sep 17 00:00:00 2001
From: Anders Gidenstam <anders@gidenstam.org>
Date: Sun, 8 May 2011 21:10:36 +0200
Subject: [PATCH 1/4] WalkView: Fixed a bug in the polyline path constraint.

---
 Aircraft/Generic/WalkView/walkview.nas | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Aircraft/Generic/WalkView/walkview.nas b/Aircraft/Generic/WalkView/walkview.nas
index f12fe31e3..c8df366e3 100644
--- a/Aircraft/Generic/WalkView/walkview.nas
+++ b/Aircraft/Generic/WalkView/walkview.nas
@@ -254,7 +254,7 @@ var makePolylinePath = func (points, width, round_ends = 0) {
     if (size(points) < 2) return nil;
     var ret = LinePlane.new(points[0], points[1], width);
     if (round_ends) {
-        ret = UnionConstraint.new(line,
+        ret = UnionConstraint.new(ret,
                                   CircularXYSurface.new(points[0], width/2));
     }
     for (var i = 2; i < size(points); i += 1) {

From 2b54e87da853d6504434b1579e0e9a9baf43f34b Mon Sep 17 00:00:00 2001
From: Stuart Buchanan <stuart_d_buchanan@yahoo.co.uk>
Date: Fri, 13 May 2011 19:51:34 +0100
Subject: [PATCH 2/4] Update documentation for 3D clouds - clouds can now be
 moved with an offset.

---
 Docs/README.3DClouds | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Docs/README.3DClouds b/Docs/README.3DClouds
index 97a1365e6..b8ebc2190 100644
--- a/Docs/README.3DClouds
+++ b/Docs/README.3DClouds
@@ -83,8 +83,8 @@ property arguments.
 <lat-deg>    - Latitude t place the cloud, in degrees (default 0)
 <alt-ft>     - Altitude to place the cloud, relative to the layer (!) in ft
                (default 0)
-
-TODO: Add offset arguments for consistency with add-cloud.
+<x-offset-m> - Offset in m from the lon-deg. +ve is south (default 0)
+<y-offset-m> - Offset in m from the lat-deg. +ve is east (default 0)
 
 Deleting Individual Clouds
 ===========================

From 04dbaa1d9a99aaac7debd991b690767fbc45105b Mon Sep 17 00:00:00 2001
From: Mathias Froehlich <Mathias.Froehlich@web.de>
Date: Sat, 14 May 2011 09:36:19 +0200
Subject: [PATCH 3/4] ThorstenB: checkbox to enable looped replay (LinuxTag
 2011 demo feature ;-) )

---
 gui/dialogs/replay.xml | 9 +++++++++
 preferences.xml        | 1 +
 2 files changed, 10 insertions(+)

diff --git a/gui/dialogs/replay.xml b/gui/dialogs/replay.xml
index 16e5ae53d..493173d82 100644
--- a/gui/dialogs/replay.xml
+++ b/gui/dialogs/replay.xml
@@ -87,6 +87,15 @@
       </binding>
     </combo>
 
+    <checkbox>
+      <row>2</row><col>1</col>
+      <halign>left</halign>
+      <property>/sim/replay/looped</property>
+      <label>Looped replay</label>
+      <binding>
+        <command>dialog-apply</command>
+      </binding>
+    </checkbox>
   </group>
 
   <hrule/>
diff --git a/preferences.xml b/preferences.xml
index 430e08ba5..f828764be 100644
--- a/preferences.xml
+++ b/preferences.xml
@@ -674,6 +674,7 @@ Started September 2000 by David Megginson, david@megginson.com
 		<replay>
 			<duration type="double">90</duration>
 			<view type="int">1</view>
+			<looped type="bool">true</looped>
 		</replay>
 
 		<airport>

From aa6680b4a662fa6b4a59714426111c6fcf4d7215 Mon Sep 17 00:00:00 2001
From: Frederic Bouvier <fredfgfs01@free.fr>
Date: Sat, 14 May 2011 15:15:20 +0200
Subject: [PATCH 4/4] Local Weather 1.1 by Thorsten Renk

---
 Docs/README.local_weather.html         |  23 +-
 Docs/menu4.jpg                         | Bin 22143 -> 28507 bytes
 Environment/local-weather-defaults.xml | 106 ++++++++
 Nasal/local_weather.nas                | 331 ++++++++++++++++---------
 Nasal/weather_tile_management.nas      | 111 ++++++---
 Nasal/weather_tiles.nas                | 305 +++++++++++++++++------
 gui/dialogs/local_weather.xml          |  14 +-
 gui/dialogs/local_weather_config.xml   | 160 +++++++++---
 gui/dialogs/local_weather_tiles.xml    |  20 +-
 preferences.xml                        |   2 +
 10 files changed, 797 insertions(+), 275 deletions(-)
 create mode 100644 Environment/local-weather-defaults.xml

diff --git a/Docs/README.local_weather.html b/Docs/README.local_weather.html
index 74f53a2e1..f5a945c5e 100644
--- a/Docs/README.local_weather.html
+++ b/Docs/README.local_weather.html
@@ -7,7 +7,7 @@
 
 <body>
 
-<h1>Local Weather Package - v1.0</h1>
+<h1>Local Weather Package - v1.1</h1>
 
 <h2>1. Introduction</h2>
 
@@ -15,19 +15,20 @@ The aim of a local weather system is to simulate weather phenomena tied to speci
 
 This is in contrast to the current (v.2.0.0) global weather system of Flightgear where weather changes affect the weather everywhere in the simulated world and are (with few exceptions) not tied to specific locations. In such a system, it is impossible to observe e.g. the approach of a rainfront while flying in sunshine.<p>
 
-The local weather package aims to provide the functionality to simulate such local phenomena. In version 1.0, the package supplies various cloud placement algorithms, as well as local control over most major weather parameters (wind, visibility, pressure, temperature, rain, snow, thermal lift, turbulence...) through interpolation routines and effect volumes. The dynamics of the different systems is tied together - for instance clouds and weather effects drift in the specified wind field. The package also contains a fairly detailed algorithm to generate convective clouds and thermals with a realistic distribution over the various terrain types. There is a simulation of the interaction of the convective cloud system with the terrain as a function of time. Clouds drifting in the wind flow over obstacles, i.e. they change their altitude dynamically. Convection is implemented with a life cycle model of Cumulus clouds - they are generated, evolve for a given lifetime dependent on the underlying terrain and decay at the end of their life cycle. Thermals associated with the clouds follow the same pattern. In particular, in the presence of wind favourable spots for convection generate 'alleys' of dense cloud cover downwind, or thermals and clouds generated over land decay rapidly once they reach open water.<p>
+The local weather package aims to provide the functionality to simulate such local phenomena. In version 1.1, the package supplies various cloud placement algorithms, as well as local control over most major weather parameters (wind, visibility, pressure, temperature, rain, snow, thermal lift, turbulence...) through interpolation routines and effect volumes. The dynamics of the different systems is tied together - for instance clouds and weather effects drift in the specified wind field. The package also contains a fairly detailed algorithm to generate convective clouds and thermals with a realistic distribution over the various terrain types. There is a simulation of the interaction of the convective cloud system with the terrain as a function of time. Clouds drifting in the wind flow over obstacles, i.e. they change their altitude dynamically. Convection is implemented with a life cycle model of Cumulus clouds - they are generated, evolve for a given lifetime dependent on the underlying terrain and decay at the end of their life cycle. Thermals associated with the clouds follow the same pattern. In particular, in the presence of wind favourable spots for convection generate 'alleys' of dense cloud cover downwind, or thermals and clouds generated over land decay rapidly once they reach open water.<p>
 
 For long-range flights, the system provides an offline weather system with plausible transitions between different large-scale weather patterns like fronts and low and high pressure areas, as well as the optional use of live METAR data. <p>
 
 
 <h2>2. Installation</h2>
 
-The package needs to be unpacked in the Flightgear root directory. It writes content into the <i>Nasal/, gui/, gui/dialogs/, Shaders, Effects/, Docs/</i>, and <i>Models/Weather/</i> subdirectories. The installation does not overwrite any of the default Flightgear files, but to be accessible from the menu for Flightgear 2.0.0, one must copy <i>gui/menubar.xml.alt</i> to the default <i>menubar.xml</i> or copy the three lines of the environemnt menu calling <i>local_weather</i>, <i>local_weather_tiles</i> and <i>local_weather_config</i> into the default file. More recent versions of Flightgear already provide the necessary menu items.<p>
+The package needs to be unpacked in the Flightgear root directory. It writes content into the <i>Nasal/, gui/, gui/dialogs/, Shaders, Effects/, Docs/</i>, <i>Environment/</i> and <i>Models/Weather/</i> subdirectories. The installation does not overwrite any of the default Flightgear files, but to be accessible from the menu for Flightgear 2.0.0, one must copy <i>gui/menubar.xml.alt</i> to the default <i>menubar.xml</i> or copy the three lines of the environemnt menu calling <i>local_weather</i>, <i>local_weather_tiles</i> and <i>local_weather_config</i> into the default file. More recent versions of Flightgear already provide the necessary menu items. In order to read in the default menu entries, the line  <b>&#60;local-weather include="Environment/local-weather-defaults.xml"/&#62;</b> needs to be added to the file <i>preferences.xml</i>.<p>
 
-This adds the items <i>Local Weather</i>, <i>Local Weather Tiles</i> and <i>Local Weather Config</i>  to the <i>Environment</i> menu when Flightgear is up. Most of the basic functionality is contained in <i>local_weather.nas</i> which is loaded at startup and identifies itself with a message.<p>
+This adds the items <i>Local Weather</i>, <i>Local Weather Tiles</i> and <i>Local Weather Config</i>  to the <i>Environment</i> menu when Flightgear is up. Most of the basic functionality is contained in <i>local_weather.nas</i> which is loaded at startup and identifies itself with a message. A compatibility layer (<i>compat_layer.nas</i>) tests for hard-coded support and ensures that, dependent on the version, hard-coded or Nasal-coded fallback functions are used.<p>
 
 Unless asked to do so from the menu, local weather does <b>not</b> run any process in the background. Upon loading, the package does not set any properties already existing, but only generates properties necessary for the menu entries in its own subdirectory <i>/local-weather/</i> in the tree. The package also does a features check on startup if particular functions are available in hard-coded form. If the features are not present, the package will largely still function properly using slower Nasal fallback code.<p>
 
+In order to use the hard-coded terrain presampling routines, it is currently necessary to add the line <b> --prop:/environment/terrain/area[0]/enabled=1</b> to the Flightgear commandline. If this is not done, the system will use the slower fallback routines.<p>
 
 <h2>3. Functionality</h2>
 
@@ -163,7 +164,7 @@ The following pictures show possible results of tile setups 'High-pressure-borde
 <h3>Performance settings</h3>
 
 
-The performance setting menu is available from the main menubar. It controls the allocation of system resources to the various tasks.<p>
+The performance setting menu is available from the main menubar. It controls the allocation of system resources to the various tasks, as well as the behaviour of the offline weather system.<p>
 
 <center>
 <img src="menu4.jpg">
@@ -179,10 +180,16 @@ From this, it is apparent that the two ranges should not be drastically differen
 
 There are additional options to do asymmetric buffering, i.e. to 'cut' out a wedge in the rear of the aircraft in which the tile creation radius or the cloud visibility radius are lower.  For example, setting the buffering ratio to 0.2 and the angle to 180 degrees corresponds to a very agressive buffering in which clouds in the rear hemisphere of the aircraft are almost absent and shown only to 20% of the set distance. This may increase performance by 20-30%, but only in straight flight - in fast turns, lots of clouds have to be shuffled from the buffer into the scenery and back, which is actually slower than never trying to cut a wedge at all. Also, agressive asymmetric buffering is not nice in external views as the reference is always the aircraft course.<p>
 
-The last option controls the amout of resources allocated to making clouds drift in the wind if dynamical weather is on. In order to avoid freezes, the weather dynamics system processes only a fixed number of clouds per frame inside the field of view. That means that faraway clouds do not necessarily move even with dynamical weather on. The slider indirectly controls the distance out to which clouds are being processed.<p>
+The buffering control can also optionally be tied to a target framerate. In this case, the visible range set with the slider is ignored and a control loop tries to adjust the visible range instead such that a 5-second average of the framerate is within 10% of a specified target framerate. Currently, the subsystem <i>only</i> adjusts the visible range of buffering - asymmetric buffering and/or tile loading range still needs to be specified manually. Also, the system cannot respond to unsolvable problems - if the framerate in the absence of clouds falls below 30, then no setting for the cloud range will bring it to 35. <p>
+
+The next option controls the amout of resources allocated to making clouds drift in the wind if dynamical weather is on. In order to avoid freezes, the weather dynamics system processes only a fixed number of clouds per frame inside the field of view. That means that faraway clouds do not necessarily move even with dynamical weather on. The slider indirectly controls the distance out to which clouds are being processed.<p>
 
 All performance setting menu-options work at runtime, but are processed over time rather than instantaneously, i.e. it takes 10-20 seconds till the new balance between buffered clouds and active clouds is reached after the slider is moved.<p>
 
+The final options, weather pattern scales, deal with the long-range behaviour of the offline weather system. They are not parsed when the tile selection mode is set to <i>METAR</i>. The first slider controls the transition between different airmasses. In the default setting, the typical distance to encounter a different airmass when one flies in a 'High-pressure-core' tile is 200 km. The airmass slider allows to vary this distance between 200 and 800 km. <p>
+
+Inside each tile, there are typically 4-8 different basic cloud patterns (distribution of layers) modelled, with a random pattern selected for each new tile of the given airmass classification. The <i>cloud patterns</i> slider adjusts the probability that the same cloud configuration is kept as long as a tile of the same airmass type is generated. Selecting a large scale in essence means that the theme of clouds will remain similar within each airmass, a small scale allows for more variation.<p>
+
 <h2>4. Cloud models</h2>
 
 The package contains a number of different cloud models, both static ones for Cirrus and Cirrocumulus clouds as well as rotated ones for Altocumulus, Cirrostratus, Cumulus, Cumulonimbus, Stratus and Nimbostratus cloudlet models. Neither the cloud textures, nor the models nor the transformations are perfected, and any aspect can be improved, albeit at the cost of performance consumption.<p>
@@ -246,7 +253,7 @@ Effect volumes are always specified between a minimum and a maximum altitude, an
 
  where <i>geometry</i> is a flag (1: circular, 2: elliptical and 3: rectangular), <i>lat</i> and <i>lon</i> are the latitude and longitude, <i>r1</i> and <i>r2</i> are the two size parameters for the elliptic or rectangular shape (for the circular shape, only the first is used), <i>phi</i> is the rotation angle of the shape (not used for circular shape), <i>alt_low</i> and <i>alt_high</i> are the altitude boundaries, <i>vis, rain, snow, turb</i> and <i>lift</i> are weather parameters which are either set to the value they should assume, or to -1 if they are not to be used, or to -2 if a function instead of a parameter is to be used and -3 if a function for wave lift is used. Since thermal lift can be set to negative values in a sink, a separate flag is provided in this case. <i>sat</i> finally determines the light saturation, a parameter between 0 (dark) and 1 (normal light) - it can be used to dim the light beneath cloud layers (which is not done automatically as objects don't cast shades in Flightgear, and given that most cloud models are rotated, their shade would look rather odd on any case).<p>
 
-In version 1.0, thermal lift and wave lift are implemented by function (wave lift is not yet automatically placed, but can be easily from Nasal). There is no easy way to implement any weather parameter by function in an effect volume, as this requires some amount of Nasal coding.<p>
+In version 1.1, thermal lift and wave lift are implemented by function (wave lift is not yet automatically placed, but can be easily from Nasal). There is no easy way to implement any weather parameter by function in an effect volume, as this requires some amount of Nasal coding.<p>
 
 Both thermal lift and saturation require a more recent version of Flightgear than 2.0.0 in order to take effect.<p>
 
@@ -362,7 +369,7 @@ With default settings, the local weather package generates a 40x40 km weather ti
 
 <li> Rain and snow may not start properly. For me, rain is only generated when I switch 'Shader effects' on and off in the menu on startup, otherwise neither moving the menu slider nor entering an effect volume generate rain. This seems to be a bug of some Flightgear versions, not of the local weather system.<p>
 
-<li> Especially with multiple overcast layers and weather fronts, loading and unloading weather tiles may take a long time / cause severe drops in framerate. It seems that a dual core processor is very valuable with this particular issue - try switching multiprocessor support on if needed, otherwise please refer to performance tuning to solve such problems. In general, overcast layers and tropical weather tiles do require a system on the high end of the performance scale to render properly.<p>
+<li> Especially with multiple overcast layers and weather fronts, loading and unloading weather tiles may take a long time / cause severe drops in framerate. It seems that a dual core processor is very valuable with this particular issue - try switching multiprocessor support on if needed, otherwise please refer to performance tuning to solve such problems. In more recent versions of Flightgear, an activated texture cache improves performance dramatically. In general, overcast layers and tropical weather tiles do require a system on the high end of the performance scale to render properly.<p>
 
 <li> The local weather package is able to occasionally trigger errors like 'Warning:: Picked up error in TriangleIntersect'. These seem to be a problem in the core Flightgear code - the package does nothing but placing normal (rather simple) AC3D models into the scenery.<p>
 
diff --git a/Docs/menu4.jpg b/Docs/menu4.jpg
index 4394ba1b3f8ac309bb2f6467cc085826f787cf6a..79d29173f37a282ea8fd27f7e06648df702101b7 100644
GIT binary patch
literal 28507
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

literal 22143
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%0AQ+%{QA32
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
Yrg|zXI;JJ<1jy*KNC(m}{9xig06f`p5C8xG

diff --git a/Environment/local-weather-defaults.xml b/Environment/local-weather-defaults.xml
new file mode 100644
index 000000000..6c26c3b60
--- /dev/null
+++ b/Environment/local-weather-defaults.xml
@@ -0,0 +1,106 @@
+<PropertyList>
+  <config>
+    <asymmetric-buffering-flag type="bool" userarchive="y">0</asymmetric-buffering-flag>
+    <asymmetric-buffering-reduction type="double" userarchive="y">0.3</asymmetric-buffering-reduction>
+    <asymmetric-buffering-angle-deg type="double" userarchive="y">90.0</asymmetric-buffering-angle-deg>
+    <distance-to-load-tile-m type="double" userarchive="y">39000.0</distance-to-load-tile-m>
+    <distance-to-remove-tile-m type="double" userarchive="y">39500.0</distance-to-remove-tile-m>
+    <detailed-clouds-flag type="bool" userarchive="y">1</detailed-clouds-flag>
+    <dynamics-flag type="bool" userarchive="y">0</dynamics-flag>
+    <thermal-properties type="double" userarchive="y">1.0</thermal-properties>
+    <wind-model type="string" userarchive="y">constant</wind-model>
+    <buffer-flag type="bool" userarchive="y">1</buffer-flag>
+    <asymmetric-reduction type="double" userarchive="y">0.7</asymmetric-reduction>
+    <clouds-visible-range-m type="double" userarchive="y">30000.0</clouds-visible-range-m>
+    <clouds-in-dynamics-loop type="int" userarchive="y">250</clouds-in-dynamics-loop>
+    <debug-output-flag type="bool" userarchive="y">0</debug-output-flag>
+    <generate-thermal-lift-flag type="bool" userarchive="y">0</generate-thermal-lift-flag>
+    <dynamical-convection-flag type="bool" userarchive="y">0</dynamical-convection-flag>
+    <thread-flag type="bool" userarchive="n">1</thread-flag>
+    <presampling-flag type="bool" userarchive="y">1</presampling-flag>
+    <fps-control-flag type="bool" userarchive="y">0</fps-control-flag>
+    <target-framerate type="double" userarchive="y">25.0</target-framerate>
+    <large-scale-persistence type="double" userarchive="y">1.0</large-scale-persistence>
+    <small-scale-persistence type="double" userarchive="y">0.0</small-scale-persistence>
+  </config>
+ <tmp>
+    <tile-management type="string" userarchive="y">realistic weather</tile-management>
+    <tile-type type="string" userarchive="y">High-pressure</tile-type>
+    <tile-orientation-deg type="double" userarchive="y">260.0</tile-orientation-deg>
+    <windspeed-kt type="double" userarchive="y">8.0</windspeed-kt>
+    <gust-frequency-hz type="double" userarchive="n">0.0</gust-frequency-hz>
+    <gust-relative-strength type="double" userarchive="n">0.0</gust-relative-strength>
+    <gust-angular-variation-deg type="double" userarchive="n">0.0</gust-angular-variation-deg>
+    <tile-alt-offset-ft type="double" userarchive="n">0.0</tile-alt-offset-ft>
+    <asymmetric-tile-loading-flag type="bool" userarchive="y">0</asymmetric-tile-loading-flag>
+    <FL0-wind-from-heading-deg type="double" userarchive="y">260.0</FL0-wind-from-heading-deg>
+    <FL0-windspeed-kt type="double" userarchive="y">8.0</FL0-windspeed-kt>
+    <FL50-wind-from-heading-deg type="double" userarchive="y">262.0</FL50-wind-from-heading-deg>
+    <FL50-windspeed-kt type="double" userarchive="y">11.0</FL50-windspeed-kt>
+    <FL100-wind-from-heading-deg type="double" userarchive="y">264.0</FL100-wind-from-heading-deg>
+    <FL100-windspeed-kt type="double" userarchive="y">16.0</FL100-windspeed-kt>
+    <FL180-wind-from-heading-deg type="double" userarchive="y">265.0</FL180-wind-from-heading-deg>
+    <FL180-windspeed-kt type="double" userarchive="y">24.0</FL180-windspeed-kt>
+    <FL240-wind-from-heading-deg type="double" userarchive="y">269.0</FL240-wind-from-heading-deg>
+    <FL240-windspeed-kt type="double" userarchive="y">35.0</FL240-windspeed-kt>
+    <FL300-wind-from-heading-deg type="double" userarchive="y">273.0</FL300-wind-from-heading-deg>
+    <FL300-windspeed-kt type="double" userarchive="y">45.0</FL300-windspeed-kt>
+    <FL340-wind-from-heading-deg type="double" userarchive="y">274.0</FL340-wind-from-heading-deg>
+    <FL340-windspeed-kt type="double" userarchive="y">50.0</FL340-windspeed-kt>
+    <FL390-wind-from-heading-deg type="double" userarchive="y">273.0</FL390-wind-from-heading-deg>
+    <FL390-windspeed-kt type="double" userarchive="y">56.0</FL390-windspeed-kt>
+    <FL450-wind-from-heading-deg type="double" userarchive="y">272.0</FL450-wind-from-heading-deg>
+    <FL450-windspeed-kt type="double" userarchive="y">65.0</FL450-windspeed-kt>
+    <cloud-type type="string" userarchive="n">Altocumulus</cloud-type>
+    <alt type="double" userarchive="n">12000.0</alt>
+    <nx type="int" userarchive="n">5</nx>
+    <xoffset type="double" userarchive="n">800.0</xoffset>
+    <xedge type="double" userarchive="n">0.2</xedge>
+    <ny type="int" userarchive="n">15</ny>
+    <yoffset type="double" userarchive="n">800.0</yoffset>
+    <yedge type="double" userarchive="n">0.2</yedge>
+    <dir type="double" userarchive="n">0.0</dir>
+    <tri type="double" userarchive="n">1.0</tri>
+    <rnd-pos-x type="double" userarchive="n">400.0</rnd-pos-x>
+    <rnd-pos-y type="double" userarchive="n">400.0</rnd-pos-y>
+    <rnd-alt type="double" userarchive="n">300.0</rnd-alt>
+    <conv-strength type="double" userarchive="n">1.0</conv-strength>
+    <conv-size type="double" userarchive="n">15.0</conv-size>
+    <conv-alt type="double" userarchive="n">2000.0</conv-alt>
+    <bar-alt type="double" userarchive="n">3500.0</bar-alt>
+    <bar-n type="int" userarchive="n">150</bar-n>
+    <bar-dir type="double" userarchive="n">0.0</bar-dir>
+    <bar-dist type="double" userarchive="n">5.0</bar-dist>
+    <bar-size type="double" userarchive="n">10.0</bar-size>
+    <scloud-type type="string" userarchive="n">Altocumulus</scloud-type>
+    <scloud-subtype type="string" userarchive="n">small</scloud-subtype>
+    <scloud-alt type="double" userarchive="n">5000.0</scloud-alt>
+    <scloud-dir type="double" userarchive="n">0.0</scloud-dir>
+    <layer-type type="string" userarchive="n">Nimbus</layer-type>
+    <layer-rx type="double" userarchive="n">10.0</layer-rx>
+    <layer-ry type="double" userarchive="n">10.0</layer-ry>
+    <layer-phi type="double" userarchive="n">0.0</layer-phi>
+    <layer-alt type="double" userarchive="n">3000.0</layer-alt>
+    <layer-thickness type="double" userarchive="n">500.0</layer-thickness>
+    <layer-density type="double" userarchive="n">1.0</layer-density>
+    <layer-edge type="double" userarchive="n">10.0</layer-edge>
+    <layer-rain-flag type="bool" userarchive="n">1</layer-rain-flag>
+    <layer-rain-density type="double" userarchive="n">1.0</layer-rain-density>
+    <box-x-m type="double" userarchive="n">600.0</box-x-m>
+    <box-y-m type="double" userarchive="n">600.0</box-y-m>
+    <box-alt-ft type="double" userarchive="n">300.0</box-alt-ft>
+    <box-n type="int" userarchive="n">10</box-n>
+    <box-core-fraction type="double" userarchive="n">0.4</box-core-fraction>
+    <box-core-offset type="double" userarchive="n">0.2</box-core-offset>
+    <box-core-height type="double" userarchive="n">1.4</box-core-height>
+    <box-core-n type="int" userarchive="n">3</box-core-n>
+    <box-bottom-fraction type="double" userarchive="n">0.9</box-bottom-fraction>
+    <box-bottom-thickness type="double" userarchive="n">0.2</box-bottom-thickness>
+    <box-bottom-n type="int" userarchive="n">12</box-bottom-n>
+ </tmp>
+</PropertyList>
+
+
+
+
+
diff --git a/Nasal/local_weather.nas b/Nasal/local_weather.nas
index f2ba503ce..52c7a2ff4 100644
--- a/Nasal/local_weather.nas
+++ b/Nasal/local_weather.nas
@@ -415,8 +415,6 @@ return f_slow;
 
 var interpolation_loop = func {
 
-var iNode = props.globals.getNode(lw~"interpolation", 1);
-var cNode = props.globals.getNode(lw~"current", 1);
 var viewpos = geo.aircraft_position();
 
 var sum_alt = 0.0;
@@ -428,6 +426,15 @@ var sum_norm = 0.0;
 
 var vis_before = getprop(lwi~"visibility-m");
 
+# if applicable, do some work for fps sampling
+
+if (fps_control_flag == 1)
+	{
+	fps_samples = fps_samples +1;
+	fps_sum = fps_sum + getprop("/sim/frame-rate");
+	}
+
+
 # determine at which distance we no longer keep an interpolation point, needs to be larger for METAR since points are more scarce
 
 if (metar_flag == 1)
@@ -512,9 +519,9 @@ var alt1 = weather_dynamics.tile_convective_altitude[current_tile_index -1];
 var alt2 = alt1 + 1500.0;
 
 
-var inc1 = 0.2;
+var inc1 = 0.1;
 var inc2 = 5.0;
-var inc3 = 1.0;
+var inc3 = 0.5;
 
 var alt_above_mean = altitude - current_mean_terrain_elevation;
 
@@ -547,41 +554,58 @@ setprop(lwi~"turbulence",0.0);
 
 # now check if an effect volume writes the property and set only if not
 
-flag = props.globals.getNode("local-weather/effect-volumes/number-active-vis").getValue();
-if ((flag ==0) and (vis > 0.0))
+#flag = props.globals.getNode("local-weather/effect-volumes/number-active-vis").getValue();
+flag = getprop("local-weather/effect-volumes/number-active-vis");
+
+if ((flag ==0) and (vis > 0.0) and (getprop(lw~"lift-loop-flag") == 0))
 	{
-	cNode.getNode("visibility-m").setValue(vis);
+	#cNode.getNode("visibility-m").setValue(vis);
+	setprop(lw~"current/visibility-m",vis);
 	compat_layer.setVisibility(vis);
 	}
 
-flag = props.globals.getNode("local-weather/effect-volumes/number-active-turb").getValue();
+#flag = props.globals.getNode("local-weather/effect-volumes/number-active-turb").getValue();
+flag = getprop("local-weather/effect-volumes/number-active-turb");
+
 if ((flag ==0))
 	{
-	cNode.getNode("turbulence").setValue(0.0);
+	#cNode.getNode("turbulence").setValue(0.0);
+	setprop(lw~"current/turbulence",0.0);		
 	compat_layer.setTurbulence(0.0);
 	}
 
 
-flag = props.globals.getNode("local-weather/effect-volumes/number-active-lift").getValue();
+#flag = props.globals.getNode("local-weather/effect-volumes/number-active-lift").getValue();
+flag = getprop("local-weather/effect-volumes/number-active-lift");
+
 if (flag ==0) 
 	{
-	cNode.getNode("thermal-lift").setValue(0.0);
+	#cNode.getNode("thermal-lift").setValue(0.0);
+	setprop(lw~"current/thermal-lift",0.0);
 	}
 
 # no need to check for these, as they are not modelled in effect volumes
 
-cNode.getNode("temperature-degc",1).setValue(T);
+#cNode.getNode("temperature-degc",1).setValue(T);
+setprop(lw~"current/temperature-degc",T);
 compat_layer.setTemperature(T);
 
-cNode.getNode("dewpoint-degc",1).setValue(D);
+#cNode.getNode("dewpoint-degc",1).setValue(D);
+setprop(lw~"current/dewpoint-degc", D);
 compat_layer.setDewpoint(D);
 
-if (p>0.0) {cNode.getNode("pressure-sea-level-inhg",1).setValue(p); compat_layer.setPressure(p);}
+if (p>0.0) 
+	{
+	#cNode.getNode("pressure-sea-level-inhg",1).setValue(p); 
+	setprop(lw~"current/pressure-sea-level-inhg",p);
+	compat_layer.setPressure(p);
+	}
 
 
 # now determine the local wind 
 
-var tile_index = props.globals.getNode(lw~"tiles").getChild("tile",4).getNode("tile-index").getValue();
+#var tile_index = props.globals.getNode(lw~"tiles").getChild("tile",4).getNode("tile-index").getValue();
+var tile_index = getprop(lw~"tiles/tile[4]/tile-index");
 
 if (wind_model_flag ==1) # constant
 	{
@@ -669,21 +693,33 @@ if (gust_frequency > 0.0)
 	var gust_relative_strength = getprop(lw~"tmp/gust-relative-strength");
 	var gust_angvar = getprop(lw~"tmp/gust-angular-variation-deg");
 	
+	var winddir_last = getprop(lwi~"wind-from-heading-deg");
+
 	var alt_scaling_factor = 1.2 * windspeed / 10.0;
 	if (alt_scaling_factor < 1.0) {alt_scaling_factor = 1.0;}
 
 	# expected mean number of gusts in time interval (should be < 1)
 	var p_gust = gust_frequency * interpolation_loop_time;
 
+	winddir_change = 0.0;
+
 	if (rand() < p_gust) # we change the offsets for windspeed and direction
 		{
 		var alt_fact = 1.0 - altitude_agl/(boundary_alt * alt_scaling_factor);
 		if (alt_fact < 0.0) {alt_fact = 0.0};
 		windspeed_multiplier =  (1.0 + ((rand()) * gust_relative_strength * alt_fact));
-		winddir_change = alt_fact * (1.0 - 2.0 * rand() * gust_angvar);
+		winddir_change = alt_fact * (1.0 - 2.0 * rand()) * gust_angvar;
+		winddir_change = winddir_change * 0.2; # Markov chain parameter, max. change per frame is 1/5 
+		
+		# if the Markov chain reaches the boundary, reflect
+
+		#print("Winddir: ", winddir, " winddir_last: ", winddir_last, " winddir_change: ", winddir_change);
+		if (weather_tile_management.relangle(winddir_last + winddir_change, winddir) > gust_angvar)
+			{winddir_change = -winddir_change;}
+		
 		}
 	windspeed_current = windspeed_current *  windspeed_multiplier;
-	winddir = winddir + winddir_change;
+	winddir = winddir_last + winddir_change;
 	}
 
 	
@@ -692,13 +728,17 @@ if (gust_frequency > 0.0)
 
 compat_layer.setWindSmoothly(winddir, windspeed_current);
 
-iNode.getNode("wind-from-heading-deg").setValue(winddir);
-iNode.getNode("wind-speed-kt").setValue(windspeed_current);
+setprop(lwi~"wind-from-heading-deg", winddir);
+setprop(lwi~"wind-speed-kt",windspeed_current);
 
-cNode.getNode("wind-from-heading-deg").setValue(winddir);
-cNode.getNode("wind-speed-kt").setValue(windspeed_current);
+setprop(lw~"current/wind-from-heading-deg",winddir);
+setprop(lw~"current/wind-speed-kt",windspeed_current);
 
+#iNode.getNode("wind-from-heading-deg").setValue(winddir);
+#iNode.getNode("wind-speed-kt").setValue(windspeed_current);
 
+#cNode.getNode("wind-from-heading-deg").setValue(winddir);
+#cNode.getNode("wind-speed-kt").setValue(windspeed_current);
 
 
 if (getprop(lw~"interpolation-loop-flag") ==1) {settimer(interpolation_loop, interpolation_loop_time);}
@@ -777,6 +817,26 @@ if (getprop(lw~"wave-loop-flag") ==1)
 	lift = lift + getprop(lw~"current/wave-lift");
 	}
 
+# compute a reduction in visibility when entering the cloudbase
+
+var vis = getprop(lw~"interpolation/visibility-m");
+
+if (alt > 0.9 * thermal.height)
+	{
+	var visibility_reduction = math.pow((alt - 0.9 * thermal.height)/(0.2 * thermal.height),0.1);
+	visibility_reduction = visibility_reduction * (1.0 - math.pow(d/(0.8*thermal.radius),14));
+
+	if (visibility_reduction > 1.0) {visibility_reduction = 1.0;} # this shouldn't ever happen
+	if (visibility_reduction < 0.0) {visibility_reduction = 0.0;} 
+	vis = vis * (1.0 - 0.98 * visibility_reduction);
+
+	}
+
+setprop(lw~"current/visibility-m",vis);
+compat_layer.setVisibility(vis);
+
+
+
 
 setprop(lw~"current/thermal-lift",lift);
 compat_layer.setLift(lift);
@@ -1732,8 +1792,13 @@ settimer ( func {
 
 setprop(lw~"tmp/presampling-status", "idle");
 
+# reset the random store
+
+weather_tiles.rnd_store = rand();
+
 # indicate that we are no longer running
 
+
 local_weather_running_flag = 0;
 
 }
@@ -1846,6 +1911,8 @@ var create_cumosys = func (blat, blon, balt, nc, size) {
 if (detailed_clouds_flag == 1) 
 	{nc = int(0.7 * nc);}
 
+nc = int(nc / cumulus_efficiency_factor);
+
 if (thread_flag ==  1)
 	{setprop(lw~"tmp/convective-status", "computing");
 	cumulus_loop(blat, blon, balt, nc, size);}
@@ -1861,7 +1928,7 @@ else
 
 var cumulus_loop = func (blat, blon, balt, nc, size) {
 
-var n = 25;
+var n = int(25/cumulus_efficiency_factor);
 
 if (nc < 0) 
 	{
@@ -1951,7 +2018,7 @@ while (i < nc) {
 
 	# then decide if the thermal energy at the spot generates an updraft and a cloud
 
-	if (rand() < p) # we decide to place a cloud at this spot
+	if (rand() < (p * cumulus_efficiency_factor)) # we decide to place a cloud at this spot
 		{
 		strength = (1.5 * rand() + (2.0 * p)) * t_factor2; # the strength of thermal activity at the spot
 		if (strength > 1.0)  
@@ -2105,7 +2172,7 @@ while (i < nc) {
 
 	# check if to place a cloud with weight sqrt(p), the lifetime gets another sqrt(p) factor
 	
-	if (rand() > math.sqrt(p))
+	if (rand() > math.sqrt(p * cumulus_efficiency_factor))
 		{i=i+1; continue;}
 
 
@@ -3168,8 +3235,8 @@ var set_wind_ipoint_metar = func (lat, lon, d0, v0) {
 if (lat >0.0) {var dsign = -1.0;} else {var dsign = 1.0;} 
 
 
-var v1 = v0 * (1.0 + rand() * 0.2);
-var d1 = d0 + dsign * 3.0 * rand();
+var v1 = v0 * (1.0 + rand() * 0.1);
+var d1 = d0 + dsign * 2.0 * rand();
 
 var v2 = v0 * (1.2 + rand() * 0.2);
 var d2 = d0 + dsign * (3.0 * rand() + 2.0);
@@ -3225,11 +3292,11 @@ if (getprop(lw~"config/generate-thermal-lift-flag") ==1) {generate_thermal_lift_
 
 thread_flag = getprop(lw~"config/thread-flag");
 dynamics_flag = getprop(lw~"config/dynamics-flag");
-presampling_flag = getprop(lw~"tmp/presampling-flag");
+presampling_flag = getprop(lw~"config/presampling-flag");
 detailed_clouds_flag = getprop(lw~"config/detailed-clouds-flag");
 dynamical_convection_flag = getprop(lw~"config/dynamical-convection-flag");
 debug_output_flag = getprop(lw~"config/debug-output-flag");
-
+fps_control_flag = getprop(lw~"config/fps-control-flag");
 
 }
 
@@ -3825,8 +3892,12 @@ setprop(lw~"METAR/layer[3]/cover-oct",0);
 setprop(lw~"METAR/layer[3]/alt-agl-ft", 20000.0);
 setprop(lw~"METAR/available-flag",1);
 
+# set initial value for stored random number for small-scale cloud patterns
 
-# set listener for worker threads
+weather_tiles.rnd_store = rand();
+
+
+# set listeners
 
 setlistener(lw~"tmp/thread-status", func {var s = size(clouds_path); compat_layer.create_cloud_array(s, clouds_path, clouds_lat, clouds_lon, clouds_alt, clouds_orientation); });
 setlistener(lw~"tmp/convective-status", func {var s = size(clouds_path); compat_layer.create_cloud_array(s, clouds_path, clouds_lat, clouds_lon, clouds_alt, clouds_orientation); });
@@ -3840,6 +3911,12 @@ setlistener(lw~"config/clouds-in-dynamics-loop", func {weather_dynamics.max_clou
 
 setlistener(lw~"config/clouds-visible-range-m", func {weather_tile_management.cloud_view_distance = getprop(lw~"config/clouds-visible-range-m");});
 setlistener(lw~"config/distance-to-load-tile-m", func {setprop(lw~"config/distance-to-remove-tile-m",getprop(lw~"config/distance-to-load-tile-m") + 500.0);});
+
+setlistener(lw~"config/fps-control-flag", func {fps_control_flag = getprop(lw~"config/fps-control-flag");});
+setlistener(lw~"config/target-framerate", func {target_framerate = getprop(lw~"config/target-framerate");});
+
+setlistener(lw~"config/small-scale-persistence", func {weather_tiles.small_scale_persistence = getprop(lw~"config/small-scale-persistence");});
+
 }
 
 
@@ -4152,12 +4229,10 @@ var windIpointArray = [];
 
 var wind_model_flag = 1;
 
-# a global determining the relative amount of different textures in detailed convective clouds
+# globals governing properties of the Cumulus system
 
 var convective_texture_mix = 0.0;
-
-# a global keeping track of the mean cloud altitude when building a Cumulus from individual cloudlets
-
+var cumulus_efficiency_factor = 1.0;
 var cloud_mean_altitude = 0.0;
 
 # globals keeping track of the lifetime when building a Cumulus from individual cloudlets
@@ -4181,69 +4256,76 @@ var dynamical_convection_flag = 1;
 var debug_output_flag = 1;
 var metar_flag = 0;
 var local_weather_running_flag = 0;
+var fps_control_flag = 1;
+
+# globals for framerate controlled cloud management
+
+var fps_average = 0.0;
+var fps_samples = 0;
+var fps_sum = 0.0;
+var target_framerate = 25.0;
 
 # set all sorts of default properties for the menu
 
-setprop(lw~"tmp/cloud-type", "Altocumulus");
-setprop(lw~"tmp/alt", 12000.0);
-setprop(lw~"tmp/nx",5);
-setprop(lw~"tmp/xoffset",800.0);
-setprop(lw~"tmp/xedge", 0.2);
-setprop(lw~"tmp/ny",15);
-setprop(lw~"tmp/yoffset",800.0);
-setprop(lw~"tmp/yedge", 0.2);
-setprop(lw~"tmp/dir",0.0);
-setprop(lw~"tmp/tri", 1.0);
-setprop(lw~"tmp/rnd-pos-x",400.0);
-setprop(lw~"tmp/rnd-pos-y",400.0);
-setprop(lw~"tmp/rnd-alt", 300.0);
-setprop(lw~"tmp/conv-strength", 1);
-setprop(lw~"tmp/conv-size", 15.0);
-setprop(lw~"tmp/conv-alt", 2000.0);
-setprop(lw~"tmp/bar-alt", 3500.0);
-setprop(lw~"tmp/bar-n", 150.0);
-setprop(lw~"tmp/bar-dir", 0.0);
-setprop(lw~"tmp/bar-dist", 5.0);
-setprop(lw~"tmp/bar-size", 10.0);
-setprop(lw~"tmp/scloud-type", "Altocumulus");
-setprop(lw~"tmp/scloud-subtype", "small");
+# setprop(lw~"tmp/cloud-type", "Altocumulus");
+# setprop(lw~"tmp/alt", 12000.0);
+# setprop(lw~"tmp/nx",5);
+# setprop(lw~"tmp/xoffset",800.0);
+# setprop(lw~"tmp/xedge", 0.2);
+# setprop(lw~"tmp/ny",15);
+# setprop(lw~"tmp/yoffset",800.0);
+# setprop(lw~"tmp/yedge", 0.2);
+# setprop(lw~"tmp/dir",0.0);
+# setprop(lw~"tmp/tri", 1.0);
+# setprop(lw~"tmp/rnd-pos-x",400.0);
+# setprop(lw~"tmp/rnd-pos-y",400.0);
+# setprop(lw~"tmp/rnd-alt", 300.0);
+# setprop(lw~"tmp/conv-strength", 1);
+# setprop(lw~"tmp/conv-size", 15.0);
+# setprop(lw~"tmp/conv-alt", 2000.0);
+# setprop(lw~"tmp/bar-alt", 3500.0);
+# setprop(lw~"tmp/bar-n", 150.0);
+# setprop(lw~"tmp/bar-dir", 0.0);
+# setprop(lw~"tmp/bar-dist", 5.0);
+# setprop(lw~"tmp/bar-size", 10.0);
+# setprop(lw~"tmp/scloud-type", "Altocumulus");
+# setprop(lw~"tmp/scloud-subtype", "small");
 setprop(lw~"tmp/scloud-lat",getprop("position/latitude-deg"));
 setprop(lw~"tmp/scloud-lon",getprop("position/longitude-deg"));
-setprop(lw~"tmp/scloud-alt", 5000.0);
-setprop(lw~"tmp/scloud-dir", 0.0);
-setprop(lw~"tmp/layer-type","Nimbus");
-setprop(lw~"tmp/layer-rx",10.0);
-setprop(lw~"tmp/layer-ry",10.0);
-setprop(lw~"tmp/layer-phi",0.0);
-setprop(lw~"tmp/layer-alt",3000.0);
-setprop(lw~"tmp/layer-thickness",500.0);
-setprop(lw~"tmp/layer-density",1.0);
-setprop(lw~"tmp/layer-edge",0.2);
-setprop(lw~"tmp/layer-rain-flag",1);
-setprop(lw~"tmp/layer-rain-density",1.0);
-setprop(lw~"tmp/box-x-m",600.0);
-setprop(lw~"tmp/box-y-m",600.0);
-setprop(lw~"tmp/box-alt-ft",300.0);
-setprop(lw~"tmp/box-n",10);
-setprop(lw~"tmp/box-core-fraction",0.4);
-setprop(lw~"tmp/box-core-offset",0.2);
-setprop(lw~"tmp/box-core-height",1.4);
-setprop(lw~"tmp/box-core-n",3);
-setprop(lw~"tmp/box-bottom-fraction",0.9);
-setprop(lw~"tmp/box-bottom-thickness",0.5);
-setprop(lw~"tmp/box-bottom-n",12);
-setprop(lw~"tmp/tile-type", "High-pressure");
-setprop(lw~"tmp/tile-orientation-deg", 260.0);
-setprop(lw~"tmp/windspeed-kt", 8.0);
-setprop(lw~"tmp/gust-frequency-hz", 0.0);
-setprop(lw~"tmp/gust-relative-strength",0.0);
-setprop(lw~"tmp/gust-angular-variation-deg",0.0);
-setprop(lw~"tmp/tile-alt-offset-ft", 0.0);
+# setprop(lw~"tmp/scloud-alt", 5000.0);
+# setprop(lw~"tmp/scloud-dir", 0.0);
+# setprop(lw~"tmp/layer-type","Nimbus");
+# setprop(lw~"tmp/layer-rx",10.0);
+# setprop(lw~"tmp/layer-ry",10.0);
+# setprop(lw~"tmp/layer-phi",0.0);
+# setprop(lw~"tmp/layer-alt",3000.0);
+# setprop(lw~"tmp/layer-thickness",500.0);
+# setprop(lw~"tmp/layer-density",1.0);
+# setprop(lw~"tmp/layer-edge",0.2);
+# setprop(lw~"tmp/layer-rain-flag",1);
+# setprop(lw~"tmp/layer-rain-density",1.0);
+# setprop(lw~"tmp/box-x-m",600.0);
+# setprop(lw~"tmp/box-y-m",600.0);
+# setprop(lw~"tmp/box-alt-ft",300.0);
+# setprop(lw~"tmp/box-n",10);
+# setprop(lw~"tmp/box-core-fraction",0.4);
+# setprop(lw~"tmp/box-core-offset",0.2);
+# setprop(lw~"tmp/box-core-height",1.4);
+# setprop(lw~"tmp/box-core-n",3);
+# setprop(lw~"tmp/box-bottom-fraction",0.9);
+# setprop(lw~"tmp/box-bottom-thickness",0.5);
+# setprop(lw~"tmp/box-bottom-n",12);
+# setprop(lw~"tmp/tile-type", "High-pressure");
+# setprop(lw~"tmp/tile-orientation-deg", 260.0);
+# setprop(lw~"tmp/windspeed-kt", 8.0);
+# setprop(lw~"tmp/gust-frequency-hz", 0.0);
+# setprop(lw~"tmp/gust-relative-strength",0.0);
+# setprop(lw~"tmp/gust-angular-variation-deg",0.0);
+# setprop(lw~"tmp/tile-alt-offset-ft", 0.0);
 setprop(lw~"tmp/tile-alt-median-ft",0.0);
 setprop(lw~"tmp/tile-alt-min-ft",0.0);
-setprop(lw~"tmp/tile-management", "realistic weather");
-setprop(lw~"tmp/presampling-flag", 1);
-setprop(lw~"tmp/asymmetric-tile-loading-flag", 0);
+# setprop(lw~"tmp/tile-management", "realistic weather");
+# setprop(lw~"tmp/asymmetric-tile-loading-flag", 0);
 setprop(lw~"tmp/last-reading-pos-del",0);
 setprop(lw~"tmp/last-reading-pos-mod",0);
 setprop(lw~"tmp/thread-status", "idle");
@@ -4251,47 +4333,48 @@ setprop(lw~"tmp/convective-status", "idle");
 setprop(lw~"tmp/presampling-status", "idle");
 setprop(lw~"tmp/buffer-status", "idle");
 setprop(lw~"tmp/buffer-tile-index", 0);
-setprop(lw~"tmp/FL0-wind-from-heading-deg",260.0);
-setprop(lw~"tmp/FL0-windspeed-kt",8.0);
-setprop(lw~"tmp/FL50-wind-from-heading-deg",262.0);
-setprop(lw~"tmp/FL50-windspeed-kt",11.0);
-setprop(lw~"tmp/FL100-wind-from-heading-deg",264.0);
-setprop(lw~"tmp/FL100-windspeed-kt",16.0);
-setprop(lw~"tmp/FL180-wind-from-heading-deg",265.0);
-setprop(lw~"tmp/FL180-windspeed-kt",24.0);
-setprop(lw~"tmp/FL240-wind-from-heading-deg",269.0);
-setprop(lw~"tmp/FL240-windspeed-kt",35.0);
-setprop(lw~"tmp/FL300-wind-from-heading-deg",273.0);
-setprop(lw~"tmp/FL300-windspeed-kt",45.0);
-setprop(lw~"tmp/FL340-wind-from-heading-deg",274.0);
-setprop(lw~"tmp/FL340-windspeed-kt",50.0);
-setprop(lw~"tmp/FL390-wind-from-heading-deg",273.0);
-setprop(lw~"tmp/FL390-windspeed-kt",56.0);
-setprop(lw~"tmp/FL450-wind-from-heading-deg",272.0);
-setprop(lw~"tmp/FL450-windspeed-kt",65.0);
+#setprop(lw~"tmp/FL0-wind-from-heading-deg",260.0);
+#setprop(lw~"tmp/FL0-windspeed-kt",8.0);
+#setprop(lw~"tmp/FL50-wind-from-heading-deg",262.0);
+#setprop(lw~"tmp/FL50-windspeed-kt",11.0);
+#setprop(lw~"tmp/FL100-wind-from-heading-deg",264.0);
+#setprop(lw~"tmp/FL100-windspeed-kt",16.0);
+#setprop(lw~"tmp/FL180-wind-from-heading-deg",265.0);
+#setprop(lw~"tmp/FL180-windspeed-kt",24.0);
+#setprop(lw~"tmp/FL240-wind-from-heading-deg",269.0);
+#setprop(lw~"tmp/FL240-windspeed-kt",35.0);
+#setprop(lw~"tmp/FL300-wind-from-heading-deg",273.0);
+#setprop(lw~"tmp/FL300-windspeed-kt",45.0);
+#setprop(lw~"tmp/FL340-wind-from-heading-deg",274.0);
+#setprop(lw~"tmp/FL340-windspeed-kt",50.0);
+#setprop(lw~"tmp/FL390-wind-from-heading-deg",273.0);
+#setprop(lw~"tmp/FL390-windspeed-kt",56.0);
+#setprop(lw~"tmp/FL450-wind-from-heading-deg",272.0);
+#setprop(lw~"tmp/FL450-windspeed-kt",65.0);
 setprop(lw~"tmp/ipoint-latitude-deg",getprop("position/latitude-deg"));
 setprop(lw~"tmp/ipoint-longitude-deg",getprop("position/longitude-deg"));
 
 
 # set config values
 
-setprop(lw~"config/distance-to-load-tile-m",39000.0);
-setprop(lw~"config/distance-to-remove-tile-m",39500.0);
-setprop(lw~"config/detailed-clouds-flag",1);
-setprop(lw~"config/dynamics-flag",0);
-setprop(lw~"config/thermal-properties",1.0);
-setprop(lw~"config/wind-model","constant");
-setprop(lw~"config/buffer-flag",1);
-setprop(lw~"config/asymmetric-reduction",0.7);
-setprop(lw~"config/clouds-visible-range-m",30000.0);
-setprop(lw~"config/asymmetric-buffering-flag",0);
-setprop(lw~"config/asymmetric-buffering-reduction",0.3);
-setprop(lw~"config/asymmetric-buffering-angle-deg",90.0);
-setprop(lw~"config/clouds-in-dynamics-loop",250);
-setprop(lw~"config/debug-output-flag",0);
-setprop(lw~"config/generate-thermal-lift-flag", 0);
-setprop(lw~"config/dynamical-convection-flag", 0);
-setprop(lw~"config/thread-flag", 1);
+# setprop(lw~"config/distance-to-load-tile-m",39000.0);
+# setprop(lw~"config/distance-to-remove-tile-m",39500.0);
+# setprop(lw~"config/detailed-clouds-flag",1);
+# setprop(lw~"config/dynamics-flag",0);
+# setprop(lw~"config/thermal-properties",1.0);
+# setprop(lw~"config/wind-model","constant");
+# setprop(lw~"config/buffer-flag",1);
+# setprop(lw~"config/asymmetric-reduction",0.7);
+# setprop(lw~"config/clouds-visible-range-m",30000.0);
+# setprop(lw~"config/asymmetric-buffering-flag",0);
+# setprop(lw~"config/asymmetric-buffering-reduction",0.3);
+# setprop(lw~"config/asymmetric-buffering-angle-deg",90.0);
+# setprop(lw~"config/clouds-in-dynamics-loop",250);
+# setprop(lw~"config/debug-output-flag",0);
+# setprop(lw~"config/generate-thermal-lift-flag", 0);
+# setprop(lw~"config/dynamical-convection-flag", 0);
+# setprop(lw~"config/thread-flag", 1);
+# setprop(lw~"config/presampling-flag", 1);
 
 # set the default loop flags to loops inactive
 
diff --git a/Nasal/weather_tile_management.nas b/Nasal/weather_tile_management.nas
index 2c3ab7d19..9488c5634 100644
--- a/Nasal/weather_tile_management.nas
+++ b/Nasal/weather_tile_management.nas
@@ -62,6 +62,35 @@ if ((local_weather.metar_flag == 1) and (getprop(lw~"METAR/station-id") != getpr
 	weather_tiles.set_METAR_weather_station();
 	}
 
+# compute the averaged framerate and see if cloud visibility needs to be adjusted
+
+if (local_weather.fps_control_flag == 1) 
+	{
+	local_weather.fps_average = local_weather.fps_sum/local_weather.fps_samples;
+
+	# print("Average framerate: ", local_weather.fps_average);
+	
+	local_weather.fps_sum = 0.0;
+	local_weather.fps_samples = 0;
+
+	if (local_weather.fps_average > 1.1 * local_weather.target_framerate)
+		{
+		var target_cloud_view_distance = cloud_view_distance * 1.1;
+		if (target_cloud_view_distance > 45000.0)
+			{target_cloud_view_distance = 45000.0;}	
+		setprop(lw~"config/clouds-visible-range-m", target_cloud_view_distance);	
+		}
+	if (local_weather.fps_average < 0.9 * local_weather.target_framerate)
+		{
+		var target_cloud_view_distance = cloud_view_distance * 0.9;
+		if (target_cloud_view_distance < 15000.0)
+			{target_cloud_view_distance = 15000.0;}	
+		setprop(lw~"config/clouds-visible-range-m", target_cloud_view_distance);	
+		}
+
+	}
+
+
 
 
 foreach (var t; tNode) {
@@ -441,7 +470,7 @@ if (getprop(lw~"tmp/tile-management") == "repeat tile")
 	else if (code == "cold_sector") {weather_tiles.set_cold_sector_tile();}
 	else if (code == "warm_sector") {weather_tiles.set_warm_sector_tile();}
 	else if (code == "tropical_weather") {weather_tiles.set_tropical_weather_tile();}
-	#else if (code == "test") {weather_tiles.set_4_8_stratus_tile;}
+	else if (code == "test") {weather_tiles.set_4_8_stratus_tile();}
 	else 
 		{
 		print("Repeat tile not implemented with this tile type!");
@@ -450,50 +479,50 @@ if (getprop(lw~"tmp/tile-management") == "repeat tile")
 	}
 else if (getprop(lw~"tmp/tile-management") == "realistic weather")
 	{
-	var rn = rand();
+	var rn = rand() * getprop(lw~"config/large-scale-persistence");
 	
 	if (code == "low_pressure_core") 
 		{
-		if (rn > 0.2) {weather_tiles.set_low_pressure_core_tile();}
+		if (rn > 0.1) {weather_tiles.set_low_pressure_core_tile();}
 		else {weather_tiles.set_low_pressure_tile();}
 		}
 	else if (code == "low_pressure") 
 		{
-		if (rn > 0.2) {weather_tiles.set_low_pressure_tile();}
-		else if (rn > 0.1) {weather_tiles.set_low_pressure_core_tile();}
+		if (rn > 0.1) {weather_tiles.set_low_pressure_tile();}
+		else if (rn > 0.05) {weather_tiles.set_low_pressure_core_tile();}
 		else {weather_tiles.set_low_pressure_border_tile();}
 		}
 	else if (code == "low_pressure_border") 
 		{
-		if (rn > 0.4) {weather_tiles.set_low_pressure_border_tile();}
-		else if (rn > 0.3) {weather_tiles.set_cold_sector_tile();}
-		else if (rn > 0.2) {weather_tiles.set_warm_sector_tile();}
-		else if (rn > 0.1) {weather_tiles.set_low_pressure_tile();}
+		if (rn > 0.2) {weather_tiles.set_low_pressure_border_tile();}
+		else if (rn > 0.15) {weather_tiles.set_cold_sector_tile();}
+		else if (rn > 0.1) {weather_tiles.set_warm_sector_tile();}
+		else if (rn > 0.05) {weather_tiles.set_low_pressure_tile();}
 		else {weather_tiles.set_high_pressure_border_tile();}
 		}
 	else if (code == "high_pressure_border") 
 		{
-		if (rn > 0.4) {weather_tiles.set_high_pressure_border_tile();}
-		else if (rn > 0.3) {weather_tiles.set_cold_sector_tile();}
-		else if (rn > 0.2) {weather_tiles.set_warm_sector_tile();}
-		else if (rn > 0.1) {weather_tiles.set_high_pressure_tile();}
+		if (rn > 0.2) {weather_tiles.set_high_pressure_border_tile();}
+		else if (rn > 0.15) {weather_tiles.set_cold_sector_tile();}
+		else if (rn > 0.1) {weather_tiles.set_warm_sector_tile();}
+		else if (rn > 0.05) {weather_tiles.set_high_pressure_tile();}
 		else {weather_tiles.set_low_pressure_border_tile();}
 		}
 	else if (code == "high_pressure") 
 		{
-		if (rn > 0.2) {weather_tiles.set_high_pressure_tile();}
-		else if (rn > 0.1) {weather_tiles.set_high_pressure_border_tile();}
+		if (rn > 0.1) {weather_tiles.set_high_pressure_tile();}
+		else if (rn > 0.05) {weather_tiles.set_high_pressure_border_tile();}
 		else {weather_tiles.set_high_pressure_core_tile();}
 		}
 	else if (code == "high_pressure_core") 
 		{
-		if (rn > 0.2) {weather_tiles.set_high_pressure_core_tile();}
+		if (rn > 0.1) {weather_tiles.set_high_pressure_core_tile();}
 		else {weather_tiles.set_high_pressure_tile();}
 		}
 	else if (code == "cold_sector") 
 		{
-		if (rn > 0.3) {weather_tiles.set_cold_sector_tile();}
-		else if (rn > 0.2) 
+		if (rn > 0.15) {weather_tiles.set_cold_sector_tile();}
+		else if (rn > 0.1) 
 			{
 			if ((dir_index ==0) or (dir_index ==1) or (dir_index==2))
 				{weather_tiles.set_warmfront1_tile();}
@@ -502,13 +531,13 @@ else if (getprop(lw~"tmp/tile-management") == "realistic weather")
 			else if ((dir_index ==6) or (dir_index ==7) or (dir_index==8))
 				{weather_tiles.set_coldfront_tile();}
 			}
-		else if (rn > 0.1) {weather_tiles.set_low_pressure_border_tile();}
+		else if (rn > 0.05) {weather_tiles.set_low_pressure_border_tile();}
 		else {weather_tiles.set_high_pressure_border_tile();}
 		}
 	else if (code == "warm_sector") 
 		{
-		if (rn > 0.3) {weather_tiles.set_warm_sector_tile();}
-		else if (rn > 0.2) 
+		if (rn > 0.15) {weather_tiles.set_warm_sector_tile();}
+		else if (rn > 0.1) 
 			{
 			if ((dir_index ==0) or (dir_index ==1) or (dir_index==2))
 				{weather_tiles.set_coldfront_tile();}
@@ -517,7 +546,7 @@ else if (getprop(lw~"tmp/tile-management") == "realistic weather")
 			else if ((dir_index ==6) or (dir_index ==7) or (dir_index==8))
 				{weather_tiles.set_warmfront4_tile();}
 			}
-		else if (rn > 0.1) {weather_tiles.set_low_pressure_border_tile();}
+		else if (rn > 0.05) {weather_tiles.set_low_pressure_border_tile();}
 		else {weather_tiles.set_high_pressure_border_tile();}
 		}
 	else if (code == "warmfront1")
@@ -525,7 +554,12 @@ else if (getprop(lw~"tmp/tile-management") == "realistic weather")
 		if ((dir_index ==0) or (dir_index ==1) or (dir_index==2))
 			{weather_tiles.set_warmfront2_tile();}
 		else if ((dir_index ==3) or (dir_index ==5))
-			{weather_tiles.set_warmfront1_tile();}
+			{
+			if (rand() > 0.15)
+				{weather_tiles.set_warmfront1_tile();}
+			else
+				{weather_tiles.set_high_pressure_border_tile();}
+			}
 		else if ((dir_index ==6) or (dir_index ==7) or (dir_index==8))
 			{weather_tiles.set_cold_sector_tile();}
 		}
@@ -534,7 +568,12 @@ else if (getprop(lw~"tmp/tile-management") == "realistic weather")
 		if ((dir_index ==0) or (dir_index ==1) or (dir_index==2))
 			{weather_tiles.set_warmfront3_tile();}
 		if ((dir_index ==3) or (dir_index ==5))
-			{weather_tiles.set_warmfront2_tile();}
+			{
+			if (rand() > 0.15)			
+				{weather_tiles.set_warmfront2_tile();}
+			else
+				{weather_tiles.set_high_pressure_border_tile();}
+			}
 		if ((dir_index ==6) or (dir_index ==7) or (dir_index==8))
 			{weather_tiles.set_warmfront1_tile();}
 		}
@@ -543,7 +582,12 @@ else if (getprop(lw~"tmp/tile-management") == "realistic weather")
 		if ((dir_index ==0) or (dir_index ==1) or (dir_index==2))
 			{weather_tiles.set_warmfront4_tile();}
 		if ((dir_index ==3) or (dir_index ==5))
-			{weather_tiles.set_warmfront3_tile();}
+			{
+			if (rand() > 0.15)
+				{weather_tiles.set_warmfront3_tile();}
+			else
+				{weather_tiles.set_low_pressure_border_tile();}
+			}
 		if ((dir_index ==6) or (dir_index ==7) or (dir_index==8))
 			{weather_tiles.set_warmfront2_tile();}
 		}
@@ -552,7 +596,12 @@ else if (getprop(lw~"tmp/tile-management") == "realistic weather")
 		if ((dir_index ==0) or (dir_index ==1) or (dir_index==2))
 			{weather_tiles.set_warm_sector_tile();}
 		if ((dir_index ==3) or (dir_index ==5))
-			{weather_tiles.set_warmfront4_tile();}
+			{
+			if (rand() > 0.15)			
+				{weather_tiles.set_warmfront4_tile();}
+			else
+				{weather_tiles.set_low_pressure_tile();}
+			}
 		if ((dir_index ==6) or (dir_index ==7) or (dir_index==8))
 			{weather_tiles.set_warmfront3_tile();}
 		}
@@ -561,7 +610,12 @@ else if (getprop(lw~"tmp/tile-management") == "realistic weather")
 		if ((dir_index ==0) or (dir_index ==1) or (dir_index==2))
 			{weather_tiles.set_cold_sector_tile();}
 		else if ((dir_index ==3) or (dir_index ==5))
-			{weather_tiles.set_coldfront_tile();}
+			{	
+			if (rand() > 0.15)
+				{weather_tiles.set_coldfront_tile();}
+			else
+				{weather_tiles.set_high_pressure_border_tile();}
+			}
 		else if ((dir_index ==6) or (dir_index ==7) or (dir_index==8))
 			{weather_tiles.set_warm_sector_tile();}
 		}
@@ -1379,8 +1433,7 @@ var lon_to_m = 0.0; #local_weather.lon_to_m;
 var m_to_lon = 0.0; # local_weather.m_to_lon;
 var lw = "/local-weather/";
 
-var cloud_view_distance = 20000.0;
-
+var cloud_view_distance = getprop(lw~"config/clouds-visible-range-m");
 
 var modelArrays = [];
 var active_tile_list = [];
diff --git a/Nasal/weather_tiles.nas b/Nasal/weather_tiles.nas
index 6922da128..e48a952d5 100644
--- a/Nasal/weather_tiles.nas
+++ b/Nasal/weather_tiles.nas
@@ -29,7 +29,10 @@ var current_code = getprop(lw~"tiles/code");
 var dir_index = getprop(lw~"tiles/tmp/dir-index");	
 props.globals.getNode(lw~"tiles").getChild("tile",dir_index).getNode("code").setValue(current_code);
 
+#print(current_code, getprop(lw~"tiles/tmp/code"));
 
+if (current_code != getprop(lw~"tiles/tmp/code"))
+	{weather_tiles.rnd_store = rand();}
 
 # generate a handling array for models
 
@@ -95,7 +98,7 @@ calc_geo(blat);
 
 local_weather.set_weather_station(blat, blon, alt_offset, 20000.0, 14.0, 12.0, 29.78);
 
-create_8_8_nimbus_var3(blat, blon, 2000.0 + alt_offset+local_weather.cloud_vertical_size_map["Nimbus"] * 0.5 * m_to_ft, 0.0);
+# create_8_8_nimbus_var3(blat, blon, 2000.0 + alt_offset+local_weather.cloud_vertical_size_map["Nimbus"] * 0.5 * m_to_ft, 0.0);
 
 #create_2_8_sstratus_streak(blat, blon,5000.0,0.0);
 
@@ -105,7 +108,7 @@ create_8_8_nimbus_var3(blat, blon, 2000.0 + alt_offset+local_weather.cloud_verti
 
 # create_2_8_cirrocumulus(blat, blon, 6000.0, 0.0);
 
-#create_detailed_stratocumulus_bank(blat, blon,5000.0+alt_offset,0.0);
+create_detailed_small_stratocumulus_bank(blat, blon,3000.0+alt_offset,0.0);
 
 #create_4_8_altocumulus_perlucidus(blat, blon, 10000.0, 0.0);
 
@@ -151,7 +154,7 @@ calc_geo(blat);
 
 # get probabilistic values for the weather parameters
 
-var vis = 35000.0 + rand() * 20000.0;
+var vis = 30000.0 + rand() * 15000.0;
 var T = 20.0 + rand() * 10.0;
 var spread = 5.0 + 3.0 * rand();
 var D = T - spread;
@@ -164,11 +167,16 @@ local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_i
 var alt = spread * 1000;
 var strength = 0.0;
 
+
 var rn = rand();
 
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
 
 
-if (rn > 0.66)
+if (rn > 0.8)
 	{
 	# cloud scenario 1: weak cumulus development and blue thermals
 
@@ -186,7 +194,7 @@ if (rn > 0.66)
 		}
 	
 	}
-else if (rn > 0.33)
+else if (rn > 0.6)
 	{
 	# cloud scenario 2: some Cirrocumulus patches
 	
@@ -194,8 +202,10 @@ else if (rn > 0.33)
 	local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
 
 	create_2_8_cirrocumulus(blat, blon, alt + alt_offset + 5000.0, alpha);
+
+	create_2_8_cirrus(blat, blon, alt + alt_offset + 35000.0, alpha);
 	}
-else if (rn > 0.0)
+else if (rn > 0.4)
 	{
 	# cloud scenario 3: Cirrostratus undulatus over weak cumulus
 		
@@ -204,6 +214,27 @@ else if (rn > 0.0)
 
 	create_4_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 32000.0, alpha);
 	}
+else if (rn > 0.2)
+	{
+	# cloud scenario 4: Cirrostratus undulatus streak
+
+	strength = rand() * 0.03;
+	local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
+
+	create_1_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 32000.0, alpha);
+	}
+else if (rn > 0.0)
+	{
+	# cloud scenario 5: Cirrus
+
+	create_2_8_cirrus(blat, blon, alt + alt_offset + 35000.0, alpha);
+
+
+	create_1_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 28000.0, alpha);
+
+
+	create_1_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 28000.0, alpha);
+	}
 
 
 # store convective altitude and strength
@@ -261,9 +292,14 @@ var strength = 0.0;
 
 var rn = rand();
 
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
 
+# rn = 0.1;
 
-if (rn > 0.75)
+if (rn > 0.8)
 	{
 	# cloud scenario 1: possible Cirrus over Cumulus
 	strength = 0.2 + rand() * 0.4;
@@ -285,7 +321,7 @@ if (rn > 0.75)
 		}	
 
 	}
-else if (rn > 0.5)
+else if (rn > 0.6)
 	{
 	# cloud scenario 2: Cirrostratus over weak Cumulus
 
@@ -295,7 +331,7 @@ else if (rn > 0.5)
 	create_2_8_cirrostratus(blat, blon, alt+alt_offset+25000.0, alpha);
 	}
 
-else if (rn > 0.25)
+else if (rn > 0.4)
 	{
 	# cloud scenario 3: Cirrocumulus sheet over Cumulus
 
@@ -310,7 +346,7 @@ else if (rn > 0.25)
 	compat_layer.create_cloud(path, blat + get_lat(x,y,phi), blon+get_lon(x,y,phi),  alt + alt_offset +24000,alpha);
 
 	}
-else if (rn > 0.0)
+else if (rn > 0.2)
 	{
 	# cloud scenario 4: Cirrostratus undulatus over weak Cumulus
 
@@ -319,6 +355,17 @@ else if (rn > 0.0)
 
 	create_4_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 25000.0, alpha);
 	}
+else if (rn > 0.0)
+	{
+	# cloud scenario 5: some scattered Altocumuli over Cumulus
+
+	strength = 0.25 + rand() * 0.1;
+	local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
+
+	create_1_8_altocumulus_scattered(blat, blon, alt+alt_offset+10000.0, alpha);	
+
+	create_1_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 25000.0, alpha);
+	}
 
 # store convective altitude and strength
 
@@ -375,6 +422,10 @@ var strength = 0.0;
 
 var rn = rand();
 
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
 
 if (rn > 0.875)
 	{
@@ -476,6 +527,7 @@ else if (rn > 0.0)
 	
 	create_4_8_altocumulus_perlucidus(blat, blon, alt + 10000.0 + alt_offset, alpha);
 
+	create_2_8_cirrus(blat, blon, alt + 30000.0 + alt_offset, alpha);
 	}
 
 
@@ -507,10 +559,8 @@ var lon = 0.0;
 var alpha = getprop(lw~"tmp/tile-orientation-deg");
 var phi = alpha * math.pi/180.0;
 
-if (getprop(lw~"tmp/presampling-flag") == 0)
-	{var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");}
-else
-	{var alt_offset = getprop(lw~"tmp/tile-alt-layered-ft");}
+
+var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");
 
 
 # get tile center coordinates
@@ -538,76 +588,87 @@ var strength = 0.0;
 
 var rn = rand();
 
-if (rn > 0.875)
-	{
-	# cloud scenario 1: a low 4/8 stratus patches, thin patches above
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
 
-	alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft;
-	create_4_8_stratus_patches(blat, blon, alt+alt_offset,alpha);
-	create_4_8_tstratus_patches(blat, blon, alt+alt_offset+6000,alpha);
-	}
-else if (rn > 0.75)
-	{
-	# cloud scenario 2: a low 4/8 undulatus, thin patches above
+# rn = 0.1;
 
-	alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft;
-	create_4_8_sstratus_undulatus(blat, blon, alt+alt_offset,alpha);
-	create_2_8_tstratus(blat, blon, alt+alt_offset+7000,alpha);
-	}
-else if (rn > 0.625)
+if (rn > 0.857)
 	{
-	# cloud scenario 3: low Stratocumulus
+	# cloud scenario 1: low Stratocumulus, thin streaks above
+
+	strength = 0.05 + rand() * 0.1;
+	local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
 
-	# alt = alt + local_weather.cloud_vertical_size_map["Cumulus"] * 0.5 * m_to_ft;
 	create_detailed_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
-	create_2_8_sstratus(blat, blon, alt+alt_offset+6000,alpha);
-	create_2_8_tstratus(blat, blon, alt+alt_offset+9000,alpha);
-	}
-else if (rn > 0.5)
-	{
-	# cloud scenario 4: dense low Stratocumulus
 
-	# alt = alt + local_weather.cloud_vertical_size_map["Cumulus"] * 0.5 * m_to_ft;
-	create_detailed_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
-	create_detailed_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
-	create_2_8_sstratus(blat, blon, alt+alt_offset+8000,alpha);
+	create_4_8_alttstratus_streaks(blat, blon, alt+alt_offset+4000.0,alpha);
 	}
-else if (rn > 375)
+else if (rn > 0.714)
 	{
-	# cloud scenario 5: Cirrocumulus over 4/8 Stratus
+	# cloud scenario 2: weak Cumulus, Stratus undulatus above
 
+	strength = 0.15 + rand() * 0.15;
+	local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
+	
+	create_6_8_tstratus_undulatus(blat, blon, alt+alt_offset+4000.0,alpha);
+
+	create_2_8_alttstratus(blat, blon, alt+alt_offset+7000.0,alpha);
+	}
+else if (rn > 0.571)
+	{
+	# cloud scenario 3: Stratocumulus banks with patches above
+
+	create_detailed_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
+	create_detailed_small_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
+
+	create_4_8_alttstratus_patches(blat, blon, alt+alt_offset+4000.0,alpha);
+	}
+else if (rn > 0.428)
+	{
+	# cloud scenario 4: structured Stratus
+	
 	alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft;
 	create_4_8_sstratus_patches(blat, blon, alt+alt_offset,alpha);
 
-	create_4_8_cirrocumulus_bank(blat, blon, alt+alt_offset + 12000.0, alpha);
+	create_2_8_alttstratus(blat, blon, alt+alt_offset+7000.0,alpha);
 	}
-else if (rn > 0.250)
+else if (rn > 0.285)
 	{
-	# cloud scenario 6: Cirrostratus over 4/8 Stratus undulatus
+	# cloud scenario 5: Stratus blending with Cumulus with Cirrocumulus above
+	
+	strength = 0.1 + rand() * 0.1;
+	local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
 
-	alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft;
-	
-	create_6_8_stratus_undulatus(blat, blon, alt+alt_offset,alpha);
-	
-	create_4_8_cirrostratus_undulatus(blat, blon, alt+alt_offset+24000,alpha);
+	create_4_8_tstratus_patches(blat, blon, alt+alt_offset,alpha);
+
+	create_4_8_cirrocumulus_undulatus(blat, blon, alt+alt_offset + 12000.0,alpha);
 	}
-else if (rn > 0.125)
+else if (rn > 0.142)
 	{
-	# cloud scenario 7: thin stratus
+	# cloud scenario 6: small Stratocumulus banks
 	
-	create_4_8_alttstratus_streaks(blat, blon, alt+alt_offset,alpha);
+	create_detailed_small_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
+	create_detailed_small_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
 
-	create_2_8_sstratus(blat, blon, alt+alt_offset+6000,alpha);
+	create_4_8_tstratus_patches(blat, blon, alt+alt_offset,alpha);
+
+	create_2_8_cirrostratus(blat, blon, alt+alt_offset + 25000.0,alpha);
 	}
-else if (rn > 0.0)
+else
 	{
-	# cloud scenario 8: thin stratus
-	
-	create_4_8_alttstratus_patches(blat, blon, alt+alt_offset,alpha);
+	# cloud scenario 7: blended structured and unstructured Stratiform clouds
 
-	create_4_8_cirrostratus_undulatus(blat, blon, alt+alt_offset+25000,alpha);
+	create_4_8_tstratus_patches(blat, blon, alt+alt_offset,alpha);
+	create_4_8_sstratus_patches(blat, blon, alt+alt_offset,alpha);
+
+	create_2_8_cirrostratus(blat, blon, alt+alt_offset + 25000.0,alpha);
 	}
 
+
+
 # store convective altitude and strength
 
 append(weather_dynamics.tile_convective_altitude,alt);
@@ -666,7 +727,10 @@ var strength = 0.0;
 
 var rn = rand();
 
-
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
 
 if (rn > 0.75)
 	{
@@ -784,18 +848,23 @@ var alt = spread * 1000.0 + local_weather.cloud_vertical_size_map["Nimbus"] * 0.
 var strength = 0.0;
 
 
-create_8_8_nimbus(blat, blon, alt+alt_offset, alpha);
+create_8_8_nimbus_rain(blat, blon, alt+alt_offset, alpha,0.4 + rand()*0.2);
 
 # and a precipitation layer below, more rain in the center of the tile
 
-local_weather.create_effect_volume(3, blat, blon, 20000.0, 20000.0, alpha, 0.0, alt + alt_offset, 3000.0, 0.3, -1, -1, -1,0 ,0.95);
-local_weather.create_effect_volume(3, blat , blon, 16000.0, 16000.0, alpha, 0.0, alt + alt_offset - 300.0, 1500.0, 0.5, -1, -1, -1,0 ,0.8);
+#local_weather.create_effect_volume(3, blat, blon, 20000.0, 20000.0, alpha, 0.0, alt + alt_offset, 3000.0, 0.3, -1, -1, -1,0 ,0.95);
+#local_weather.create_effect_volume(3, blat , blon, 16000.0, 16000.0, alpha, 0.0, alt + alt_offset - 300.0, 1500.0, 0.5, -1, -1, -1,0 ,0.8);
 
 
 # and some broken Stratus cover above
 
 var rn = rand();
 
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
+
 if (rn > 0.5){create_4_8_stratus_patches(blat, blon, alt+alt_offset+3000.0, alpha);}
 else {create_4_8_stratus(blat, blon, alt+alt_offset+3000.0, alpha);}
 
@@ -851,6 +920,11 @@ var strength = 0.0;
 
 var rn = rand();
 
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
+
 #rn = 0.1;
 
 if (rn > 0.5)
@@ -935,6 +1009,10 @@ var strength = 0.0;
 
 var rn = rand();
 
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
 
 if (rn > 0.8)
 	{
@@ -1054,6 +1132,7 @@ var t_factor = 0.5 * (1.0-math.cos((t * sec_to_rad)-0.9));
 
 var rn = rand();
 
+
 if (rn > (t_factor * t_factor * t_factor * t_factor)) # call a normal convective cloud system
 {
 strength = 1.0 + rand() * 0.2;
@@ -1067,6 +1146,11 @@ else
 
 rn = rand();
 
+if (rand() < small_scale_persistence)
+	{rn = rnd_store;}
+else
+	{rnd_store = rn;}
+
 if (rn > 0.2)
 	{
 	# cloud scenario 1: 1-2 medium sized storms
@@ -2142,10 +2226,10 @@ var set_METAR_weather_station = func {
 
 	var gust_angvar = 0.5 * weather_tile_management.relangle(wind_range_from, wind_range_to);
 	
-	if (gust_strength > 0.0)
+	if ((gust_strength > 0.0) or (gust_angvar > 0.0))
 		{
 		var gust_relative_strength = (gust_strength - windspeed)/windspeed;
-		setprop(lw~"tmp/gust-frequency-hz", 1.0);
+		setprop(lw~"tmp/gust-frequency-hz", 0.2 + rand()*0.8);
 		}
 	else
 		{
@@ -2436,12 +2520,16 @@ var create_4_8_tstratus_patches = func (lat, lon, alt, alpha) {
 
 var phi = alpha * math.pi/180.0;
 
-for (var i=0; i<16; i=i+1)
+for (var i=0; i<22; i=i+1)
 	{
 	var x = 2.0 * (rand()-0.5) * 18000;
 	var y = 2.0 * (rand()-0.5) * 18000;
 	var beta = (rand() -0.5) * 180.0;
-	local_weather.create_streak("Stratus (thin)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,300.0,4,950.0,0.2,500.0,6,950.0,0.2,500.0,alpha+beta,1.0);
+
+	var m = int(3 + rand() * 3);
+	var n =	int(3 + rand() * 5);
+
+	local_weather.create_streak("Stratus (thin)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,300.0,m,1000.0,0.2,500.0,n,1000.0,0.2,500.0,alpha+beta,1.0);
 
 	}
 
@@ -2452,12 +2540,14 @@ var create_4_8_sstratus_patches = func (lat, lon, alt, alpha) {
 
 var phi = alpha * math.pi/180.0;
 
-for (var i=0; i<16; i=i+1)
+for (var i=0; i<22; i=i+1)
 	{
 	var x = 2.0 * (rand()-0.5) * 18000;
 	var y = 2.0 * (rand()-0.5) * 18000;
 	var beta = (rand() -0.5) * 180.0;
-	local_weather.create_streak("Stratus (structured)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,300.0,4,950.0,0.2,500.0,6,950.0,0.2,500.0,alpha+beta,1.0);
+	var m = int(3 + rand() * 5);
+	var n = int(3 + rand() * 5);
+	local_weather.create_streak("Stratus (structured)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,300.0,m,1000.0,0.2,500.0,n,1000.0,0.2,500.0,alpha+beta,1.0);
 
 	}
 
@@ -2726,6 +2816,17 @@ for (var i=0; i<25; i=i+1)
 
 }
 
+var create_2_8_cirrus = func (lat, lon, alt, alpha) {
+
+var phi = alpha * math.pi/180.0;
+
+var x = 2.0 * (rand()-0.5) * 3000;
+var y = 2.0 * (rand()-0.5) * 3000; 
+	
+
+local_weather.create_streak("Cirrus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,1500.0,3,12000.0,0.0, 4000.0, 3,12000.0,0.0,4000.0,alpha,1.0);
+
+}
 
 var create_2_8_alttstratus = func (lat, lon, alt, alpha) {
 
@@ -2757,6 +2858,25 @@ for (var i=0; i<2; i=i+1)
 }
 
 
+var create_1_8_altocumulus_scattered = func (lat, lon, alt, alpha) {
+
+var phi = alpha * math.pi/180.0;
+
+
+local_weather.create_streak("Altocumulus",lat, lon, alt,1500.0,15,0.0,0.2,19000.0,15,0.0,0.2,19000.0,alpha ,0.0);
+
+for (var i=0; i<6; i=i+1)	
+{
+	var x = 2.0 * (rand()-0.5) * 14000;
+	var y = 2.0 * (rand()-0.5) * 14000;
+	var tri = 1.0 + rand();	
+
+	local_weather.create_streak("Altocumulus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,1500.0,10,750.0,0.1,800.0,4,550.0,0.1,500.0,alpha ,tri);
+	}
+
+}
+
+
 var create_1_8_cirrocumulus = func (lat, lon, alt, alpha) {
 
 var phi = alpha * math.pi/180.0;
@@ -2777,6 +2897,12 @@ for (var i = 0; i < 2; i = i + 1)
 }
 
 
+var create_1_8_cirrostratus_undulatus = func (lat, lon, alt, alpha) {
+
+local_weather.create_undulatus("Cirrostratus",lat, lon, alt,300.0,1,8000.0,0.0,400.0,40,1000.0,0.1,100.0, 1500.0, alpha,1.0);
+}
+
+
 var create_1_8_contrails = func (lat, lon, alt, alpha) {
 
 
@@ -2854,16 +2980,44 @@ var y = 2.0 * (rand()-0.5) * 6000;
 var tri = 1.5 + 1.5*rand();
 var beta = (rand() -0.5) * 60.0;
 
+var m = int(7 + rand() * 7);
+var n = int(9 + rand() * 7);
+
 var alt_offset = 0.5 * local_weather.cloud_vertical_size_map["Cumulus"] * ft_to_m;
 
-local_weather.create_streak("Stratocumulus",lat+get_lat(x,y+7500,phi), lon+get_lon(x,y+7500,phi), alt + alt_offset,500.0,12,1000.0,0.1,400.0,15,1000.0,0.1,400.0,alpha+90.0+beta,tri);
+local_weather.create_streak("Stratocumulus",lat+get_lat(x,y+7500,phi), lon+get_lon(x,y+7500,phi), alt + alt_offset,500.0,m,1100.0,0.1,400.0,n,1100.0,0.1,400.0,alpha+90.0+beta,tri);
 
-local_weather.create_streak("Stratocumulus",lat+get_lat(x,y-7500,phi), lon+get_lon(x,y-7500,phi), alt + alt_offset,500.0,12,1000.0,0.1,400.0,15,1000.0,0.1,400.0,alpha+270.0+beta,tri);
+local_weather.create_streak("Stratocumulus",lat+get_lat(x,y-7500,phi), lon+get_lon(x,y-7500,phi), alt + alt_offset,500.0,m,1100.0,0.1,400.0,n,1100.0,0.1,400.0,alpha+270.0+beta,tri);
 
 
-local_weather.create_streak("Stratocumulus bottom",lat+get_lat(x,y+5250,phi), lon+get_lon(x,y+5250,phi), alt,0.0,10,700.0,0.2,400.0,15,700.0,0.0,400.0,alpha+90.0+beta,tri);
+local_weather.create_streak("Stratocumulus bottom",lat+get_lat(x,y+5250,phi), lon+get_lon(x,y+5250,phi), alt,0.0,m+1,700.0,0.2,400.0,n+1,700.0,0.0,400.0,alpha+90.0+beta,tri);
 
-local_weather.create_streak("Stratocumulus bottom",lat+get_lat(x,y-5250,phi), lon+get_lon(x,y-5250,phi), alt,0.0,10,700.0,0.2,400.0,15,700.0,0.0,400.0,alpha+270.0+beta,tri);
+local_weather.create_streak("Stratocumulus bottom",lat+get_lat(x,y-5250,phi), lon+get_lon(x,y-5250,phi), alt,0.0,m+1,700.0,0.2,400.0,n+1,700.0,0.0,400.0,alpha+270.0+beta,tri);
+
+}
+
+
+var create_detailed_small_stratocumulus_bank = func (lat, lon, alt, alpha) {
+
+var phi = alpha * math.pi/180.0;
+var x = 2.0 * (rand()-0.5) * 12000;
+var y = 2.0 * (rand()-0.5) * 12000;
+var tri = 1.5 + 1.5*rand();
+var beta = (rand() -0.5) * 60.0;
+
+var m = int(5 + rand() * 5);
+var n = int(6 + rand() * 5);
+
+var alt_offset = 0.5 * local_weather.cloud_vertical_size_map["Cumulus"] * ft_to_m;
+
+local_weather.create_streak("Stratocumulus",lat+get_lat(x,y+7500,phi), lon+get_lon(x,y+7500,phi), alt + alt_offset,500.0,m,1100.0,0.12,400.0,n,1100.0,0.12,400.0,alpha+90.0+beta,tri);
+
+local_weather.create_streak("Stratocumulus",lat+get_lat(x,y-7500,phi), lon+get_lon(x,y-7500,phi), alt + alt_offset,500.0,m,1100.0,0.12,400.0,n,1100.0,0.12,400.0,alpha+270.0+beta,tri);
+
+
+local_weather.create_streak("Stratocumulus bottom",lat+get_lat(x,y+7050,phi), lon+get_lon(x,y+7050,phi), alt,0.0,m,700.0,0.2,400.0,n,700.0,0.0,400.0,alpha+90.0+beta,tri);
+
+local_weather.create_streak("Stratocumulus bottom",lat+get_lat(x,y-7050,phi), lon+get_lon(x,y-7050,phi), alt,0.0,m,700.0,0.2,400.0,n,700.0,0.0,400.0,alpha+270.0+beta,tri);
 
 }
 
@@ -3012,6 +3166,9 @@ var lon_to_m = 0.0; # needs to be calculated dynamically
 var m_to_lon = 0.0; # we do this on startup
 var lw = "/local-weather/";
 
+var small_scale_persistence = getprop(lw~"config/small-scale-persistence");
+var rnd_store = 0.0;
+
 var elat = [];
 var elon = [];
 var erad = [];
diff --git a/gui/dialogs/local_weather.xml b/gui/dialogs/local_weather.xml
index 6561adba8..e0130e620 100644
--- a/gui/dialogs/local_weather.xml
+++ b/gui/dialogs/local_weather.xml
@@ -10,6 +10,8 @@
  <modal>false</modal>
 
 
+
+
 <text>
   <x>10</x>
   <y>570</y>
@@ -62,7 +64,7 @@
   <x>0</x>
   <y>525</y>
 
- 
+
 <combo>
    <x>10</x>
    <y>0</y>
@@ -101,7 +103,7 @@
     <command>dialog-apply</command>
    </binding>
   </combo>
- 
+
 
   <input>
    <x>203</x>
@@ -231,7 +233,7 @@
   <x>0</x>
   <y>440</y>
 
- 
+
 <combo>
    <x>10</x>
    <y>0</y>
@@ -426,7 +428,7 @@
   <x>165</x>
   <y>0</y>
   <label>alt (ft)</label>
- </text> 
+ </text>
 
 <input>
    <x>245</x>
@@ -440,7 +442,7 @@
   <x>320</x>
   <y>0</y>
   <label>size (km)</label>
- </text> 
+ </text>
 
 <input>
    <x>410</x>
@@ -649,7 +651,7 @@
   <x>0</x>
   <y>195</y>
 
- 
+
 <combo>
    <x>10</x>
    <y>0</y>
diff --git a/gui/dialogs/local_weather_config.xml b/gui/dialogs/local_weather_config.xml
index 1be6c2729..5826cff85 100644
--- a/gui/dialogs/local_weather_config.xml
+++ b/gui/dialogs/local_weather_config.xml
@@ -2,7 +2,7 @@
 
 <PropertyList>
 
- <!-- Weather tiles -->
+ <!-- Weather config -->
 
  <name>local_weather_config</name>
  <width>400</width>
@@ -18,19 +18,19 @@
 
 <text>
    <x>60</x>
-   <y>340</y>
+   <y>345</y>
    <label>loading distance</label>
 </text>
 
 <text>
    <x>10</x>
-   <y>320</y>
+   <y>325</y>
    <label>25 km</label>
 </text>
 
 <slider>
    <x>60</x>
-   <y>320</y>
+   <y>325</y>
    <width>100</width>
    <height>20</height>
    <min>29000.0</min>
@@ -43,14 +43,14 @@
 
 <text>
    <x>170</x>
-   <y>320</y>
+   <y>325</y>
    <label>55 km</label>
 </text>
 
 
 <checkbox>
    <x>250</x>
-   <y>350</y>
+   <y>355</y>
    <width>15</width>
    <height>15</height>
    <label>asymmetric range</label>
@@ -62,13 +62,13 @@
 
 <text>
    <x>220</x>
-   <y>320</y>
+   <y>325</y>
    <label>0.5</label>
 </text>
 
 <slider>
    <x>250</x>
-   <y>320</y>
+   <y>325</y>
    <width>100</width>
    <height>20</height>
    <min>0.5</min>
@@ -81,32 +81,32 @@
 
 <text>
    <x>360</x>
-   <y>320</y>
+   <y>325</y>
    <label>1.0</label>
 </text>
 
 <text>
   <x>5</x>
-  <y>280</y>
+  <y>285</y>
   <label>Cloud buffering settings</label>
 </text>
 
 
 <text>
    <x>60</x>
-   <y>260</y>
+   <y>265</y>
    <label>visible range</label>
 </text>
 
 <text>
    <x>10</x>
-   <y>240</y>
+   <y>245</y>
    <label>15 km</label>
 </text>
 
 <slider>
    <x>60</x>
-   <y>240</y>
+   <y>245</y>
    <width>100</width>
    <height>20</height>
    <min>15000.0</min>
@@ -119,14 +119,14 @@
 
 <text>
    <x>170</x>
-   <y>240</y>
+   <y>245</y>
    <label>45 km</label>
 </text>
 
 
 <checkbox>
    <x>250</x>
-   <y>270</y>
+   <y>275</y>
    <width>15</width>
    <height>15</height>
    <label>asymmetric buffering</label>
@@ -138,13 +138,13 @@
 
 <text>
    <x>220</x>
-   <y>240</y>
+   <y>245</y>
    <label>0.2</label>
 </text>
 
 <slider>
    <x>250</x>
-   <y>240</y>
+   <y>245</y>
    <width>100</width>
    <height>20</height>
    <min>0.2</min>
@@ -157,26 +157,26 @@
 
 <text>
    <x>360</x>
-   <y>240</y>
+   <y>245</y>
    <label>1.0</label>
 </text>
 
 
 <text>
    <x>170</x>
-   <y>210</y>
+   <y>215</y>
    <label>angle:</label>
 </text>
 
 <text>
    <x>220</x>
-   <y>210</y>
+   <y>215</y>
    <label>0.0</label>
 </text>
 
 <slider>
    <x>250</x>
-   <y>210</y>
+   <y>215</y>
    <width>100</width>
    <height>20</height>
    <min>0.0</min>
@@ -189,35 +189,71 @@
 
 <text>
    <x>360</x>
-   <y>210</y>
+   <y>215</y>
    <label>180</label>
 </text>
 
+<checkbox>
+   <x>30</x>
+   <y>185</y>
+   <width>15</width>
+   <height>15</height>
+   <label>tie range to framerate</label>
+   <property>/local-weather/config/fps-control-flag</property>
+   <binding>
+    <command>dialog-apply</command>
+   </binding>
+</checkbox>
+
+<text>
+   <x>200</x>
+   <y>180</y>
+   <label>10 fps</label>
+</text>
+
+<slider>
+   <x>250</x>
+   <y>180</y>
+   <width>100</width>
+   <height>20</height>
+   <min>10.0</min>
+   <max>40.0</max>
+   <property>/local-weather/config/target-framerate</property>
+   <binding>
+     <command>dialog-apply</command>
+   </binding>
+</slider>
+
+<text>
+   <x>355</x>
+   <y>180</y>
+   <label>40 fps</label>
+</text>
 
 
 
 <text>
   <x>5</x>
-  <y>160</y>
+  <y>150</y>
   <label>Weather dynamics settings</label>
 </text>
 
 
 <text>
-   <x>60</x>
-   <y>140</y>
+   <x>55</x>
+   <y>130</y>
    <label>max. clouds in loop</label>
 </text>
 
 <text>
    <x>10</x>
-   <y>120</y>
+   <y>110</y>
    <label>100</label>
 </text>
 
 <slider>
    <x>60</x>
-   <y>120</y>
+   <y>110</y>
    <width>100</width>
    <height>20</height>
    <min>100</min>
@@ -230,12 +266,80 @@
 
 <text>
    <x>170</x>
-   <y>120</y>
+   <y>110</y>
    <label>400</label>
 </text>
 
+<text>
+  <x>5</x>
+  <y>80</y>
+  <label>Weather pattern scales</label>
+</text>
 
 
+<text>
+   <x>15</x>
+   <y>45</y>
+   <label>small</label>
+</text>
+
+<text>
+   <x>78</x>
+   <y>60</y>
+   <label>airmass</label>
+</text>
+
+<slider>
+   <x>60</x>
+   <y>45</y>
+   <width>100</width>
+   <height>20</height>
+   <min>0.5</min>
+   <max>2.0</max>
+   <property>/local-weather/config/large-scale-persistence</property>
+   <binding>
+     <command>dialog-apply</command>
+   </binding>
+</slider>
+
+<text>
+   <x>165</x>
+   <y>45</y>
+   <label>large</label>
+</text>
+
+
+<text>
+   <x>205</x>
+   <y>45</y>
+   <label>small</label>
+</text>
+
+<text>
+   <x>257</x>
+   <y>60</y>
+   <label>cloud patterns</label>
+</text>
+
+<slider>
+   <x>250</x>
+   <y>45</y>
+   <width>100</width>
+   <height>20</height>
+   <min>0.0</min>
+   <max>1.0</max>
+   <property>/local-weather/config/small-scale-persistence</property>
+   <binding>
+     <command>dialog-apply</command>
+   </binding>
+</slider>
+
+<text>
+   <x>355</x>
+   <y>45</y>
+   <label>large</label>
+</text>
+
 
 <group>
   <x>10</x>
diff --git a/gui/dialogs/local_weather_tiles.xml b/gui/dialogs/local_weather_tiles.xml
index 0f08aebb7..da833826e 100644
--- a/gui/dialogs/local_weather_tiles.xml
+++ b/gui/dialogs/local_weather_tiles.xml
@@ -35,10 +35,18 @@
    <value>Coldfront</value>
    <value>Warmfront</value>
    <value>Tropical</value>
-   <!--<value>Test tile</value>-->
+   <value>Test tile</value>
    <binding>
     <command>dialog-apply</command>
    </binding>
+   <!--<enable>
+    <not>
+     <equals>
+      <property>/local-weather/tmp/tile-management</property>
+      <value type="string">METAR</value>
+     </equals>
+    </not>
+   </enable>-->
   </combo>
 
  <text>
@@ -100,7 +108,7 @@
    <width>50</width>
    <height>20</height>
    <min>0.0</min>
-   <max>1.0</max>
+   <max>2.0</max>
    <property>/local-weather/tmp/gust-frequency-hz</property>
    <binding>
      <command>dialog-apply</command>
@@ -205,7 +213,7 @@
    <width>15</width>
    <height>15</height>
    <label>terrain presampling</label>
-   <property>/local-weather/tmp/presampling-flag</property>
+   <property>/local-weather/config/presampling-flag</property>
    <binding>
     <command>dialog-apply</command>
    </binding>
@@ -330,7 +338,7 @@
    <y>0</y>
    <legend>Clear / End</legend>
    <!--<default>true</default>-->
-   <equal>true</equal>
+   <!--<equal>true</equal>-->
    <binding>
      <command>nasal</command>
      <script>local_weather.clear_all()</script>
@@ -341,7 +349,7 @@
    <x>135</x>
    <y>0</y>
    <legend>Close</legend>
-   <equal>true</equal>
+   <!--<equal>true</equal>-->
    <key>Esc</key>
    <binding>
     <command>dialog-close</command>
@@ -352,7 +360,7 @@
    <x>200</x>
    <y>0</y>
    <legend>Show winds</legend>
-   <equal>true</equal>
+   <!--<equal>true</equal>-->
    <binding>
     <command>dialog-show</command>
    <dialog-name>local_weather_winds</dialog-name>
diff --git a/preferences.xml b/preferences.xml
index f828764be..944be50a7 100644
--- a/preferences.xml
+++ b/preferences.xml
@@ -10,6 +10,8 @@ Started September 2000 by David Megginson, david@megginson.com
 
 <PropertyList>
 
+	<local-weather include="Environment/local-weather-defaults.xml"/>
+
 	<!-- General simulation preferences -->
 	<sim>
 		<!-- show-aircraft option: show ALL aircraft regardless by default -->