restack(void) {
        Client *c;
        XEvent ev;
+       XWindowChanges wc;
 
        drawstatus();
        if(!sel)
        if(sel->isfloating || lt->arrange == floating)
                XRaiseWindow(dpy, sel->win);
        if(lt->arrange != floating) {
-               if(!sel->isfloating)
-                       XLowerWindow(dpy, sel->win);
+               wc.stack_mode = Below;
+               wc.sibling = barwin;
+               if(!sel->isfloating) {
+                       XConfigureWindow(dpy, sel->win, CWSibling | CWStackMode, &wc);
+                       wc.sibling = sel->win;
+               }
                for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
                        if(c == sel)
                                continue;
-                       XLowerWindow(dpy, c->win);
+                       XConfigureWindow(dpy, c->win, CWSibling | CWStackMode, &wc);
+                       wc.sibling = c->win;
                }
        }
        XSync(dpy, False);