diff --git a/src/Main/main.cxx b/src/Main/main.cxx
index 52a488382..2e1df4a68 100644
--- a/src/Main/main.cxx
+++ b/src/Main/main.cxx
@@ -861,6 +861,11 @@ static const double alt_adjust_m = alt_adjust_ft * SG_FEET_TO_METER;
 static void fgMainLoop( void ) {
 
     // Update the elapsed time.
+    static bool first_time = true;
+    if ( first_time ) {
+        last_time_stamp.stamp();
+        first_time = false;
+    }
     current_time_stamp.stamp();
     delta_time_sec = double(current_time_stamp - last_time_stamp) / 1000000.0;
     last_time_stamp = current_time_stamp;
@@ -1082,8 +1087,17 @@ static void fgMainLoop( void ) {
 #ifdef ENABLE_AUDIO_SUPPORT
     if ( fgGetBool("/sim/sound/audible")
            && globals->get_soundmgr()->is_working() ) {
-	globals->get_fx()->update(1); // FIXME: use dt
-	globals->get_soundmgr()->update(1); // FIXME: use dt
+        static double dt = 0.0;
+        static double sound_update_rate = 0.05;
+
+        dt += delta_time_sec;
+
+	// Updating four times a second should be enough
+        if ( dt >= sound_update_rate ) {
+	    globals->get_fx()->update( dt );
+	    globals->get_soundmgr()->update( dt );
+            dt = 0.0;
+        }
     }
 #endif
 
diff --git a/src/Sound/fg_sound.cxx b/src/Sound/fg_sound.cxx
index ccd8075e0..28ebafb70 100644
--- a/src/Sound/fg_sound.cxx
+++ b/src/Sound/fg_sound.cxx
@@ -136,8 +136,6 @@ FGSound::init(SGPropertyNode *node)
          volume.intern = &_dt_play;
       else if (!strcmp(intern_str, "dt_stop"))
          volume.intern = &_dt_stop;
-      else if (!strcmp(intern_str, "random"))
-         volume.intern = &_random;
 
       if ((volume.factor = kids[i]->getDoubleValue("factor", 1.0)) != 0.0)
          if (volume.factor < 0.0) {
@@ -271,16 +269,16 @@ FGSound::update (double dt)
       )
    {
 
-      _active = false;
-      _dt_stop += dt;
-      _dt_play = 0.0;
-
       if (_sample->is_playing()) {
          SG_LOG(SG_GENERAL, SG_INFO, "Stopping audio after " << _dt_play
                                       << " sec: " << _name );
          _sample->stop( _mgr->get_scheduler() );
       }
 
+      _active = false;
+      _dt_stop += dt;
+      _dt_play = 0.0;
+
       return;
 
    }
@@ -302,7 +300,7 @@ FGSound::update (double dt)
    }
 
    //
-   // Update playtime, cache the current value and feed the random number
+   // Update playing time and cache the current value.
    //
     _dt_play += dt;
    _prev_value = curr_value;
diff --git a/src/Sound/fg_sound.hxx b/src/Sound/fg_sound.hxx
index fb871d2cb..f6c21b80b 100644
--- a/src/Sound/fg_sound.hxx
+++ b/src/Sound/fg_sound.hxx
@@ -81,7 +81,6 @@ private:
   string _name;
   int _mode;
   double _prev_value;
-  double _random;
   double _dt_play;
   double _dt_stop;