diff --git a/src/client.c b/src/client.c
index 6c1c71815e580b0a182cb58e22f035b96537fe22..4ed822266328c03fcf370019c2888e81877a430a 100644
--- a/src/client.c
+++ b/src/client.c
@@ -74,12 +74,6 @@
     PropertyChangeMask
 
 /* Useful macros */
-#define ACCEPT_INPUT(wmhints) \
-    (!(screen_info->params->focus_hint) || \
-     ((!(wmhints) || \
-       ((wmhints) && !(wmhints->flags & InputHint)) || \
-       ((wmhints) && (wmhints->flags & InputHint) && (wmhints->input)))))
-
 #define START_ICONIC(c) \
     ((c->wmhints) && \
      (c->wmhints->initial_state == IconicState) && \
@@ -1670,7 +1664,7 @@ clientFrame (DisplayInfo *display_info, Window w, gboolean recapture)
     c->type_atom = None;
 
     FLAG_SET (c->flags, START_ICONIC (c) ? CLIENT_FLAG_ICONIFIED : 0);
-    FLAG_SET (c->wm_flags, ACCEPT_INPUT (c->wmhints) ? WM_FLAG_INPUT : 0);
+    FLAG_SET (c->wm_flags, HINTS_ACCEPT_INPUT (c->wmhints) ? WM_FLAG_INPUT : 0);
 
     clientGetWMProtocols (c);
     clientGetMWMHints (c, FALSE);
@@ -2259,8 +2253,8 @@ clientHideSingle (Client * c, gboolean change_state)
         FLAG_SET (c->flags, CLIENT_FLAG_ICONIFIED);
         setWMState (display_info, c->window, IconicState);
     }
-    XUnmapWindow (display_info->dpy, c->frame);
     XUnmapWindow (display_info->dpy, c->window);
+    XUnmapWindow (display_info->dpy, c->frame);
     myDisplayUngrabServer (display_info);
     clientSetNetState (c);
 }
diff --git a/src/client.h b/src/client.h
index 8e8e6afe4a0c744157db6222a7370de065e89f83..56f18dd599c55a359b0545194b2abb017331c84e 100644
--- a/src/client.h
+++ b/src/client.h
@@ -179,6 +179,10 @@
                                          FLAG_TEST(c->xfwm_flags, XFWM_FLAG_HAS_STICK) && \
                                          !FLAG_TEST(c->flags, CLIENT_FLAG_SKIP_TASKBAR))
 
+#define HINTS_ACCEPT_INPUT(wmhints)     (!(wmhints) || \
+                                         ((wmhints) && !(wmhints->flags & InputHint)) || \
+                                         ((wmhints) && (wmhints->flags & InputHint) && (wmhints->input)))
+
 typedef enum
 {
     UNSET = 0,
diff --git a/src/events.c b/src/events.c
index 5563b0b4f69ae7bf095d1f6f7867fd09a1ca3145..c28735ed81dc7c5f7bad78533c82736171774225 100644
--- a/src/events.c
+++ b/src/events.c
@@ -1762,6 +1762,7 @@ handlePropertyNotify (DisplayInfo *display_info, XPropertyEvent * ev)
                     frameDraw (c, TRUE, FALSE);
                 }
             }
+            FLAG_SET (c->wm_flags, HINTS_ACCEPT_INPUT (c->wmhints) ? WM_FLAG_INPUT : 0);
             clientUpdateUrgency (c);
         }
         else if (ev->atom == display_info->atoms[WM_PROTOCOLS])
diff --git a/src/focus.c b/src/focus.c
index 9cbc7255746500c5c4654d853f88b8192ad2f37b..41c48582fa08d7eabd6ac2512ece9392997cb3a8 100644
--- a/src/focus.c
+++ b/src/focus.c
@@ -72,7 +72,7 @@ clientGetTopMostFocusable (ScreenInfo *screen_info, int layer, Client * exclude)
         TRACE ("*** stack window \"%s\" (0x%lx), layer %i", c->name,
             c->window, (int) c->win_layer);
 
-        if (c->type & WINDOW_TYPE_DONT_FOCUS)
+        if ((c->type & WINDOW_TYPE_DONT_FOCUS) || !clientAcceptFocus (c))
         {
             continue;
         }
@@ -385,11 +385,12 @@ clientAcceptFocus (Client * c)
     {
         return FALSE;
     }
-    if (!FLAG_TEST (c->wm_flags, WM_FLAG_INPUT | WM_FLAG_TAKEFOCUS))
+    if ((c->screen_info->params->focus_hint) 
+        && !FLAG_TEST (c->wm_flags, WM_FLAG_INPUT | WM_FLAG_TAKEFOCUS))
     {
         return FALSE;
     }
-    
+
     return TRUE;
 }
 
@@ -513,7 +514,7 @@ clientSetFocus (ScreenInfo *screen_info, Client * c, Time timestamp, unsigned sh
             TRACE ("SKIP_FOCUS set for client \"%s\" (0x%lx)", c->name, c->window);
             return;
         }
-        if (FLAG_TEST (c->wm_flags, WM_FLAG_INPUT))
+        if (FLAG_TEST (c->wm_flags, WM_FLAG_INPUT) || !(screen_info->params->focus_hint))
         {
             pending_focus = c;
             XSetInputFocus (myScreenGetXDisplay (screen_info), c->window, RevertToPointerRoot, timestamp);
diff --git a/src/hints.h b/src/hints.h
index 1ef3d14a6001ee8b302cdd3dd1e8d899321ab51a..ef7d431540b0a37a2038eebbbd778bba05a74148 100644
--- a/src/hints.h
+++ b/src/hints.h
@@ -111,6 +111,10 @@
 
 #define NET_WM_OPAQUE                           0xffffffff
 
+/* Convenient macro */
+#define HINTS_ACCEPT_INPUT(wmhints)     (!(wmhints) || \
+                                         ((wmhints) && !(wmhints->flags & InputHint)) || \
+                                         ((wmhints) && (wmhints->flags & InputHint) && (wmhints->input)))
 typedef struct
 {
     unsigned long orientation;