--- gnome-panel-2.30.0/gnome-panel/applet.c	2010-03-04 17:17:30.000000000 +0100
+++ gnome-panel-2.30.0tjk/gnome-panel/applet.c	2010-04-01 13:45:19.802456095 +0200
@@ -597,6 +597,8 @@
 	int             menu_y = 0;
 	int             pointer_x;
 	int             pointer_y;
+	int		monitor_num;
+	GdkRectangle	monitor_rect;
 
 	g_return_if_fail (PANEL_IS_WIDGET (applet->parent));
 
@@ -612,6 +614,10 @@
 		menu_y += applet->allocation.y;
 	}
 
+	monitor_num = gdk_screen_get_monitor_at_point(screen,menu_x,menu_y);
+	gdk_screen_get_monitor_geometry(screen,monitor_num,&monitor_rect);
+	
+
 	if (PANEL_WIDGET (applet->parent)->orient == GTK_ORIENTATION_HORIZONTAL) {
 		if (gtk_widget_get_direction (GTK_WIDGET (menu)) != GTK_TEXT_DIR_RTL) {
 			if (pointer_x < applet->allocation.width &&
@@ -626,9 +632,9 @@
 					       applet->allocation.width - requisition.width);
 			}
 		}
-		menu_x = MIN (menu_x, gdk_screen_get_width (screen) - requisition.width);
+		menu_x = MIN (menu_x, monitor_rect.x + monitor_rect.width - requisition.width);
 
-		if (menu_y > gdk_screen_get_height (screen) / 2)
+		if (menu_y > monitor_rect.y + (monitor_rect.height / 2))
 			menu_y -= requisition.height;
 		else
 			menu_y += applet->allocation.height;
@@ -636,9 +642,9 @@
 		if (pointer_y < applet->allocation.height &&
 		    requisition.height < pointer_y)
 			menu_y += MIN (pointer_y, applet->allocation.height - requisition.height);
-		menu_y = MIN (menu_y, gdk_screen_get_height (screen) - requisition.height);
+		menu_y = MIN (menu_y, monitor_rect.y +monitor_rect.height - requisition.height);
 
-		if (menu_x > gdk_screen_get_width (screen) / 2)
+		if (menu_x > monitor_rect.x + (monitor_rect.width / 2))
 			menu_x -= requisition.width;
 		else
 			menu_x += applet->allocation.width;
@@ -646,7 +652,7 @@
 
 	*x = menu_x;
 	*y = menu_y;
-	*push_in = TRUE;
+	*push_in = FALSE;
 }
 
 static void
