diff --git a/Nasal/view.nas b/Nasal/view.nas
index 550d37844..568b501c6 100644
--- a/Nasal/view.nas
+++ b/Nasal/view.nas
@@ -143,37 +143,40 @@ var flyby = {
         me.altN = props.globals.getNode("/sim/viewer/altitude-ft", 1);
         me.loopid = 0;
         me.number = nil;
+        me.currview = nil;
         forindex (var i; views)
             if (views[i].getNode("name").getValue() == "Fly-By View")
                 me.number = i;
         if (me.number == nil)
             die("can't find 'Fly-By View'");
 
-        setlistener("/sim/freeze/replay-state", func { cmdarg().getValue() or me.reset() });
         setlistener("/sim/signals/reinit", func { cmdarg().getValue() or me.reset() });
+        setlistener("/sim/freeze/replay-state", func {
+            settimer(func { me.reset() }, 1); # time for replay to catch up
+        });
         setlistener("/sim/current-view/view-number", func {
-            me.loopid += 1;
-            if (cmdarg().getValue() == me.number) {
-                me.reset();
-                me.loop(me.loopid);
-            }
+            me.currview = cmdarg().getValue();
+            me.reset();
         }, 1);
     },
     reset: func {
+        me.loopid += 1;
+        me.currview == me.number or return;
         me.chase = -getprop("/sim/chase-distance-m");
         me.course = getprop("/orientation/heading-deg");
         me.coord = geo.Coord.new().set(geo.aircraft_position());
         me.dist = 20;
         me.setpos(1);
+        me.loop(me.loopid);
     },
     setpos : func(force = 0) {
         var pos = geo.aircraft_position();
         var course = me.coord.course_to(pos);
         var dist = me.coord.distance_to(pos);
-        if (dist < 1.5 * me.chase and !force)
+        if (dist < 1.7 * me.chase and !force)
             return;
         var side = (rand() - 0.5 < 0) ? -90 : 90;;
-        pos.apply_course_distance(course, dist * 0.6);
+        pos.apply_course_distance(course, dist * 0.8);
         pos.apply_course_distance(course + side, me.chase);
         var lon = pos.lon();
         var lat = pos.lat();