diff --git a/include/handlers.h b/include/handlers.h
index 71e2bc92..1f2e4b18 100644
--- a/include/handlers.h
+++ b/include/handlers.h
@@ -32,7 +32,6 @@ int handle_key_press(void *ignored, xcb_connection_t *conn,
 int handle_enter_notify(void *ignored, xcb_connection_t *conn,
                         xcb_enter_notify_event_t *event);
 
-#if 0
 /**
  * When the user moves the mouse but does not change the active window
  * (e.g. when having no windows opened but moving mouse on the root screen
@@ -42,6 +41,7 @@ int handle_enter_notify(void *ignored, xcb_connection_t *conn,
 int handle_motion_notify(void *ignored, xcb_connection_t *conn,
                          xcb_motion_notify_event_t *event);
 
+#if 0
 /**
  * Called when the keyboard mapping changes (for example by using Xmodmap),
  * we need to update our key bindings then (re-translate symbols).
diff --git a/include/xcb.h b/include/xcb.h
index 3f4b735c..3752e9f4 100644
--- a/include/xcb.h
+++ b/include/xcb.h
@@ -37,6 +37,7 @@
 /** The XCB_CW_EVENT_MASK for its frame */
 #define FRAME_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS |          /* …mouse is pressed/released */ \
                           XCB_EVENT_MASK_BUTTON_RELEASE | \
+                          XCB_EVENT_MASK_POINTER_MOTION |        /* …mouse is moved */ \
                           XCB_EVENT_MASK_EXPOSURE |              /* …our window needs to be redrawn */ \
                           XCB_EVENT_MASK_STRUCTURE_NOTIFY |      /* …the frame gets destroyed */ \
                           XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | /* …the application tries to resize itself */ \
diff --git a/src/handlers.c b/src/handlers.c
index 03fd802c..0fc6b8a5 100644
--- a/src/handlers.c
+++ b/src/handlers.c
@@ -243,7 +243,6 @@ int handle_enter_notify(void *ignored, xcb_connection_t *conn,
 
     return 1;
 }
-#if 0
 
 /*
  * When the user moves the mouse but does not change the active window
@@ -252,16 +251,37 @@ int handle_enter_notify(void *ignored, xcb_connection_t *conn,
  *
  */
 int handle_motion_notify(void *ignored, xcb_connection_t *conn, xcb_motion_notify_event_t *event) {
-        /* Skip events where the pointer was over a child window, we are only
-         * interested in events on the root window. */
-        if (event->child != 0)
-                return 1;
-
-        check_crossing_screen_boundary(event->root_x, event->root_y);
-
+    /* Skip events where the pointer was over a child window, we are only
+     * interested in events on the root window. */
+    if (event->child != 0)
         return 1;
+
+    Con *con;
+    if ((con = con_by_frame_id(event->event)) == NULL) {
+        /* TODO; handle root window: */
+        //check_crossing_screen_boundary(event->root_x, event->root_y);
+        return 1;
+    }
+
+    /* see over which rect the user is */
+    Con *current;
+    TAILQ_FOREACH(current, &(con->nodes_head), nodes) {
+        if (!rect_contains(current->deco_rect, event->event_x, event->event_y))
+            continue;
+
+        /* We found the rect, let’s see if this window is focused */
+        if (TAILQ_FIRST(&(con->focus_head)) == current)
+            return 1;
+
+        con_focus(current);
+        x_push_changes(croot);
+        return 1;
+    }
+
+    return 1;
 }
 
+#if 0
 /*
  * Called when the keyboard mapping changes (for example by using Xmodmap),
  * we need to update our key bindings then (re-translate symbols).
diff --git a/src/main.c b/src/main.c
index f0118f98..2d52ef8a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -211,6 +211,8 @@ int main(int argc, char *argv[]) {
 
     xcb_event_set_expose_handler(&evenths, handle_expose_event, NULL);
 
+    xcb_event_set_motion_notify_handler(&evenths, handle_motion_notify, NULL);
+
     /* Enter window = user moved his mouse over the window */
     xcb_event_set_enter_notify_handler(&evenths, handle_enter_notify, NULL);