diff --git a/CHANGELOG.md b/CHANGELOG.md
index bac15df..d96803c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,20 @@ All notable changes to Aperture Image Viewer are documented here. The format fol
## [Unreleased]
+## [0.8.4-beta1] - 2026-08-21
+
+### Fixed
+- **Tile-pane Up/Down** move in the same visual column (Explorer-style), including
+ across date-section headers, instead of jumping by linear item index. An empty
+ cell (short last row) lands on the nearest tile in that column, then the nearest
+ in the row — not a section header and not a random index.
+- **PageUp/PageDown** scroll roughly one viewport (regardless of zoom / tile size)
+ and keep the selection in the same column at the same screen Y. They no longer
+ skip N items or jump to a date-section header.
+- **Tab / Shift+Tab** cycle only the folder tree and the tile pane, do not change
+ either pane's selection, and skip the ribbon (hamburger / command bar / search).
+ Search stays on `/` and Ctrl+F.
+
## [0.8.3-beta1] - 2026-08-21
### Fixed
diff --git a/src/Aperture.App/Aperture.App.csproj b/src/Aperture.App/Aperture.App.csproj
index 2f98a89..874e3f9 100644
--- a/src/Aperture.App/Aperture.App.csproj
+++ b/src/Aperture.App/Aperture.App.csproj
@@ -16,7 +16,7 @@
trueAssets\aperture.icoAperture
- 0.8.3-beta1
+ 0.8.4-beta1Aperture Image ViewerAperture Image ViewerA fast local image & video browser for Windows.
diff --git a/src/Aperture.App/LibraryPaneFocus.cs b/src/Aperture.App/LibraryPaneFocus.cs
index 6bca3bc..bbd7ca0 100644
--- a/src/Aperture.App/LibraryPaneFocus.cs
+++ b/src/Aperture.App/LibraryPaneFocus.cs
@@ -38,6 +38,15 @@ internal enum Hit
public static bool ShouldFocusContentsPane(DependencyObject? originalSource, IInputElement? currentFocus) =>
ShouldFocusContentsPane(Classify(originalSource, currentFocus));
+ ///
+ /// True when keyboard focus is arriving from outside a pane onto an item
+ /// that is not the current selection. WPF /
+ /// often focus (and therefore select) the first
+ /// item on entry — redirect so Tab does not change the pane's selection.
+ ///
+ public static bool ShouldKeepExistingSelection(bool fromOutside, bool newFocusIsItem, bool newFocusIsSelected) =>
+ fromOutside && newFocusIsItem && !newFocusIsSelected;
+
public static Hit Classify(DependencyObject? originalSource, IInputElement? currentFocus)
{
// A dialog keeps focus even if the click somehow reached the pane
diff --git a/src/Aperture.App/MainWindow.xaml b/src/Aperture.App/MainWindow.xaml
index 4eb60bf..c1e8f0a 100644
--- a/src/Aperture.App/MainWindow.xaml
+++ b/src/Aperture.App/MainWindow.xaml
@@ -287,11 +287,12 @@
+ BorderThickness="0,0,0,1" KeyboardNavigation.TabNavigation="None">
@@ -314,12 +315,13 @@
+ IsTabStop="False" Cursor="Hand" />
@@ -525,7 +527,7 @@
+ BorderThickness="0,1,0,0" KeyboardNavigation.TabNavigation="None">
@@ -571,14 +573,14 @@
+ BorderThickness="0,0,1,0" KeyboardNavigation.TabNavigation="Once">