diff --git a/src/display.c b/src/display.c
index ed9b5020e9b81caddd26f08f81abaa19c298b69c..adc961da71014e919abd406740136b5db487cfe2 100644
--- a/src/display.c
+++ b/src/display.c
@@ -599,6 +599,27 @@ myDisplayGetScreenFromRoot (DisplayInfo *display, Window root)
     return NULL;
 }
 
+ScreenInfo *
+myDisplayGetScreenFromOutput (DisplayInfo *display, Window output)
+{
+    GSList *list;
+
+    g_return_val_if_fail (display != NULL, NULL);
+
+    for (list = display->screens; list; list = g_slist_next (list))
+    {
+        ScreenInfo *screen = (ScreenInfo *) list->data;
+        if (screen->output == output)
+        {
+            return screen;
+        }
+    }
+    TRACE ("myDisplayGetScreenFromOutput: no screen found for output window %p", output);
+
+    return NULL;
+}
+
+
 ScreenInfo *
 myDisplayGetScreenFromNum (DisplayInfo *display, int num)
 {
diff --git a/src/display.h b/src/display.h
index 8c21f28d683472f8fc447f430e307d20f7fd7cb5..c1a8adbf9b9c2c2d7ecc8e21ccace76ecc73a55b 100644
--- a/src/display.h
+++ b/src/display.h
@@ -389,6 +389,8 @@ void                     myDisplayRemoveScreen                  (DisplayInfo *,
                                                                  ScreenInfo *);
 ScreenInfo              *myDisplayGetScreenFromRoot             (DisplayInfo *,
                                                                  Window);
+ScreenInfo              *myDisplayGetScreenFromOutput           (DisplayInfo *,
+                                                                 Window);
 ScreenInfo              *myDisplayGetScreenFromNum              (DisplayInfo *,
                                                                  int);
 Window                   myDisplayGetRootFromWindow             (DisplayInfo *,