diff --git a/src/Scenery/tilemgr.cxx b/src/Scenery/tilemgr.cxx
index 81e84bfe6..adc200b86 100644
--- a/src/Scenery/tilemgr.cxx
+++ b/src/Scenery/tilemgr.cxx
@@ -52,10 +52,33 @@ using simgear::SGModelLib;
 using simgear::TileEntry;
 using simgear::TileCache;
 
+
+// helper: listen to property changes affecting tile loading
+class LoaderPropertyWatcher : public SGPropertyChangeListener
+{
+public:
+    LoaderPropertyWatcher(FGTileMgr* pTileMgr) :
+        _pTileMgr(pTileMgr)
+    {
+    }
+
+    virtual void valueChanged(SGPropertyNode*)
+    {
+        _pTileMgr->configChanged();
+    }
+
+private:
+    FGTileMgr* _pTileMgr;
+};
+
+
 FGTileMgr::FGTileMgr():
     state( Start ),
-    vis( 16000 )
+    vis( 16000 ),
+    _propListener(new LoaderPropertyWatcher(this))
 {
+    _randomObjects = fgGetNode("/sim/rendering/random-objects", true);
+    _randomVegetation = fgGetNode("/sim/rendering/random-vegetation", true);
 }
 
 
@@ -63,6 +86,8 @@ FGTileMgr::~FGTileMgr() {
     // remove all nodes we might have left behind
     osg::Group* group = globals->get_scenery()->get_terrain_branch();
     group->removeChildren(0, group->getNumChildren());
+    delete _propListener;
+    _propListener = NULL;
 }
 
 
@@ -72,8 +97,11 @@ void FGTileMgr::init() {
 
     _options = new SGReaderWriterBTGOptions;
     _options->setMatlib(globals->get_matlib());
-    _options->setUseRandomObjects(fgGetBool("/sim/rendering/random-objects", true));
-    _options->setUseRandomVegetation(fgGetBool("/sim/rendering/random-vegetation", true));
+
+    _randomObjects.get()->addChangeListener(_propListener, false);
+    _randomVegetation.get()->addChangeListener(_propListener, false);
+    configChanged();
+
     osgDB::FilePathList &fp = _options->getDatabasePathList();
     const string_list &sc = globals->get_fg_scenery();
     fp.clear();
@@ -101,6 +129,11 @@ void FGTileMgr::reinit()
     update(0.0);
 }
 
+void FGTileMgr::configChanged()
+{
+    _options->setUseRandomObjects(_randomObjects.get()->getBoolValue());
+    _options->setUseRandomVegetation(_randomVegetation.get()->getBoolValue());
+}
 
 /* schedule a tile for loading, keep request for given amount of time.
  * Returns true if tile is already loaded. */
diff --git a/src/Scenery/tilemgr.hxx b/src/Scenery/tilemgr.hxx
index 048fe7692..6b4a4e7ef 100644
--- a/src/Scenery/tilemgr.hxx
+++ b/src/Scenery/tilemgr.hxx
@@ -81,6 +81,9 @@ private:
     void update_queues();
     
     SGPropertyNode* _visibilityMeters;
+    SGPropertyChangeListener* _propListener;
+    SGPropertyNode_ptr _randomObjects;
+    SGPropertyNode_ptr _randomVegetation;
     
 public:
     FGTileMgr();
@@ -93,6 +96,9 @@ public:
 
     virtual void update(double dt);
 
+    // update loader configuration options
+    void configChanged();
+
     int schedule_tiles_at(const SGGeod& location, double rangeM);