diff --git a/CHANGELOG.md b/CHANGELOG.md
index 91c4083..5fd84ae 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,10 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
-## [1.20.19] - 2026-06-12
+## [1.20.20] - 2026-06-12
+
+### Fixed
+- **Much better screen-reader support across the app.** Many buttons, toggles, drop-downs, search/filter boxes, data grids, and per-row actions had no accessible name, so screen readers announced them generically (or not at all). Added clear, specific accessible names to interactive controls across 21 tabs โ including destructive actions (Delete, Shred, Clear History), per-row buttons (now named after the item they act on), and unlabeled inputs. No visual change.
### Fixed
- **Activity history can no longer be corrupted by concurrent updates.** The recent-actions log saved its data outside the lock that protects it, so two actions logged at the same time could clash and produce a "collection modified" error or a truncated file. It now writes a consistent snapshot taken under the lock.
diff --git a/SysManager/SysManager/SysManager.csproj b/SysManager/SysManager/SysManager.csproj
index 42b6f2b..9d024b8 100644
--- a/SysManager/SysManager/SysManager.csproj
+++ b/SysManager/SysManager/SysManager.csproj
@@ -10,9 +10,9 @@
SysManager
true
NU1603;NU1701
- 1.20.19
- 1.20.19.0
- 1.20.19.0
+ 1.20.20
+ 1.20.20.0
+ 1.20.20.0
SysManager
SysManager โ Windows system monitoring toolkit by laurentiu021. Network, updates, health, logs, safe deep cleanup.
https://github.com/laurentiu021/SystemManager
diff --git a/SysManager/SysManager/Views/AppAlertsView.xaml b/SysManager/SysManager/Views/AppAlertsView.xaml
index ceea052..cab5ede 100644
--- a/SysManager/SysManager/Views/AppAlertsView.xaml
+++ b/SysManager/SysManager/Views/AppAlertsView.xaml
@@ -28,14 +28,19 @@
-
+
diff --git a/SysManager/SysManager/Views/AppUpdatesView.xaml b/SysManager/SysManager/Views/AppUpdatesView.xaml
index 61d69a9..b3b11f0 100644
--- a/SysManager/SysManager/Views/AppUpdatesView.xaml
+++ b/SysManager/SysManager/Views/AppUpdatesView.xaml
@@ -26,6 +26,7 @@
Visibility="{Binding IsElevated, Converter={StaticResource FlexVis}, ConverterParameter=Inverse}">
-
-
-
-
+
+
+
+
@@ -75,12 +76,14 @@
diff --git a/SysManager/SysManager/Views/BulkInstallerView.xaml b/SysManager/SysManager/Views/BulkInstallerView.xaml
index 3a64a86..bcbeb1b 100644
--- a/SysManager/SysManager/Views/BulkInstallerView.xaml
+++ b/SysManager/SysManager/Views/BulkInstallerView.xaml
@@ -146,6 +146,7 @@
Command="{Binding DataContext.AddToInstallListCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
CommandParameter="{Binding}"
Style="{StaticResource GhostButton}"
+ AutomationProperties.Name="{Binding Name, StringFormat='Add {0} to install list'}"
Padding="10,4" FontSize="11"/>
@@ -204,6 +205,7 @@
diff --git a/SysManager/SysManager/Views/ContextMenuView.xaml b/SysManager/SysManager/Views/ContextMenuView.xaml
index ebbe9ef..6d7c1b9 100644
--- a/SysManager/SysManager/Views/ContextMenuView.xaml
+++ b/SysManager/SysManager/Views/ContextMenuView.xaml
@@ -32,6 +32,7 @@
Visibility="{Binding IsElevated, Converter={StaticResource FlexVis}, ConverterParameter=Inverse}">
@@ -137,9 +141,11 @@
@@ -153,9 +159,11 @@
diff --git a/SysManager/SysManager/Views/DeepCleanupView.xaml b/SysManager/SysManager/Views/DeepCleanupView.xaml
index 75ffa88..92c89e3 100644
--- a/SysManager/SysManager/Views/DeepCleanupView.xaml
+++ b/SysManager/SysManager/Views/DeepCleanupView.xaml
@@ -71,7 +71,7 @@
-
+
@@ -109,7 +109,7 @@
-
+
@@ -154,12 +154,12 @@
-
-
+
-
+
-
+
@@ -201,10 +201,12 @@
diff --git a/SysManager/SysManager/Views/DiskAnalyzerView.xaml b/SysManager/SysManager/Views/DiskAnalyzerView.xaml
index 6e57874..e368ff3 100644
--- a/SysManager/SysManager/Views/DiskAnalyzerView.xaml
+++ b/SysManager/SysManager/Views/DiskAnalyzerView.xaml
@@ -30,16 +30,17 @@
-
-
-
-
-
@@ -68,7 +69,7 @@
-
@@ -106,6 +107,7 @@
@@ -137,7 +143,8 @@
+ Padding="6,2" FontSize="10" VerticalAlignment="Center"
+ AutomationProperties.Name="{Binding Hostname, StringFormat='Remove host entry {0}'}"/>
@@ -148,14 +155,17 @@
+ Padding="18,8" Margin="8,0,0,0"
+ AutomationProperties.Name="Add host entry"/>
+ VerticalAlignment="Center"
+ AutomationProperties.Name="New host entry hostname"/>
+ MinWidth="140" VerticalAlignment="Center"
+ AutomationProperties.Name="New host entry IP address"/>
diff --git a/SysManager/SysManager/Views/DuplicateFileView.xaml b/SysManager/SysManager/Views/DuplicateFileView.xaml
index d7f6d05..f3435d4 100644
--- a/SysManager/SysManager/Views/DuplicateFileView.xaml
+++ b/SysManager/SysManager/Views/DuplicateFileView.xaml
@@ -30,19 +30,24 @@
-
-
-
-
-
@@ -55,7 +60,8 @@
-
@@ -63,6 +64,7 @@
-
-
-
+
+
+
@@ -131,7 +131,7 @@
-
+
@@ -158,10 +158,10 @@
-
+
-
-
+
+
@@ -169,27 +169,27 @@
-
+
-
+
-
+
-
+
-
+
@@ -197,6 +197,7 @@
-
-
+
+
@@ -92,17 +95,21 @@
@@ -112,12 +119,13 @@
-
+
@@ -127,10 +135,11 @@
-
+
@@ -140,12 +149,13 @@
-
+
@@ -169,7 +179,7 @@
-
+
@@ -192,7 +203,7 @@
-
+
@@ -215,6 +227,7 @@
@@ -231,6 +244,7 @@
@@ -254,6 +268,7 @@
Visibility="{Binding IsHibernationEnabled, Converter={StaticResource FlexVis}, ConverterParameter=Inverse}"/>
diff --git a/SysManager/SysManager/Views/PingView.xaml b/SysManager/SysManager/Views/PingView.xaml
index cc27eae..480d64a 100644
--- a/SysManager/SysManager/Views/PingView.xaml
+++ b/SysManager/SysManager/Views/PingView.xaml
@@ -24,15 +24,18 @@
DockPanel.Dock="Right" VerticalAlignment="Center">
+ Style="{StaticResource GhostButton}" Margin="6,0,0,0"
+ AutomationProperties.Name="Clear ping history"/>
@@ -89,7 +92,8 @@
+ SelectedItem="{Binding Shared.SelectedPreset, Mode=TwoWay}" Width="200"
+ AutomationProperties.Name="Target preset"/>
-
+
@@ -152,8 +157,10 @@
-
-
+
+
@@ -169,10 +176,12 @@
-
+
-
+
@@ -75,6 +79,7 @@
Style="{StaticResource Subtle}"/>
diff --git a/SysManager/SysManager/Views/ProcessManagerView.xaml b/SysManager/SysManager/Views/ProcessManagerView.xaml
index 2918c1f..5208d85 100644
--- a/SysManager/SysManager/Views/ProcessManagerView.xaml
+++ b/SysManager/SysManager/Views/ProcessManagerView.xaml
@@ -29,7 +29,8 @@
+ Style="{StaticResource SecondaryButton}" Margin="0,0,8,0"
+ AutomationProperties.Name="Refresh process list"/>
@@ -42,7 +43,8 @@
-
+
diff --git a/SysManager/SysManager/Views/ServicesView.xaml b/SysManager/SysManager/Views/ServicesView.xaml
index 9885e85..1ea1cd2 100644
--- a/SysManager/SysManager/Views/ServicesView.xaml
+++ b/SysManager/SysManager/Views/ServicesView.xaml
@@ -31,7 +31,8 @@
Visibility="{Binding IsElevated, Converter={StaticResource FlexVis}, ConverterParameter=Inverse}">
+ Style="{StaticResource AdminButton}" DockPanel.Dock="Right" Padding="14,8"
+ AutomationProperties.Name="Run as administrator"/>
@@ -62,7 +63,8 @@
+ Style="{StaticResource SecondaryButton}" Margin="0,0,8,0"
+ AutomationProperties.Name="Refresh services"/>
@@ -82,18 +84,22 @@
+ Style="{StaticResource FilterChip}"
+ AutomationProperties.Name="Filter safe services"/>
+ Style="{StaticResource FilterChipCaution}"
+ AutomationProperties.Name="Filter caution services"/>
+ Style="{StaticResource FilterChipCritical}"
+ AutomationProperties.Name="Filter critical services"/>
+ Style="{StaticResource FilterChip}"
+ AutomationProperties.Name="Show all services"/>
@@ -147,19 +153,23 @@
+ CommandParameter="{Binding}"
+ AutomationProperties.Name="{Binding DisplayName, StringFormat='Start {0}'}"/>
+ CommandParameter="{Binding}"
+ AutomationProperties.Name="{Binding DisplayName, StringFormat='Stop {0}'}"/>
+ CommandParameter="{Binding}"
+ AutomationProperties.Name="{Binding DisplayName, StringFormat='Disable {0}'}"/>
+ CommandParameter="{Binding}"
+ AutomationProperties.Name="{Binding DisplayName, StringFormat='Enable {0}'}"/>
diff --git a/SysManager/SysManager/Views/ShortcutCleanerView.xaml b/SysManager/SysManager/Views/ShortcutCleanerView.xaml
index 2df9a66..3e2e89b 100644
--- a/SysManager/SysManager/Views/ShortcutCleanerView.xaml
+++ b/SysManager/SysManager/Views/ShortcutCleanerView.xaml
@@ -29,23 +29,30 @@
@@ -52,7 +54,7 @@
-
+
@@ -65,6 +67,7 @@
@@ -76,7 +79,7 @@
-
+
@@ -99,6 +102,7 @@
@@ -51,6 +54,7 @@
diff --git a/SysManager/SysManager/Views/TracerouteView.xaml b/SysManager/SysManager/Views/TracerouteView.xaml
index c615ce3..83f14ae 100644
--- a/SysManager/SysManager/Views/TracerouteView.xaml
+++ b/SysManager/SysManager/Views/TracerouteView.xaml
@@ -46,7 +46,8 @@
-
@@ -73,7 +74,7 @@
-
+
diff --git a/SysManager/SysManager/Views/UninstallerView.xaml b/SysManager/SysManager/Views/UninstallerView.xaml
index 3bea921..a08c777 100644
--- a/SysManager/SysManager/Views/UninstallerView.xaml
+++ b/SysManager/SysManager/Views/UninstallerView.xaml
@@ -107,11 +107,13 @@