diff -ur libwnck-2.5.1/libwnck/tasklist.c libwnck-2.5.1-multimonitor/libwnck/tasklist.c
--- libwnck-2.5.1/libwnck/tasklist.c	2003-12-10 12:31:36.000000000 +0100
+++ libwnck-2.5.1-multimonitor/libwnck/tasklist.c	2003-12-25 16:05:02.000000000 +0100
@@ -167,6 +167,9 @@
   SnMonitorContext *sn_context;
   guint startup_sequence_timeout;
 #endif
+
+  gint monitor_num;
+  GdkRectangle monitor_geometry;
 };
 
 
@@ -457,6 +460,8 @@
 
   tasklist->priv->idle_callback_tag = 0;
 
+  tasklist->priv->monitor_num = -1;
+
   atk_obj = gtk_widget_get_accessible (widget);
   atk_object_set_name (atk_obj, _("Window List"));
   atk_object_set_description (atk_obj, _("Tool to switch between visible windows"));
@@ -1399,10 +1404,22 @@
 wnck_tasklist_include_window (WnckTasklist *tasklist, WnckWindow *win)
 {
   WnckWorkspace *active_workspace;
+  gboolean on_active_monitor;
+  int x, y, w, h;
 
   if (wnck_window_get_state (win) & WNCK_WINDOW_STATE_SKIP_TASKLIST)
     return FALSE;
 
+  if (tasklist->priv->monitor_num != -1)
+    {
+      wnck_window_get_geometry (win, &x, &y, &w, &h);
+      on_active_monitor = gdk_region_point_in (gdk_region_rectangle (
+                                 &tasklist->priv->monitor_geometry),
+                                 x + w / 2, y + h / 2);
+      if (!on_active_monitor)
+        return FALSE;
+    }
+
   if (tasklist->priv->include_all_workspaces)
     return TRUE;
 
@@ -1431,11 +1448,25 @@
   GList *l;
   WnckTask *win_task;
   WnckTask *class_group_task;
+  gint monitor_num;
 
   wnck_tasklist_free_tasks (tasklist);
   
   windows = wnck_screen_get_windows (tasklist->priv->screen);
   
+  if (GTK_WIDGET (tasklist)->window != NULL)
+    {
+      monitor_num = gdk_screen_get_monitor_at_window (_wnck_screen_get_gdk_screen (tasklist->priv->screen),
+                                                      GTK_WIDGET (tasklist)->window);
+      if (monitor_num != tasklist->priv->monitor_num)
+        {
+          tasklist->priv->monitor_num = monitor_num;
+          gdk_screen_get_monitor_geometry (_wnck_screen_get_gdk_screen (tasklist->priv->screen),
+                                           tasklist->priv->monitor_num,
+                                           &tasklist->priv->monitor_geometry);
+        }
+    }
+ 
   l = windows;
   while (l != NULL)
     {
