diff --git a/BizHawk.Client.Common/movie/bk2/Bk2ControllerAdapter.cs b/BizHawk.Client.Common/movie/bk2/Bk2ControllerAdapter.cs
index 0fd295a010..5c49ef6f5d 100644
--- a/BizHawk.Client.Common/movie/bk2/Bk2ControllerAdapter.cs
+++ b/BizHawk.Client.Common/movie/bk2/Bk2ControllerAdapter.cs
@@ -144,10 +144,10 @@ namespace BizHawk.Client.Common
 				_myBoolButtons[button] = Global.AutofireStickyXORAdapter.IsSticky(button);
 			}
 
-			// float controls don't have sticky logic. but old values remain in MovieOutputHardpoint if we don't update this here
-			foreach (var name in Definition.FloatControls)
+			// float controls don't have sticky logic, so latch default value
+			for (int i = 0; i < Definition.FloatControls.Count; i++)
 			{
-				_myFloatControls[name] = Global.AutofireStickyXORAdapter.GetFloat(name);
+				_myFloatControls[Definition.FloatControls[i]] = Definition.FloatRanges[i].Mid;
 			}
 		}
 
diff --git a/BizHawk.Client.Common/movie/interfaces/IMovieController.cs b/BizHawk.Client.Common/movie/interfaces/IMovieController.cs
index af9a76ab05..9a8edfe52b 100644
--- a/BizHawk.Client.Common/movie/interfaces/IMovieController.cs
+++ b/BizHawk.Client.Common/movie/interfaces/IMovieController.cs
@@ -10,6 +10,11 @@ namespace BizHawk.Client.Common
 
 		void LatchFromSource(IController source);
 
+		/// <summary>
+		/// Used by tastudio when it appends new frames in HandleMovieAfterFrameLoop() and ExtendMovieForEdit().
+		/// For buttons it latches autohold state, for analogs it latches mid value.
+		/// All real user input latched by LatchFromPhysical() is ignored.
+		/// </summary>
 		void LatchSticky();
 
 		void SetControllersAsMnemonic(string mnemonic);