diff --git a/src/client.c b/src/client.c
index 952421165243c7f97dfb58ffaf61594f5f0bf3a4..f0538a2cd4294367cf5622d4981e669bb5d93b7b 100644
--- a/src/client.c
+++ b/src/client.c
@@ -3394,6 +3394,11 @@ clientToggleMaximized (Client *c, int mode, gboolean restore_position)
     clientSetNetActions (c);
     if (restore_position && FLAG_TEST (c->xfwm_flags, XFWM_FLAG_MANAGED))
     {
+        if (FLAG_TEST (c->flags, CLIENT_FLAG_SHADED))
+        {
+            /* It's a shame, we are configuring the same client twice in a row */
+            clientUnshade (c);
+        }
         clientConfigure (c, &wc, CWWidth | CWHeight | CWX | CWY, CFG_FORCE_REDRAW);
     }
     /* Do not update the state while moving/resizing, CSD windows may resize */
diff --git a/src/client.h b/src/client.h
index 7aa93f37dde6523f11a12ce7874cda1c1f1e9e83..aa2b1e0abb6fcb0466a3c8b172a195998102f7ba 100644
--- a/src/client.h
+++ b/src/client.h
@@ -229,7 +229,9 @@
                                          !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
 #define CLIENT_CAN_FILL_WINDOW(c)       (FLAG_TEST(c->xfwm_flags, XFWM_FLAG_HAS_RESIZE | \
                                                                   XFWM_FLAG_IS_RESIZABLE) && \
-                                         !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN | CLIENT_FLAG_MAXIMIZED))
+                                         !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN | \
+                                                               CLIENT_FLAG_MAXIMIZED | \
+                                                               CLIENT_FLAG_SHADED))
 #define CLIENT_CAN_TILE_WINDOW(c)       (CLIENT_CAN_MAXIMIZE_WINDOW(c) && \
                                          !FLAG_TEST (c->flags, CLIENT_FLAG_SHADED) && \
                                          (c->type & WINDOW_NORMAL))