diff --git a/src/client.c b/src/client.c
index e76bee9f6fa1a7063d682c8c46b04e884fe05d64..1ea7d06319ff36a07f6a475a48767c3bb5f97b7e 100644
--- a/src/client.c
+++ b/src/client.c
@@ -4295,12 +4295,21 @@ clientMove (Client * c, XEvent * ev)
     g2 = myScreenGrabPointer (screen_info, ButtonMotionMask | ButtonReleaseMask,
                               myDisplayGetCursorMove (display_info),
                               myDisplayGetCurrentTime (display_info));
-    if (!g1 || !g2)
+    if (passdata.use_keys && !g1)
     {
-        TRACE ("grab failed in clientMove");
+        TRACE ("keyboard grab failed in clientMove");
 
         gdk_beep ();
         myScreenUngrabKeyboard (screen_info);
+
+        return;
+    }
+
+    if (!g2)
+    {
+        TRACE ("button grab failed in clientMove");
+
+        gdk_beep ();
         myScreenUngrabPointer (screen_info);
 
         return;
@@ -4363,7 +4372,10 @@ clientMove (Client * c, XEvent * ev)
     }
     clientConfigure (c, &wc, changes, NO_CFG_FLAG);
 
-    myScreenUngrabKeyboard (screen_info);
+    if (g1)
+    {
+        myScreenUngrabKeyboard (screen_info);
+    }
     if (!passdata.released)
     {
         /* If this is a drag-move, wait for the button to be released.
@@ -4840,12 +4852,21 @@ clientResize (Client * c, int corner, XEvent * ev)
                               myDisplayGetCursorResize(display_info, passdata.corner),
                               myDisplayGetCurrentTime (display_info));
 
-    if (!g1 || !g2)
+    if (passdata.use_keys && !g1)
     {
-        TRACE ("grab failed in clientResize");
+        TRACE ("keyboard grab failed in clientResize");
 
         gdk_beep ();
         myScreenUngrabKeyboard (screen_info);
+
+        return;
+    }
+
+    if (!g2)
+    {
+        TRACE ("button grab failed in clientResize");
+
+        gdk_beep ();
         myScreenUngrabPointer (screen_info);
 
         return;
@@ -4910,7 +4931,10 @@ clientResize (Client * c, int corner, XEvent * ev)
     c->xsync_waiting = FALSE;
 #endif /* HAVE_XSYNC */
 
-    myScreenUngrabKeyboard (screen_info);
+    if (g1)
+    {
+        myScreenUngrabKeyboard (screen_info);
+    }
     if (!passdata.released)
     {
         /* If this is a drag-resize, wait for the button to be released.
diff --git a/src/focus.c b/src/focus.c
index f3a0d8a42a183aa809142529772ee47e88f4a284..4a72e08b0de9ae3b7dff7e3d32c23fc810fc36e6 100644
--- a/src/focus.c
+++ b/src/focus.c
@@ -305,12 +305,12 @@ clientPassFocus (ScreenInfo *screen_info, Client *c, Client *exclude)
     new_focus = NULL;
     current_focus = client_focus;
     c2 = NULL;
-
+#if 0
     if (pending_focus)
     {
         current_focus = pending_focus;
     }
-
+#endif
     if ((c || current_focus) && (c != current_focus))
     {
         return;
diff --git a/src/keyboard.c b/src/keyboard.c
index 83648e5d069423c7e0fc5a1ec879aeea5e3248c7..e16a2ab833198a294f615120823ab1062167f378 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -160,50 +160,50 @@ grabKey (Display * dpy, MyKey * key, Window w)
 
     TRACE ("entering grabKey");
 
-    status=GrabSuccess;
+    status = GrabSuccess;
     if (key->keycode)
     {
         if (key->modifier == 0)
         {
             status |=
-                XGrabKey (dpy, key->keycode, AnyModifier, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                XGrabKey (dpy, key->keycode, AnyModifier, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
         }
         else
         {
             /* Here we grab all combinations of well known modifiers */
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                                        key->modifier, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
                                         key->modifier | ScrollLockMask, w,
-                                        FALSE, GrabModeAsync, GrabModeSync);
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
                                         key->modifier | NumLockMask, w,
-                                        FALSE, GrabModeAsync, GrabModeSync);
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
                                         key->modifier | LockMask, w,
-                                        FALSE, GrabModeAsync, GrabModeSync);
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier | ScrollLockMask | NumLockMask, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                                        key->modifier | ScrollLockMask | NumLockMask, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier | ScrollLockMask | LockMask, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                                        key->modifier | ScrollLockMask | LockMask, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier | LockMask | NumLockMask, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                                        key->modifier | LockMask | NumLockMask, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier | ScrollLockMask | LockMask | NumLockMask,
-                                        w, FALSE, GrabModeAsync, GrabModeSync);
+                                        key->modifier | ScrollLockMask | LockMask | NumLockMask, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
         }
     }
 
@@ -225,7 +225,7 @@ grabButton (Display * dpy, int button, int modifier, Window w)
 
     TRACE ("entering grabButton");
 
-    status=GrabSuccess;
+    status = GrabSuccess;
     if (modifier == AnyModifier)
     {
         status |=