diff --git a/addons/core/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout b/addons/core/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout
new file mode 100644
index 00000000..b496c43c
--- /dev/null
+++ b/addons/core/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout
@@ -0,0 +1,69 @@
+HorizontalLayoutWidgetClass {
+ Name "ACE_Settings"
+ components {
+  ACE_SettingsSubMenu "{644764DB50F2EEFA}" {
+  }
+ }
+ {
+  ScrollLayoutWidgetClass "{64475E8865185276}" {
+   Name "ScrollLayout0"
+   Slot LayoutSlot "{54890CCF086F1BB3}" {
+    Padding -2 72 2 0
+    SizeMode Fill
+    FillWeight 1.433
+   }
+   Color 0.761 0.392 0.078 1
+   style Small
+   {
+    VerticalLayoutWidgetClass "{64475E8865185274}" {
+     Name "Content"
+     Slot AlignableSlot "{54890CCE26EF3FDE}" {
+      HorizontalAlign 3
+      VerticalAlign 3
+      Padding -4 0 10 0
+     }
+     {
+      VerticalLayoutWidgetClass "{64475E883295DD06}" {
+       Name "ExampleGroup"
+       Slot LayoutSlot "{64475E883295DD3F}" {
+        Padding 4 4 4 4
+       }
+       "Is Enabled" 0
+       "Is Visible" 0
+       {
+        VerticalLayoutWidgetClass "{64476640F1F8FB45}" : "{FEEEB639F2735BA1}UI/layouts/Menus/SettingsMenu/CustomWidgets/SettingsTitle.layout" {
+         Name "SettingsTitle0"
+         Slot LayoutSlot "{64476640F1F8FB60}" {
+         }
+        }
+        ButtonWidgetClass "{64475E8865185267}" : "{C9DF0E6590F6C388}UI/layouts/WidgetLibrary/SpinBox/WLib_SpinBox.layout" {
+         Name "HorizontalCameraSpeed"
+         Slot LayoutSlot "{54890CCD613ED416}" {
+          Padding 4 4 4 4
+         }
+         components {
+          SCR_SpinBoxComponent "{5472C6CBC0640458}" {
+           m_sLabel "#AR-Editor_Attribute_CameraATL_Name"
+           m_sLabelLayout "{F003823FF141983C}UI/layouts/Menus/SettingsMenu/CustomWidgets/SettingsLabel.layout"
+           m_aElementNames {
+            "#AR-UI_No" "#AR-UI_Yes"
+           }
+           m_bUseLightArrows 1
+           m_bCycleMode 1
+          }
+         }
+        }
+       }
+      }
+     }
+    }
+   }
+  }
+  VerticalLayoutWidgetClass "{64475E8865185264}" {
+   Name "Description"
+   Slot LayoutSlot "{54890CCD7A457969}" {
+    SizeMode Fill
+   }
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/core/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout.meta b/addons/core/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout.meta
new file mode 100644
index 00000000..bac1ef5a
--- /dev/null
+++ b/addons/core/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{399F81816ADDA45B}UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout"
+ Configurations {
+  LayoutResourceClass PC {
+  }
+  LayoutResourceClass XBOX_ONE : PC {
+  }
+  LayoutResourceClass XBOX_SERIES : PC {
+  }
+  LayoutResourceClass PS4 : PC {
+  }
+  LayoutResourceClass PS5 : PC {
+  }
+  LayoutResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/core/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout b/addons/core/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout
new file mode 100644
index 00000000..b68fa640
--- /dev/null
+++ b/addons/core/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout
@@ -0,0 +1,39 @@
+FrameWidgetClass {
+ {
+  OverlayWidgetClass "{5DF6773A8D2D810B}" {
+   Prefab "{5DF6773A8D2D810B}"
+   {
+    SizeLayoutWidgetClass "{5DF4AD634C312B7D}" {
+     Prefab "{5DF4AD634C312B7D}"
+     {
+      VerticalLayoutWidgetClass "{5DF4AD634C312B71}" {
+       Prefab "{5DF4AD634C312B71}"
+       {
+        OverlayWidgetClass "{5DF4AD634C312B8B}" {
+         Prefab "{5DF4AD634C312B8B}"
+         {
+          VerticalLayoutWidgetClass "{5DF4AD6212638B9A}" {
+           Prefab "{5DF4AD6212638B9A}"
+           components {
+            SCR_TabViewComponent "{546B27D01CA8A38D}" {
+             m_aElements {
+              SCR_TabViewContent "{64475E8B3FBE157D}" {
+               m_ElementLayout "{399F81816ADDA45B}UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout"
+               m_sTabButtonContent "#ACE-Acronym"
+               m_sTabIdentifier "ace-anvil"
+               m_bEnabled 0
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+    }
+   }
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/core/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout.meta b/addons/core/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout.meta
new file mode 100644
index 00000000..927d69fb
--- /dev/null
+++ b/addons/core/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{72AB54EEF4635373}UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout"
+ Configurations {
+  LayoutResourceClass PC {
+  }
+  LayoutResourceClass XBOX_ONE : PC {
+  }
+  LayoutResourceClass XBOX_SERIES : PC {
+  }
+  LayoutResourceClass PS4 : PC {
+  }
+  LayoutResourceClass PS5 : PC {
+  }
+  LayoutResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/core/scripts/Game/ACE_Core/UI/Menu/SettingsMenu/ACE_SettingsSubMenu.c b/addons/core/scripts/Game/ACE_Core/UI/Menu/SettingsMenu/ACE_SettingsSubMenu.c
new file mode 100644
index 00000000..070f06df
--- /dev/null
+++ b/addons/core/scripts/Game/ACE_Core/UI/Menu/SettingsMenu/ACE_SettingsSubMenu.c
@@ -0,0 +1,3 @@
+class ACE_SettingsSubMenu : SCR_SettingsSubMenuBase
+{
+}
diff --git a/addons/radio/Language/ACE_Radio_language.cs_cz.conf b/addons/radio/Language/ACE_Radio_language.cs_cz.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.cs_cz.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.cs_cz.conf.meta b/addons/radio/Language/ACE_Radio_language.cs_cz.conf.meta
new file mode 100644
index 00000000..6b2c8aad
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.cs_cz.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{BF1E2012E3DEE9C1}Language/ACE_Radio_language.cs_cz.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.de_de.conf b/addons/radio/Language/ACE_Radio_language.de_de.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.de_de.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.de_de.conf.meta b/addons/radio/Language/ACE_Radio_language.de_de.conf.meta
new file mode 100644
index 00000000..6bf913df
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.de_de.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{6A603A21F07DF8E1}Language/ACE_Radio_language.de_de.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.en_us.conf b/addons/radio/Language/ACE_Radio_language.en_us.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.en_us.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.en_us.conf.meta b/addons/radio/Language/ACE_Radio_language.en_us.conf.meta
new file mode 100644
index 00000000..6417fed7
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.en_us.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{3490B06A9A8EFDE0}Language/ACE_Radio_language.en_us.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.es_es.conf b/addons/radio/Language/ACE_Radio_language.es_es.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.es_es.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.es_es.conf.meta b/addons/radio/Language/ACE_Radio_language.es_es.conf.meta
new file mode 100644
index 00000000..a3d39628
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.es_es.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{F1DCFDE3748C96FF}Language/ACE_Radio_language.es_es.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.fr_fr.conf b/addons/radio/Language/ACE_Radio_language.fr_fr.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.fr_fr.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.fr_fr.conf.meta b/addons/radio/Language/ACE_Radio_language.fr_fr.conf.meta
new file mode 100644
index 00000000..17d28ee6
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.fr_fr.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{4A7408D4920F75FD}Language/ACE_Radio_language.fr_fr.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.it_it.conf b/addons/radio/Language/ACE_Radio_language.it_it.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.it_it.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.it_it.conf.meta b/addons/radio/Language/ACE_Radio_language.it_it.conf.meta
new file mode 100644
index 00000000..71a84523
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.it_it.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{CA6887E03F2DF604}Language/ACE_Radio_language.it_it.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.ja_jp.conf b/addons/radio/Language/ACE_Radio_language.ja_jp.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.ja_jp.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.ja_jp.conf.meta b/addons/radio/Language/ACE_Radio_language.ja_jp.conf.meta
new file mode 100644
index 00000000..d5e6f6b3
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.ja_jp.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{DA733A72015CC6AF}Language/ACE_Radio_language.ja_jp.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.ko_kr.conf b/addons/radio/Language/ACE_Radio_language.ko_kr.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.ko_kr.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.ko_kr.conf.meta b/addons/radio/Language/ACE_Radio_language.ko_kr.conf.meta
new file mode 100644
index 00000000..5852001c
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.ko_kr.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{7ACD12DE9271C590}Language/ACE_Radio_language.ko_kr.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.pl_pl.conf b/addons/radio/Language/ACE_Radio_language.pl_pl.conf
new file mode 100644
index 00000000..53e009c4
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.pl_pl.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Pisk transmisji kanału 1"
+  "Pisk transmisji kanału 2"
+  "Wysoki"
+  "Niski"
+  "Wyłączony"
+  "Pisk przy zmianie nadajnika"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.pl_pl.conf.meta b/addons/radio/Language/ACE_Radio_language.pl_pl.conf.meta
new file mode 100644
index 00000000..6a7cc245
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.pl_pl.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{26BCB4242C9E59EC}Language/ACE_Radio_language.pl_pl.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.pt_br.conf b/addons/radio/Language/ACE_Radio_language.pt_br.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.pt_br.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.pt_br.conf.meta b/addons/radio/Language/ACE_Radio_language.pt_br.conf.meta
new file mode 100644
index 00000000..436f4763
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.pt_br.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{F3CB2EE817609356}Language/ACE_Radio_language.pt_br.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.ru_ru.conf b/addons/radio/Language/ACE_Radio_language.ru_ru.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.ru_ru.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.ru_ru.conf.meta b/addons/radio/Language/ACE_Radio_language.ru_ru.conf.meta
new file mode 100644
index 00000000..cda04b75
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.ru_ru.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{A68A3A408A19F620}Language/ACE_Radio_language.ru_ru.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.st b/addons/radio/Language/ACE_Radio_language.st
new file mode 100644
index 00000000..71ed0d8a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.st
@@ -0,0 +1,61 @@
+StringTable {
+ ItemClassName "CustomStringTableItem"
+ Items {
+  CustomStringTableItem "{644826487CAE8882}" {
+   Id "ACE_Radio-Settings-Radio"
+   Target_en_us "Radio"
+   Target_pl_pl "Radio"
+   Modified 1682450666
+   Author "veteran29"
+   LastChanged "veteran29"
+  }
+  CustomStringTableItem "{6448264807CE1461}" {
+   Id "ACE_Radio-Settings-Radio_Beep_Ch1"
+   Target_en_us "Ch.1 transmission beep"
+   Target_pl_pl "Pisk transmisji kanału 1"
+   Modified 1682450683
+   Author "veteran29"
+   LastChanged "veteran29"
+  }
+  CustomStringTableItem "{6448264808F0EDBE}" {
+   Id "ACE_Radio-Settings-Radio_Beep_Ch2"
+   Target_en_us "Ch.2 transmission beep"
+   Target_pl_pl "Pisk transmisji kanału 2"
+   Modified 1682450690
+   Author "veteran29"
+   LastChanged "veteran29"
+  }
+  CustomStringTableItem "{644826481FB40F2F}" {
+   Id "ACE_Radio-Settings-Radio_Beep_High"
+   Target_en_us "High"
+   Target_pl_pl "Wysoki"
+   Modified 1682450695
+   Author "veteran29"
+   LastChanged "veteran29"
+  }
+  CustomStringTableItem "{6448264811A5CBD7}" {
+   Id "ACE_Radio-Settings-Radio_Beep_Low"
+   Target_en_us "Low"
+   Target_pl_pl "Niski"
+   Modified 1682450698
+   Author "veteran29"
+   LastChanged "veteran29"
+  }
+  CustomStringTableItem "{644826480D886913}" {
+   Id "ACE_Radio-Settings-Radio_Beep_Off"
+   Target_en_us "Off"
+   Target_pl_pl "Wyłączony"
+   Modified 1682450701
+   Author "veteran29"
+   LastChanged "veteran29"
+  }
+  CustomStringTableItem "{64482648D1C29B76}" {
+   Id "ACE_Radio-Settings_Beep_Cycle"
+   Target_en_us "Transceiver cycle beep"
+   Target_pl_pl "Pisk przy zmianie nadajnika"
+   Modified 1682450920
+   Author "veteran29"
+   LastChanged "veteran29"
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.st.meta b/addons/radio/Language/ACE_Radio_language.st.meta
new file mode 100644
index 00000000..c5084340
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.st.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{C4D719716B02B0B1}Language/ACE_Radio_language.st"
+ Configurations {
+  StringTableResourceClass PC {
+  }
+  StringTableResourceClass XBOX_ONE : PC {
+  }
+  StringTableResourceClass XBOX_SERIES : PC {
+  }
+  StringTableResourceClass PS4 : PC {
+  }
+  StringTableResourceClass PS5 : PC {
+  }
+  StringTableResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.uk_ua.conf b/addons/radio/Language/ACE_Radio_language.uk_ua.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.uk_ua.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.uk_ua.conf.meta b/addons/radio/Language/ACE_Radio_language.uk_ua.conf.meta
new file mode 100644
index 00000000..ff5113a9
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.uk_ua.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{2CD26FB6E6374875}Language/ACE_Radio_language.uk_ua.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.zh_cn.conf b/addons/radio/Language/ACE_Radio_language.zh_cn.conf
new file mode 100644
index 00000000..4e54758a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.zh_cn.conf
@@ -0,0 +1,20 @@
+StringTableRuntime {
+ Ids {
+  "ACE_Radio-Settings-Radio"
+  "ACE_Radio-Settings-Radio_Beep_Ch1"
+  "ACE_Radio-Settings-Radio_Beep_Ch2"
+  "ACE_Radio-Settings-Radio_Beep_High"
+  "ACE_Radio-Settings-Radio_Beep_Low"
+  "ACE_Radio-Settings-Radio_Beep_Off"
+  "ACE_Radio-Settings_Beep_Cycle"
+ }
+ Texts {
+  "Radio"
+  "Ch.1 transmission beep"
+  "Ch.2 transmission beep"
+  "High"
+  "Low"
+  "Off"
+  "Transceiver cycle beep"
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Language/ACE_Radio_language.zh_cn.conf.meta b/addons/radio/Language/ACE_Radio_language.zh_cn.conf.meta
new file mode 100644
index 00000000..7a09d32a
--- /dev/null
+++ b/addons/radio/Language/ACE_Radio_language.zh_cn.conf.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{F662018BDF979868}Language/ACE_Radio_language.zh_cn.conf"
+ Configurations {
+  CONFResourceClass PC {
+  }
+  CONFResourceClass XBOX_ONE : PC {
+  }
+  CONFResourceClass XBOX_SERIES : PC {
+  }
+  CONFResourceClass PS4 : PC {
+  }
+  CONFResourceClass PS5 : PC {
+  }
+  CONFResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/Sounds/ACE_Radio/beep_high.wav b/addons/radio/Sounds/ACE_Radio/beep_high.wav
new file mode 100644
index 00000000..f3c41195
Binary files /dev/null and b/addons/radio/Sounds/ACE_Radio/beep_high.wav differ
diff --git a/addons/radio/Sounds/ACE_Radio/beep_low.wav b/addons/radio/Sounds/ACE_Radio/beep_low.wav
new file mode 100644
index 00000000..b0e2ac39
Binary files /dev/null and b/addons/radio/Sounds/ACE_Radio/beep_low.wav differ
diff --git a/addons/radio/Sounds/ACE_Radio/click_off.wav b/addons/radio/Sounds/ACE_Radio/click_off.wav
new file mode 100644
index 00000000..ecd6d6ea
Binary files /dev/null and b/addons/radio/Sounds/ACE_Radio/click_off.wav differ
diff --git a/addons/radio/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout b/addons/radio/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout
new file mode 100644
index 00000000..5d6ab0cc
--- /dev/null
+++ b/addons/radio/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout
@@ -0,0 +1,81 @@
+HorizontalLayoutWidgetClass {
+ {
+  ScrollLayoutWidgetClass "{64475E8865185276}" {
+   Prefab "{64475E8865185276}"
+   {
+    VerticalLayoutWidgetClass "{64475E8865185274}" {
+     Prefab "{64475E8865185274}"
+     {
+      VerticalLayoutWidgetClass "{64476516122ABAC4}" {
+       Name "ACE_Radio"
+       Slot LayoutSlot "{64476516122ABAFD}" {
+       }
+       {
+        VerticalLayoutWidgetClass "{64476640D7B4C338}" : "{FEEEB639F2735BA1}UI/layouts/Menus/SettingsMenu/CustomWidgets/SettingsTitle.layout" {
+         Name "SettingsTitle0"
+         Slot LayoutSlot "{64476640D7B4C35A}" {
+         }
+         components {
+          SCR_LabelComponent "{58B30C1A8E56F0FF}" {
+           m_sLabel "#ACE_Radio-Settings-Radio"
+          }
+         }
+        }
+        ButtonWidgetClass "{64476516D54DC19A}" : "{C9DF0E6590F6C388}UI/layouts/WidgetLibrary/SpinBox/WLib_SpinBox.layout" {
+         Name "Beep_Ch1"
+         Slot LayoutSlot "{54890CCD613ED416}" {
+          Padding 4 4 4 4
+         }
+         components {
+          SCR_SpinBoxComponent "{5472C6CBC0640458}" {
+           m_sLabel "#ACE_Radio-Settings-Radio_Beep_Ch1"
+           m_sLabelLayout "{F003823FF141983C}UI/layouts/Menus/SettingsMenu/CustomWidgets/SettingsLabel.layout"
+           m_aElementNames {
+            "#ACE_Radio-Settings-Radio_Beep_Off" "#ACE_Radio-Settings-Radio_Beep_High" "#ACE_Radio-Settings-Radio_Beep_Low"
+           }
+           m_bUseLightArrows 1
+           m_bCycleMode 1
+          }
+         }
+        }
+        ButtonWidgetClass "{64476516DF04C11E}" : "{C9DF0E6590F6C388}UI/layouts/WidgetLibrary/SpinBox/WLib_SpinBox.layout" {
+         Name "Beep_Ch2"
+         Slot LayoutSlot "{54890CCD613ED416}" {
+          Padding 4 4 4 4
+         }
+         components {
+          SCR_SpinBoxComponent "{5472C6CBC0640458}" {
+           m_sLabel "#ACE_Radio-Settings-Radio_Beep_Ch2"
+           m_sLabelLayout "{F003823FF141983C}UI/layouts/Menus/SettingsMenu/CustomWidgets/SettingsLabel.layout"
+           m_aElementNames {
+            "#ACE_Radio-Settings-Radio_Beep_Off" "#ACE_Radio-Settings-Radio_Beep_High" "#ACE_Radio-Settings-Radio_Beep_Low"
+           }
+           m_bCycleMode 1
+          }
+         }
+        }
+        ButtonWidgetClass "{64481AA16C28CDC6}" : "{C9DF0E6590F6C388}UI/layouts/WidgetLibrary/SpinBox/WLib_SpinBox.layout" {
+         Name "Beep_Cycle"
+         Slot LayoutSlot "{64481AA16C28CD32}" {
+          HorizontalAlign 3
+          Padding 4 4 4 4
+         }
+         components {
+          SCR_SpinBoxComponent "{5472C6CBC0640458}" {
+           m_sLabel "#ACE_Radio-Settings_Beep_Cycle"
+           m_sLabelLayout "{F003823FF141983C}UI/layouts/Menus/SettingsMenu/CustomWidgets/SettingsLabel.layout"
+           m_aElementNames {
+            "#AR-UI_No" "#AR-UI_Yes"
+           }
+           m_bCycleMode 1
+          }
+         }
+        }
+       }
+      }
+     }
+    }
+   }
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout.meta b/addons/radio/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout.meta
new file mode 100644
index 00000000..bac1ef5a
--- /dev/null
+++ b/addons/radio/UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{399F81816ADDA45B}UI/layouts/Menus/SettingsMenu/ACE_SettingsSubMenu.layout"
+ Configurations {
+  LayoutResourceClass PC {
+  }
+  LayoutResourceClass XBOX_ONE : PC {
+  }
+  LayoutResourceClass XBOX_SERIES : PC {
+  }
+  LayoutResourceClass PS4 : PC {
+  }
+  LayoutResourceClass PS5 : PC {
+  }
+  LayoutResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout b/addons/radio/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout
new file mode 100644
index 00000000..4cafc194
--- /dev/null
+++ b/addons/radio/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout
@@ -0,0 +1,36 @@
+FrameWidgetClass {
+ {
+  OverlayWidgetClass "{5DF6773A8D2D810B}" {
+   Prefab "{5DF6773A8D2D810B}"
+   {
+    SizeLayoutWidgetClass "{5DF4AD634C312B7D}" {
+     Prefab "{5DF4AD634C312B7D}"
+     {
+      VerticalLayoutWidgetClass "{5DF4AD634C312B71}" {
+       Prefab "{5DF4AD634C312B71}"
+       {
+        OverlayWidgetClass "{5DF4AD634C312B8B}" {
+         Prefab "{5DF4AD634C312B8B}"
+         {
+          VerticalLayoutWidgetClass "{5DF4AD6212638B9A}" {
+           Prefab "{5DF4AD6212638B9A}"
+           components {
+            SCR_TabViewComponent "{546B27D01CA8A38D}" {
+             m_aElements {
+              SCR_TabViewContent "{64475E8B3FBE157D}" {
+               m_bEnabled 1
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+    }
+   }
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout.meta b/addons/radio/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout.meta
new file mode 100644
index 00000000..927d69fb
--- /dev/null
+++ b/addons/radio/UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout.meta
@@ -0,0 +1,17 @@
+MetaFileClass {
+ Name "{72AB54EEF4635373}UI/layouts/Menus/SettingsMenu/SettingsSuperMenu.layout"
+ Configurations {
+  LayoutResourceClass PC {
+  }
+  LayoutResourceClass XBOX_ONE : PC {
+  }
+  LayoutResourceClass XBOX_SERIES : PC {
+  }
+  LayoutResourceClass PS4 : PC {
+  }
+  LayoutResourceClass PS5 : PC {
+  }
+  LayoutResourceClass HEADLESS : PC {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/addon.gproj b/addons/radio/addon.gproj
new file mode 100644
index 00000000..3464ff28
--- /dev/null
+++ b/addons/radio/addon.gproj
@@ -0,0 +1,83 @@
+GameProject {
+ ID "ACE_Radio"
+ GUID "64475DC102F2BDA4"
+ TITLE "ACE Radio"
+ Dependencies {
+  "60C4CE4888FF4621" "58D0FB3206B6F859"
+ }
+ Configurations {
+  GameProjectConfig PC {
+   WidgetManagerSettings WidgetManagerSettings "{AC4BE58770485E02}" {
+    StringTables {
+     StringTableDefinition "{64482648F88CE023}" {
+      StringTableSource "{C4D719716B02B0B1}Language/ACE_Radio_language.st"
+      Languages {
+       LanguageDefinition "{64482648FE8E786E}" {
+        Code "cs_cz"
+        StringTableRuntime "{BF1E2012E3DEE9C1}Language/ACE_Radio_language.cs_cz.conf"
+       }
+       LanguageDefinition "{64482648FE8987CB}" {
+        Code "de_de"
+        StringTableRuntime "{6A603A21F07DF8E1}Language/ACE_Radio_language.de_de.conf"
+       }
+       LanguageDefinition "{64482648FE8987EF}" {
+        Code "en_us"
+        StringTableRuntime "{3490B06A9A8EFDE0}Language/ACE_Radio_language.en_us.conf"
+       }
+       LanguageDefinition "{64482648FE89870D}" {
+        Code "es_es"
+        StringTableRuntime "{F1DCFDE3748C96FF}Language/ACE_Radio_language.es_es.conf"
+       }
+       LanguageDefinition "{64482648FE898729}" {
+        Code "fr_fr"
+        StringTableRuntime "{4A7408D4920F75FD}Language/ACE_Radio_language.fr_fr.conf"
+       }
+       LanguageDefinition "{64482648FE89877F}" {
+        Code "it_it"
+        StringTableRuntime "{CA6887E03F2DF604}Language/ACE_Radio_language.it_it.conf"
+       }
+       LanguageDefinition "{64482648FE89869A}" {
+        Code "ja_jp"
+        StringTableRuntime "{DA733A72015CC6AF}Language/ACE_Radio_language.ja_jp.conf"
+       }
+       LanguageDefinition "{64482648FE8986B6}" {
+        Code "ko_kr"
+        StringTableRuntime "{7ACD12DE9271C590}Language/ACE_Radio_language.ko_kr.conf"
+       }
+       LanguageDefinition "{64482648FE8986D3}" {
+        Code "pl_pl"
+        StringTableRuntime "{26BCB4242C9E59EC}Language/ACE_Radio_language.pl_pl.conf"
+       }
+       LanguageDefinition "{64482648FE8986CF}" {
+        Code "pt_br"
+        StringTableRuntime "{F3CB2EE817609356}Language/ACE_Radio_language.pt_br.conf"
+       }
+       LanguageDefinition "{64482648FE89861A}" {
+        Code "ru_ru"
+        StringTableRuntime "{A68A3A408A19F620}Language/ACE_Radio_language.ru_ru.conf"
+       }
+       LanguageDefinition "{64482648FE89863A}" {
+        Code "uk_ua"
+        StringTableRuntime "{2CD26FB6E6374875}Language/ACE_Radio_language.uk_ua.conf"
+       }
+       LanguageDefinition "{64482648FE8985B6}" {
+        Code "zh_cn"
+        StringTableRuntime "{F662018BDF979868}Language/ACE_Radio_language.zh_cn.conf"
+       }
+      }
+     }
+    }
+   }
+  }
+  GameProjectConfig XBOX_ONE {
+  }
+  GameProjectConfig XBOX_SERIES {
+  }
+  GameProjectConfig PS4 {
+  }
+  GameProjectConfig PS5 {
+  }
+  GameProjectConfig HEADLESS {
+  }
+ }
+}
\ No newline at end of file
diff --git a/addons/radio/license.txt b/addons/radio/license.txt
new file mode 100644
index 00000000..6ebf24cf
--- /dev/null
+++ b/addons/radio/license.txt
@@ -0,0 +1,18 @@
+ACE Anvil - An experimental realism mod for Arma Reforger
+Copyright (C) 2024  acemod
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+When publishing a derivative of this product you may not use a name that
+might create the impression that your version is an official release.
+
+A full copy of this license can be found at the following address:
+https://github.com/acemod/ACE-Anvil/blob/master/LICENSE.
diff --git a/addons/radio/scripts/Game/ACE_Radio/Settings/ACE_Radio_SettingsModule.c b/addons/radio/scripts/Game/ACE_Radio/Settings/ACE_Radio_SettingsModule.c
new file mode 100644
index 00000000..712c83f4
--- /dev/null
+++ b/addons/radio/scripts/Game/ACE_Radio/Settings/ACE_Radio_SettingsModule.c
@@ -0,0 +1,28 @@
+enum ACE_ERadioBeep
+{
+	OFF		= 1 << 0,
+	NORMAL	= 1 << 1,
+	LOW		= 1 << 2,
+}
+
+class ACE_Radio_SettingsModule: ModuleGameSettings
+{
+	const string BEEPCH1 = "m_eBeepCh1";
+	const string BEEPCH2 = "m_eBeepCh2";
+	const string BEEPCYCLE = "m_bBeepCycle";
+	
+	[Attribute(ACE_ERadioBeep.NORMAL.ToString(), uiwidget: UIWidgets.ComboBox, desc: "Sound to play when activating VoN Ch1", enums: ParamEnumArray.FromEnum(ACE_ERadioBeep))]
+	ACE_ERadioBeep m_eBeepCh1;
+
+	[Attribute(ACE_ERadioBeep.LOW.ToString(), uiwidget: UIWidgets.ComboBox, desc: "Sound to play when activating VoN Ch2", enums: ParamEnumArray.FromEnum(ACE_ERadioBeep))]
+	ACE_ERadioBeep m_eBeepCh2;
+	
+	[Attribute("1", desc: "Should radio channel beep sound play when cycling transreceivers")]
+	bool m_bBeepCycle;
+	
+	//------------------------------------------------------------------------------------------------
+	static BaseContainer GetInstance()
+	{
+		return GetGame().GetGameUserSettings().GetModule("ACE_Radio_SettingsModule");
+	}
+}
diff --git a/addons/radio/scripts/Game/ACE_Radio/UI/ACE_SettingsSubMenu.c b/addons/radio/scripts/Game/ACE_Radio/UI/ACE_SettingsSubMenu.c
new file mode 100644
index 00000000..79c1e043
--- /dev/null
+++ b/addons/radio/scripts/Game/ACE_Radio/UI/ACE_SettingsSubMenu.c
@@ -0,0 +1,94 @@
+modded class ACE_SettingsSubMenu : SCR_SettingsSubMenuBase
+{	
+	//------------------------------------------------------------------------------------------------
+	override void OnTabCreate(Widget menuRoot, ResourceName buttonsLayout, int index)
+	{
+		BaseContainer radioSettings = ACE_Radio_SettingsModule.GetInstance();
+		VerticalLayoutWidget wRadioRoot = VerticalLayoutWidget.Cast(m_wRoot.FindAnyWidget("ACE_Radio"));
+
+		super.OnTabCreate(menuRoot, buttonsLayout, index);
+
+		if (!radioSettings || !wRadioRoot)
+		{
+			PrintFormat("Unable to load ACE_Radio Radio settings: %1, %2", radioSettings, wRadioRoot, level: LogLevel.ERROR);
+			return;
+		}
+
+		// Radio beep Ch1
+		SCR_SelectionWidgetComponent checkBoxBeep1 = SCR_SelectionWidgetComponent.GetSelectionComponent("Beep_Ch1", wRadioRoot);
+		if (checkBoxBeep1)
+		{
+			int value;
+			radioSettings.Get(ACE_Radio_SettingsModule.BEEPCH1, value);
+
+			checkBoxBeep1.SetCurrentItem(value >> 1, false, false); //--- Shift the value, because it's a flag
+			checkBoxBeep1.m_OnChanged.Insert(SetBeepCh1);
+		}
+		else
+		{
+			Print("Radio setting 'Beep_Ch1' not found", LogLevel.WARNING);
+		}
+
+		// Radio beep Ch2
+		SCR_SelectionWidgetComponent checkBoxBeep2 = SCR_SelectionWidgetComponent.GetSelectionComponent("Beep_Ch2", wRadioRoot);
+		if (checkBoxBeep2)
+		{
+			int value;
+			radioSettings.Get(ACE_Radio_SettingsModule.BEEPCH2, value);
+
+			checkBoxBeep2.SetCurrentItem(value >> 1, false, false); //--- Shift the value, because it's a flag
+			checkBoxBeep2.m_OnChanged.Insert(SetBeepCh2);
+		}
+		else
+		{
+			Print("Radio setting 'Beep_Ch2' not found", LogLevel.WARNING);
+		}
+		
+		// Cycle transreceiver beep
+		SCR_SelectionWidgetComponent checkBoxCycle = SCR_SelectionWidgetComponent.GetSelectionComponent("Beep_Cycle", wRadioRoot);
+		if (checkBoxCycle)
+		{
+			bool value;
+			radioSettings.Get(ACE_Radio_SettingsModule.BEEPCYCLE, value);
+
+			checkBoxCycle.SetCurrentItem(value, false, false);
+			checkBoxCycle.m_OnChanged.Insert(SetBeepCycle);
+		}
+		else
+		{
+			Print("Radio setting 'Beep_Cycle' not found", LogLevel.WARNING);
+		}
+	}
+
+	//------------------------------------------------------------------------------------------------
+	protected void SetBeepCh1(SCR_SelectionWidgetComponent checkBox, int state)
+	{
+		SetBeepProp(checkBox, state, ACE_Radio_SettingsModule.BEEPCH1);
+	}
+
+	//------------------------------------------------------------------------------------------------
+	protected void SetBeepCh2(SCR_SelectionWidgetComponent checkBox, int state)
+	{
+		SetBeepProp(checkBox, state, ACE_Radio_SettingsModule.BEEPCH2);
+	}
+
+	//------------------------------------------------------------------------------------------------
+	protected void SetBeepProp(SCR_SelectionWidgetComponent checkBox, int state, string prop)
+	{
+		PrintFormat("SetBeepProp: %1, %2", prop, state, level: LogLevel.NORMAL);
+		
+		state = 1 << state; //--- Shift the value, because it's a flag
+
+		ACE_Radio_SettingsModule.GetInstance().Set(prop, state);
+		GetGame().UserSettingsChanged();
+	}
+	
+	//------------------------------------------------------------------------------------------------
+	protected void SetBeepCycle(SCR_SelectionWidgetComponent checkBox, bool state)
+	{
+		PrintFormat("SetBeepCycle: %1", state, level: LogLevel.NORMAL);
+
+		ACE_Radio_SettingsModule.GetInstance().Set(ACE_Radio_SettingsModule.BEEPCYCLE, state);
+		GetGame().UserSettingsChanged();
+	}
+}
diff --git a/addons/radio/scripts/Game/ACE_Radio/VON/SCR_VONController.c b/addons/radio/scripts/Game/ACE_Radio/VON/SCR_VONController.c
new file mode 100644
index 00000000..7be75409
--- /dev/null
+++ b/addons/radio/scripts/Game/ACE_Radio/VON/SCR_VONController.c
@@ -0,0 +1,86 @@
+modded class SCR_VONController: ScriptComponent
+{
+	const string ACE_SOUND_START_HIGH = "Sounds/ACE_Radio/beep_high.wav";
+	const string ACE_SOUND_START_LOW = "Sounds/ACE_Radio/beep_low.wav";
+	const string ACE_SOUND_END = "Sounds/ACE_Radio/click_off.wav";
+
+	protected ACE_ERadioBeep m_eBeepTypeCh1;
+	protected ACE_ERadioBeep m_eBeepTypeCh2;
+	protected bool m_bBeepCycle;
+
+	//------------------------------------------------------------------------------------------------
+	override void OnPostInit(IEntity owner)
+	{
+		super.OnPostInit(owner);
+
+		ACE_LoadSettings();
+		GetGame().OnUserSettingsChangedInvoker().Insert(ACE_LoadSettings);
+	}
+
+	//------------------------------------------------------------------------------------------------
+	protected void ACE_LoadSettings()
+	{
+		BaseContainer settings = ACE_Radio_SettingsModule.GetInstance();
+
+		settings.Get(ACE_Radio_SettingsModule.BEEPCH1, m_eBeepTypeCh1);
+		settings.Get(ACE_Radio_SettingsModule.BEEPCH2, m_eBeepTypeCh2);
+		settings.Get(ACE_Radio_SettingsModule.BEEPCYCLE, m_bBeepCycle);
+
+		PrintFormat("SCR_VONController.ACE_LoadSettings: %1, %2, %3", m_eBeepTypeCh1, m_eBeepTypeCh2, m_bBeepCycle, level: LogLevel.DEBUG);
+	}
+
+	//------------------------------------------------------------------------------------------------
+	protected string ACE_GetBeepSound(int transreceiverNumber)
+	{
+		ACE_ERadioBeep beepType;
+		if (transreceiverNumber == 1)
+			beepType = m_eBeepTypeCh1;
+		else
+			beepType = m_eBeepTypeCh2;
+
+		switch (beepType) {
+			case ACE_ERadioBeep.LOW:
+				return ACE_SOUND_START_LOW;
+			case ACE_ERadioBeep.NORMAL:
+				return ACE_SOUND_START_HIGH;
+		}
+
+		return "";
+	}
+
+	//------------------------------------------------------------------------------------------------
+	override void SetActiveTransmit(notnull SCR_VONEntry entry)
+	{
+		if (m_ActiveEntry != entry && !m_bBeepCycle)
+		{
+			super.SetActiveTransmit(entry);
+			return;
+		}
+		
+		super.SetActiveTransmit(entry);
+
+		SCR_VONEntryRadio radioEntry = SCR_VONEntryRadio.Cast(entry);
+		if (!radioEntry)
+			return;
+
+		string beep = ACE_GetBeepSound(radioEntry.GetTransceiverNumber());
+		if (beep != "")
+			// TODO use sound event SCR_UISoundEntity.SoundEvent(SCR_SoundEvent.SOUND_RADIO_TURN_OFF);
+			AudioSystem.PlaySound(beep);
+	}
+
+	//------------------------------------------------------------------------------------------------
+	override void DeactivateVON(EVONTransmitType transmitType = EVONTransmitType.NONE)
+	{
+		if (m_bIsActive)
+		{
+			if (transmitType != EVONTransmitType.DIRECT)
+			{
+				// TODO use sound event SCR_UISoundEntity.SoundEvent(SCR_SoundEvent.SOUND_RADIO_TURN_OFF);
+				AudioSystem.PlaySound(ACE_SOUND_END);
+			}
+		};
+
+		super.DeactivateVON(transmitType);
+	}
+}
diff --git a/addons/radio/thumbnail.png b/addons/radio/thumbnail.png
new file mode 100644
index 00000000..3d428314
Binary files /dev/null and b/addons/radio/thumbnail.png differ