diff --git a/Changelog.md b/Changelog.md
index 8734e98..f7bd4b9 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,8 +1,12 @@
 # Changelog
 
-xx/0x/2026
+01/04/2026
 
 Version 8.0.15
+* Fixed [#40](https://github.com/PWagner1/Windows-API-CodePack-NET/issues/40), ExplorerBrowser control now only processes keyboard accelerators when it has focus, preventing Tab key interception for other controls
+* Updated `PreFilterMessage` to check message target and focus state before calling `TranslateAcceleratorIO`
+* Added `IsMessageForExplorerBrowser` helper method to verify message window ownership
+* Added `GetParent` Windows API function to `WindowNativeMethods` for window hierarchy traversal
 * Implemented [#39](https://github.com/PWagner1/Windows-API-CodePack-NET/issues/39), Added Authenticode signing support for DLLs
 * Added MSBuild properties for Authenticode signing configuration (`EnableAuthenticodeSigning`, `CodeSigningCertificatePath`, `CodeSigningCertificatePassword`, `CodeSigningCertificateThumbprint`)
 * Integrated Authenticode signing into GitHub Actions release workflow
diff --git a/Source/Current/Windows API CodePack/Components/Shell/Common/IconReference.cs b/Source/Current/Windows API CodePack/Components/Shell/Common/IconReference.cs
index ff23b91..6d32cce 100644
--- a/Source/Current/Windows API CodePack/Components/Shell/Common/IconReference.cs	
+++ b/Source/Current/Windows API CodePack/Components/Shell/Common/IconReference.cs	
@@ -13,7 +13,7 @@ public struct IconReference
 
     private string? _moduleName;
     private string _referencePath;
-    static private readonly char[] CommaSeparator = new char[] { ',' };
+    private static readonly char[] CommaSeparator = new char[] { ',' };
 
     #endregion
 
diff --git a/Source/Current/Windows API CodePack/Components/Shell/Common/WindowNativeMethods.cs b/Source/Current/Windows API CodePack/Components/Shell/Common/WindowNativeMethods.cs
index 6bf8676..1d30446 100644
--- a/Source/Current/Windows API CodePack/Components/Shell/Common/WindowNativeMethods.cs	
+++ b/Source/Current/Windows API CodePack/Components/Shell/Common/WindowNativeMethods.cs	
@@ -1,4 +1,4 @@
-﻿namespace Microsoft.WindowsAPICodePack.Shell;
+namespace Microsoft.WindowsAPICodePack.Shell;
 
 internal static class WindowNativeMethods
 {
@@ -21,6 +21,14 @@ internal static class WindowNativeMethods
     public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
     [DllImport("user32.dll", CharSet = CharSet.Auto)]
     public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int width, int height, SetWindowPosFlags flags);
+    
+    /// <summary>
+    /// Retrieves the handle to the parent window of the specified window.
+    /// </summary>
+    /// <param name="hWnd">A handle to the window whose parent window handle is to be retrieved.</param>
+    /// <returns>If the window is a child window, the return value is a handle to the parent window. If the window is a top-level window, the return value is IntPtr.Zero.</returns>
+    [DllImport("user32.dll", SetLastError = true)]
+    public static extern IntPtr GetParent(IntPtr hWnd);
 }
 
 internal enum WindowLongFlags
diff --git a/Source/Current/Windows API CodePack/Components/Shell/ExplorerBrowser/ExplorerBrowser.cs b/Source/Current/Windows API CodePack/Components/Shell/ExplorerBrowser/ExplorerBrowser.cs
index 436d8ee..e336c2f 100644
--- a/Source/Current/Windows API CodePack/Components/Shell/ExplorerBrowser/ExplorerBrowser.cs	
+++ b/Source/Current/Windows API CodePack/Components/Shell/ExplorerBrowser/ExplorerBrowser.cs	
@@ -1217,13 +1217,66 @@ HResult ICommDlgBrowser3.OnPreViewCreated(IShellView ppshv)
 
     bool IMessageFilter.PreFilterMessage(ref System.Windows.Forms.Message m)
     {
-        HResult hr = HResult.False;
+        // Only process keyboard messages
+        if (m.Msg < (int)WindowMessage.KeyFirst || m.Msg > (int)WindowMessage.KeyLast)
+        {
+            return false;
+        }
+
+        // Check if the message is for this control or its child windows
+        if (!IsMessageForExplorerBrowser(m.HWnd))
+        {
+            return false;
+        }
+
+        // Only process if ExplorerBrowser has focus
         if (ExplorerBrowserControl is IInputObject inputObject)
         {
-            // translate keyboard input
-            hr = inputObject.TranslateAcceleratorIO(ref m);
+            // Check if ExplorerBrowser actually has focus before processing
+            HResult focusResult = inputObject.HasFocusIO();
+            if (focusResult != HResult.Ok)
+            {
+                return false;
+            }
+
+            // translate keyboard input only when ExplorerBrowser has focus
+            HResult hr = inputObject.TranslateAcceleratorIO(ref m);
+            return (hr == HResult.Ok);
+        }
+
+        return false;
+    }
+
+    /// <summary>
+    /// Checks if a window handle belongs to this ExplorerBrowser control or its child windows.
+    /// </summary>
+    /// <param name="hwnd">The window handle to check.</param>
+    /// <returns>True if the handle belongs to this control or its children; otherwise, false.</returns>
+    private bool IsMessageForExplorerBrowser(IntPtr hwnd)
+    {
+        if (hwnd == IntPtr.Zero)
+        {
+            return false;
+        }
+
+        // Check if the message is for this control
+        if (hwnd == Handle)
+        {
+            return true;
         }
-        return (hr == HResult.Ok);
+
+        // Check if the message is for a child window of this control
+        IntPtr parent = WindowNativeMethods.GetParent(hwnd);
+        while (parent != IntPtr.Zero)
+        {
+            if (parent == Handle)
+            {
+                return true;
+            }
+            parent = WindowNativeMethods.GetParent(parent);
+        }
+
+        return false;
     }
 
     #endregion
