diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart
index bcbd39559..f332f31dd 100644
--- a/flutter/lib/desktop/widgets/remote_toolbar.dart
+++ b/flutter/lib/desktop/widgets/remote_toolbar.dart
@@ -434,7 +434,7 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
       toolbarItems.add(_ChatMenu(id: widget.id, ffi: widget.ffi));
       toolbarItems.add(_VoiceCallMenu(id: widget.id, ffi: widget.ffi));
     }
-    toolbarItems.add(_RecordMenu());
+    toolbarItems.add(_RecordMenu(ffi: widget.ffi));
     toolbarItems.add(_CloseMenu(id: widget.id, ffi: widget.ffi));
     return Column(
       mainAxisSize: MainAxisSize.min,
@@ -1219,11 +1219,12 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> {
     }
 
     for (final r in resolutions) {
-      if (r.width == _localResolution!.width && r.height == _localResolution!.height) {
+      if (r.width == _localResolution!.width &&
+          r.height == _localResolution!.height) {
         return r;
       }
     }
-  
+
     return null;
   }
 
@@ -1467,16 +1468,17 @@ class _VoiceCallMenu extends StatelessWidget {
 }
 
 class _RecordMenu extends StatelessWidget {
-  const _RecordMenu({Key? key}) : super(key: key);
+  final FFI ffi;
+  const _RecordMenu({Key? key, required this.ffi}) : super(key: key);
 
   @override
   Widget build(BuildContext context) {
-    var ffi = Provider.of<FfiModel>(context);
+    var ffiModel = Provider.of<FfiModel>(context);
     var recordingModel = Provider.of<RecordingModel>(context);
     final visible =
-        recordingModel.start || ffi.permissions['recording'] != false;
+        recordingModel.start || ffiModel.permissions['recording'] != false;
     if (!visible) return Offstage();
-    return _IconMenuButton(
+    final menuButton = _IconMenuButton(
       assetName: 'assets/rec.svg',
       tooltip: recordingModel.start
           ? 'Stop session recording'
@@ -1489,6 +1491,14 @@ class _RecordMenu extends StatelessWidget {
           ? _ToolbarTheme.hoverRedColor
           : _ToolbarTheme.hoverBlueColor,
     );
+    return ChangeNotifierProvider.value(
+        value: ffi.qualityMonitorModel,
+        child: Consumer<QualityMonitorModel>(
+            builder: (context, model, child) => Offstage(
+                  // If already started, AV1->Hidden/Stop, Other->Start, same as actual
+                  offstage: model.data.codecFormat == 'AV1',
+                  child: menuButton,
+                )));
   }
 }
 
diff --git a/libs/scrap/src/common/record.rs b/libs/scrap/src/common/record.rs
index 9de70ae14..2893cbf18 100644
--- a/libs/scrap/src/common/record.rs
+++ b/libs/scrap/src/common/record.rs
@@ -101,6 +101,9 @@ impl DerefMut for Recorder {
 
 impl Recorder {
     pub fn new(mut ctx: RecorderContext) -> ResultType<Self> {
+        if ctx.format == CodecFormat::AV1 {
+            bail!("not support av1 recording");
+        }
         ctx.set_filename()?;
         let recorder = match ctx.format {
             CodecFormat::VP8 | CodecFormat::VP9 => Recorder {
diff --git a/src/ui/header.tis b/src/ui/header.tis
index 22b3ba1d0..52b2a7f07 100644
--- a/src/ui/header.tis
+++ b/src/ui/header.tis
@@ -144,7 +144,7 @@ class Header: Reactor.Component {
             <span #action>{svg_action}</span>
             <span #display>{svg_display}</span>
             <span #keyboard>{svg_keyboard}</span>
-            {recording_enabled ? <span #recording>{recording ? svg_recording_on : svg_recording_off}</span> : ""}
+            {recording_enabled && qualityMonitorData[4] != "AV1" ? <span #recording>{recording ? svg_recording_on : svg_recording_off}</span> : ""}
             {this.renderKeyboardPop()}
             {this.renderDisplayPop()}
             {this.renderActionPop()}
diff --git a/src/ui/remote.tis b/src/ui/remote.tis
index 5c828689d..2ed436833 100644
--- a/src/ui/remote.tis
+++ b/src/ui/remote.tis
@@ -522,6 +522,7 @@ handler.updateQualityStatus = function(speed, fps, delay, bitrate, codec_format)
     bitrate ? qualityMonitorData[3] = bitrate:null;
     codec_format ? qualityMonitorData[4] = codec_format:null;
     qualityMonitor.update();
+    if (codec_format) header.update();
 }
 
 handler.setPermission = function(name, enabled) {