diff --git a/src/client.c b/src/client.c
index 1b47cad697d373a8e4ee5de009ad84c062ae7cf5..d6127c5d3537e10f7d9e6d5a0d225c476eabfbcc 100644
--- a/src/client.c
+++ b/src/client.c
@@ -3120,8 +3120,13 @@ static GtkToXEventFilterStatus clientMove_event_filter(XEvent * xevent, gpointer
         int frame_x, frame_y, frame_height, frame_width;
         int frame_top, frame_left, frame_right, frame_bottom;
 
-        while(XCheckTypedEvent(dpy, MotionNotify, xevent));
-
+        while(XCheckMaskEvent(dpy, ButtonMotionMask | PointerMotionMask | PointerMotionHintMask, xevent));
+        
+	if (xevent->type == ButtonRelease)
+        {
+            moving = FALSE;
+	}
+	
         if(!passdata->grab && params.box_move)
         {
             gdk_x11_grab_server();
@@ -3241,6 +3246,7 @@ static GtkToXEventFilterStatus clientMove_event_filter(XEvent * xevent, gpointer
     {
         status = XEV_FILTER_CONTINUE;
     }
+    
     DBG("leaving clientMove_event_filter\n");
 
     if(!moving)
@@ -3464,8 +3470,13 @@ static GtkToXEventFilterStatus clientResize_event_filter(XEvent * xevent, gpoint
     }
     else if(xevent->type == MotionNotify)
     {
-        while(XCheckTypedEvent(dpy, MotionNotify, xevent));
-
+        while(XCheckMaskEvent(dpy, ButtonMotionMask | PointerMotionMask | PointerMotionHintMask, xevent));
+        
+	if (xevent->type == ButtonRelease)
+        {
+            resizing = FALSE;
+	}
+	
         if(!passdata->grab && params.box_resize)
         {
             gdk_x11_grab_server();
@@ -3574,6 +3585,7 @@ static GtkToXEventFilterStatus clientResize_event_filter(XEvent * xevent, gpoint
     {
         status = XEV_FILTER_CONTINUE;
     }
+    
     DBG("leaving clientResize_event_filter\n");
 
     if(!resizing)