diff --git a/mcs-plugin/margins_plugin.c b/mcs-plugin/margins_plugin.c
index 322d583dd9d8275750c96f148ac2a6a75847df8c..156796c4634a38bdeb0deae33c837dbb7acee32c 100644
--- a/mcs-plugin/margins_plugin.c
+++ b/mcs-plugin/margins_plugin.c
@@ -214,7 +214,7 @@ run_dialog (McsPlugin * mcs_plugin)
                                      GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_CLOSE,
                                      GTK_RESPONSE_OK, NULL);
 
-    gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);
+    gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
     gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
     gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
 
diff --git a/mcs-plugin/xfwm4_plugin.c b/mcs-plugin/xfwm4_plugin.c
index 820c308b4815f3ce8e19ffcb15838f526d960320..bc03ee34e10bf7783dd1bf1502323bfc431277a8 100644
--- a/mcs-plugin/xfwm4_plugin.c
+++ b/mcs-plugin/xfwm4_plugin.c
@@ -1271,7 +1271,7 @@ create_dialog (McsPlugin * mcs_plugin)
 
     dialog->xfwm4_dialog = gtk_dialog_new ();
     gtk_window_set_position (GTK_WINDOW (dialog->xfwm4_dialog),
-                             GTK_WIN_POS_CENTER_ALWAYS);
+                             GTK_WIN_POS_CENTER);
     gtk_window_set_title (GTK_WINDOW (dialog->xfwm4_dialog),
                           _("Window Manager"));
     gtk_dialog_set_has_separator (GTK_DIALOG (dialog->xfwm4_dialog), FALSE);
diff --git a/src/client.c b/src/client.c
index 25a3a0bb66cf5dd624a743ae321c2ff667e4f0cc..d69492404e99fb7a95ff05db2d0b52114442b98c 100644
--- a/src/client.c
+++ b/src/client.c
@@ -1655,17 +1655,17 @@ clientApplyStackList (GSList * list)
        avoid flickering during restack.
        (contributed by Thomas Leonard <tal00r@ecs.soton.ac.uk>)
      */
-    if (top_of_stack)
+    if ((top_of_stack) && (top_of_stack->frame != xwinstack[0]))
     {
         wc.stack_mode = Above;
         wc.sibling = top_of_stack->frame;
         XConfigureWindow(dpy, xwinstack[0], CWStackMode | CWSibling, &wc);
+        top_of_stack = (Client *) list_copy->data;
     }
     XRestackWindows (dpy, xwinstack, (int) nwindows);
     XFlush (dpy);
     
     /* Update top_of_stackfor next restacking */
-    top_of_stack = (Client *) list_copy->data;
     
     g_slist_free (list_copy);
     g_free (xwinstack);
@@ -1943,8 +1943,8 @@ clientConstraintPos (Client * c, gboolean show_full)
     client_margins[MARGIN_TOP] = margins[MARGIN_TOP];
     client_margins[MARGIN_LEFT] = margins[MARGIN_LEFT];
     client_margins[MARGIN_RIGHT] = margins[MARGIN_RIGHT];
-
     client_margins[MARGIN_BOTTOM] = margins[MARGIN_BOTTOM];
+
     if (CLIENT_FLAG_TEST (c, CLIENT_FLAG_HAS_STRUTS))
     {
         workspaceGetArea (client_margins, NULL, c);
@@ -2027,13 +2027,14 @@ clientKeepVisible (Client * c)
 {
     CARD32 client_margins[4];
     int cx, cy, left, right, top, bottom;
+    int diff_x, diff_y;
 
     g_return_if_fail (c != NULL);
     TRACE ("entering clientKeepVisible");
     TRACE ("client \"%s\" (0x%lx)", c->name, c->window);
 
-    cx = frameX (c) + (frameWidth (c) >> 1);
-    cy = frameY (c) + (frameHeight (c) >> 1);
+    cx = frameX (c) + (frameWidth (c) / 2);
+    cy = frameY (c) + (frameHeight (c) / 2);
 
     client_margins[MARGIN_TOP] = margins[MARGIN_TOP];
     client_margins[MARGIN_LEFT] = margins[MARGIN_LEFT];
@@ -2059,11 +2060,11 @@ clientKeepVisible (Client * c)
             cy) ? (int) client_margins[MARGIN_BOTTOM] : 0);
 
     /* Translate coodinates to center on physical screen */
-    if ((use_xinerama)
-        && (abs (c->x - ((MyDisplayFullWidth (dpy,
-                            screen) - c->width) / 2)) < 20)
-        && (abs (c->y - ((MyDisplayFullHeight (dpy,
-                            screen) - c->height) / 2)) < 20))
+
+    diff_x = abs (c->x - ((MyDisplayFullWidth (dpy, screen) - c->width) / 2));
+    diff_y = abs (c->y - ((MyDisplayFullHeight (dpy, screen) - c->height) / 2));
+
+    if ((use_xinerama) && (diff_x < 25) && (diff_y < 25))
     {
         /* We consider that the windows is centered on screen,
          * Thus, will move it so its center on the current
@@ -4318,15 +4319,15 @@ clientMove_event_filter (XEvent * xevent, gpointer data)
         {
             c->x = c->x - 16;
         }
-        if (xevent->xkey.keycode == params.keys[KEY_MOVE_RIGHT].keycode)
+        else if (xevent->xkey.keycode == params.keys[KEY_MOVE_RIGHT].keycode)
         {
             c->x = c->x + 16;
         }
-        if (xevent->xkey.keycode == params.keys[KEY_MOVE_UP].keycode)
+        else if (xevent->xkey.keycode == params.keys[KEY_MOVE_UP].keycode)
         {
             c->y = c->y - 16;
         }
-        if (xevent->xkey.keycode == params.keys[KEY_MOVE_DOWN].keycode)
+        else if (xevent->xkey.keycode == params.keys[KEY_MOVE_DOWN].keycode)
         {
             c->y = c->y + 16;
         }