diff -rud fvwm-1.24r/fvwm/placement.c fvwm-mine/fvwm/placement.c
--- fvwm-1.24r/fvwm/placement.c	Tue Nov 15 06:04:05 1994
+++ fvwm-mine/fvwm/placement.c	Thu May 27 14:34:45 2004
@@ -14,6 +14,9 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/Xinerama.h>
 
 #include "fvwm.h"
 #include "menus.h"
@@ -21,6 +24,35 @@
 #include "parse.h"
 #include "screen.h"
 
+int CheckXinerama(FvwmWindow *t, int height, int width, int *x, int *y)
+{
+	XineramaScreenInfo *xsi;
+	int num;
+	int i, ret = 0;
+
+	xsi = XineramaQueryScreens(dpy, &num);
+	if( xsi == NULL )
+		return 1;
+
+	for( i = 0; i < num; i++ ) {
+		if( *x >= xsi[i].x_org && *y >= xsi[i].y_org ) {
+			XFree(xsi);
+			return 1;
+		}
+	}
+
+	if( *x < xsi[0].x_org )
+		*x = xsi[0].x_org;
+	if( *y < xsi[0].y_org )
+		*y = xsi[0].y_org;
+	XFree(xsi);
+	return 0;
+}
+
 void SmartPlacement(FvwmWindow *t, int width, int height, int *x, int *y)
 {
   int temp_h,temp_w;
@@ -38,6 +70,8 @@
 	{
 	  loc_ok = True;
 	  test_window = Scr.FvwmRoot.next;
+      if( !CheckXinerama(test_window, temp_h, temp_w, &test_x, &test_y) )
+        loc_ok = False;
 	  while((test_window != (FvwmWindow *)0)&&(loc_ok == True))
 	    {	
 	      if(test_window->Desk == Scr.CurrentDesk)
