diff --git a/configure.ac.in b/configure.ac.in
index 73ac0cf653d2848721e51fdb12a61acb787e4a22..d007a256ce638549ae2f07dc4fa03faaf5a434a5 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -96,6 +96,7 @@ XDT_CHECK_PACKAGE([LIBXFCONF], libxfconf-0, [xfconf_minimum_version])
 XDT_CHECK_PACKAGE([LIBWNCK], [libwnck-1.0], [wnck_minimum_version])
 XDT_CHECK_PACKAGE([DBUS], [dbus-1], [1.0.0])
 XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.72])
+XDT_CHECK_PACKAGE([XINERAMA], [xinerama], [0])
 
 AS_IF([test "x$USE_MAINTAINER_MODE" = "xyes"],
 [
diff --git a/src/Makefile.am b/src/Makefile.am
index 767b643e08f5822cd400ae2d315f0be3aa4159e1..7b3b96fb6b1ba246e11d6c5c24a57ff16cf54122 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -85,6 +85,7 @@ xfwm4_CFLAGS =								\
 	$(PRESENT_EXTENSION_CFLAGS)					\
 	$(RANDR_CFLAGS)							\
 	$(RENDER_CFLAGS)						\
+	$(XINERAMA_CFLAGS)						\
 	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"				\
 	-DDATADIR=\"$(datadir)\"					\
 	-DHELPERDIR=\"$(HELPER_PATH_PREFIX)\"				\
@@ -106,6 +107,7 @@ xfwm4_LDADD =								\
 	$(PRESENT_EXTENSION_LIBS)					\
 	$(RANDR_LIBS) 							\
 	$(RENDER_LIBS)							\
+	$(XINERAMA_LIBS)						\
 	$(MATH_LIBS)
 
 EXTRA_DIST = 								\
diff --git a/src/client.c b/src/client.c
index 6a16971a3bfb935f8eeef2dfb7a269eacab49a9d..3a9d3fa8bdaaf0284a934efa5436ffec59c3181c 100644
--- a/src/client.c
+++ b/src/client.c
@@ -2995,10 +2995,11 @@ clientUpdateFullscreenSize (Client *c)
     {
         if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREN_MONITORS))
         {
-            gdk_screen_get_monitor_geometry (screen_info->gscr, c->fullscreen_monitors[0], &rect);
+            /* Monitor numbering is from Xinerama */
+            myScreenGetXineramaMonitorGeometry (screen_info, c->fullscreen_monitors[0], &rect);
             for (i = 1; i < 4; i++)
             {
-                gdk_screen_get_monitor_geometry (screen_info->gscr, c->fullscreen_monitors[i], &monitor);
+                myScreenGetXineramaMonitorGeometry (screen_info, c->fullscreen_monitors[i], &monitor);
                 gdk_rectangle_union (&rect, &monitor, &rect);
             }
         }
diff --git a/src/screen.c b/src/screen.c
index d5c7266e8d6097c41c735087f38efee1cf5b24de..fc7c6085deb33b543b9a272f960860f81c619f40 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -27,6 +27,7 @@
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 #include <X11/extensions/shape.h>
+#include <X11/extensions/Xinerama.h>
 #include <glib.h>
 #include <gdk/gdk.h>
 #include <gdk/gdkx.h>
@@ -815,6 +816,31 @@ myScreenFindMonitorAtPoint (ScreenInfo *screen_info, gint x, gint y, GdkRectangl
     *rect = screen_info->cache_monitor;
 }
 
+void
+myScreenGetXineramaMonitorGeometry (ScreenInfo *screen_info, gint monitor_num, GdkRectangle *rect)
+{
+    XineramaScreenInfo *infos;
+    int n;
+
+    g_return_if_fail (screen_info != NULL);
+    g_return_if_fail (rect != NULL);
+    g_return_if_fail (XineramaIsActive (myScreenGetXDisplay (screen_info)));
+
+    infos = XineramaQueryScreens (myScreenGetXDisplay (screen_info), &n);
+    if (infos == NULL || n <= 0 || monitor_num < n || monitor_num > n)
+    {
+        XFree (infos);
+        return;
+    }
+
+    rect->x = infos[monitor_num].x_org;
+    rect->y = infos[monitor_num].y_org;
+    rect->width = infos[monitor_num].width;
+    rect->height = infos[monitor_num].height;
+
+    XFree (infos);
+}
+
 gboolean
 myScreenUpdateFontHeight (ScreenInfo *screen_info)
 {
@@ -843,3 +869,4 @@ myScreenUpdateFontHeight (ScreenInfo *screen_info)
 
     return FALSE;
 }
+
diff --git a/src/screen.h b/src/screen.h
index 2f19057898f9403be15d64729fcedfc84a69eaaa..1309092305d5811a52fc7a83a8c824136ebb4800 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -274,5 +274,7 @@ void                     myScreenFindMonitorAtPoint             (ScreenInfo *,
                                                                  gint,
                                                                  GdkRectangle *);
 gboolean                 myScreenUpdateFontHeight               (ScreenInfo *);
-
+void                     myScreenGetXineramaMonitorGeometry     (ScreenInfo *,
+                                                                 gint,
+                                                                 GdkRectangle *);
 #endif /* INC_SCREEN_H */