diff --git a/plugins/pager/pager.c b/plugins/pager/pager.c
index 950fad91906ffd90e8eed6032fce489e70933c68..a359ff8d21af1baf0b2b4b1c709e8335caec4047 100644
--- a/plugins/pager/pager.c
+++ b/plugins/pager/pager.c
@@ -52,6 +52,8 @@ static void     pager_plugin_set_property                 (GObject           *ob
                                                            guint              prop_id,
                                                            const GValue      *value,
                                                            GParamSpec        *pspec);
+static void     pager_plugin_size_request                 (GtkWidget         *widget,
+                                                           GtkRequisition    *requisition);
 static gboolean pager_plugin_scroll_event                 (GtkWidget         *widget,
                                                            GdkEventScroll    *event);
 static void     pager_plugin_screen_changed               (GtkWidget         *widget,
@@ -65,6 +67,20 @@ static void     pager_plugin_mode_changed                 (XfcePanelPlugin     *
 static void     pager_plugin_configure_workspace_settings (GtkWidget         *button);
 static void     pager_plugin_configure_plugin             (XfcePanelPlugin   *panel_plugin);
 static void     pager_plugin_screen_layout_changed        (PagerPlugin       *plugin);
+static void     pager_plugin_get_preferred_width            (GtkWidget           *widget,
+                                                             gint                *minimum_width,
+                                                             gint                *natural_width);
+static void     pager_plugin_get_preferred_width_for_height (GtkWidget           *widget,
+                                                             gint                 height,
+                                                             gint                *minimum_width,
+                                                             gint                *natural_width);
+static void     pager_plugin_get_preferred_height           (GtkWidget           *widget,
+                                                             gint                *minimum_height,
+                                                             gint                *natural_height);
+static void     pager_plugin_get_preferred_height_for_width (GtkWidget           *widget,
+                                                             gint                 width,
+                                                             gint                *minimum_height,
+                                                             gint                *natural_height);
 
 
 
@@ -85,6 +101,7 @@ struct _PagerPlugin
   guint          scrolling : 1;
   guint          miniature_view : 1;
   gint           rows;
+  gfloat         ratio;
 };
 
 enum
@@ -116,6 +133,11 @@ pager_plugin_class_init (PagerPluginClass *klass)
 
   widget_class = GTK_WIDGET_CLASS (klass);
   widget_class->scroll_event = pager_plugin_scroll_event;
+  //widget_class->size_request = pager_plugin_size_request;
+  //widget_class->get_preferred_width             = pager_plugin_get_preferred_width;
+  widget_class->get_preferred_width_for_height  = pager_plugin_get_preferred_width_for_height;
+  //widget_class->get_preferred_height            = pager_plugin_get_preferred_height;
+  widget_class->get_preferred_height_for_width  = pager_plugin_get_preferred_height_for_width;
 
   plugin_class = XFCE_PANEL_PLUGIN_CLASS (klass);
   plugin_class->construct = pager_plugin_construct;
@@ -155,6 +177,7 @@ pager_plugin_init (PagerPlugin *plugin)
   plugin->scrolling = TRUE;
   plugin->miniature_view = TRUE;
   plugin->rows = 1;
+  plugin->ratio = 1.0;
   plugin->pager = NULL;
 }
 
@@ -302,13 +325,8 @@ pager_plugin_screen_layout_changed (PagerPlugin *plugin)
       if (!wnck_pager_set_n_rows (WNCK_PAGER (plugin->pager), plugin->rows))
         g_message ("Setting the pager rows returned false. Maybe the setting is not applied.");
 
-#if 0
-      wnck_pager_set_layout_policy (WNCK_PAGER (plugin->pager),
-                                    (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL) ?
-                                    WNCK_PAGER_LAYOUT_POLICY_WIDTH_FOR_HEIGHT :
-                                    WNCK_PAGER_LAYOUT_POLICY_HEIGHT_FOR_WIDTH);
-#endif
       wnck_pager_set_orientation (WNCK_PAGER (plugin->pager), orientation);
+      plugin->ratio = (gfloat) gdk_screen_width () / (gfloat) gdk_screen_height ();
     }
   else
     {
@@ -418,15 +436,7 @@ pager_plugin_mode_changed (XfcePanelPlugin     *panel_plugin,
     GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL;
 
   if (plugin->miniature_view)
-    {
-#if 0
-      wnck_pager_set_layout_policy (WNCK_PAGER (plugin->pager),
-                                    (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL) ?
-                                    WNCK_PAGER_LAYOUT_POLICY_WIDTH_FOR_HEIGHT :
-                                    WNCK_PAGER_LAYOUT_POLICY_HEIGHT_FOR_WIDTH);
-#endif
-      wnck_pager_set_orientation (WNCK_PAGER (plugin->pager), orientation);
-    }
+    wnck_pager_set_orientation (WNCK_PAGER (plugin->pager), orientation);
   else
     pager_buttons_set_orientation (XFCE_PAGER_BUTTONS (plugin->pager), orientation);
 }
@@ -558,3 +568,153 @@ pager_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
 
   gtk_widget_show (GTK_WIDGET (dialog));
 }
+
+
+#if 0
+static void
+pager_plugin_size_request (GtkWidget      *widget,
+                           GtkRequisition *requisition)
+{
+  PagerPlugin         *plugin = XFCE_PAGER_PLUGIN (widget);
+  XfcePanelPluginMode  mode;
+  gint                 n_workspaces, n_cols;
+
+  if (plugin->miniature_view)
+    {
+      mode   = xfce_panel_plugin_get_mode (XFCE_PANEL_PLUGIN (plugin));
+      n_workspaces = wnck_screen_get_workspace_count (plugin->wnck_screen);
+      n_cols = MAX (1, (n_workspaces + plugin->rows - 1) / plugin->rows);
+      if (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL)
+        {
+          requisition->height = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+          requisition->width = (gint) (requisition->height / plugin->rows * plugin->ratio * n_cols);
+        }
+      else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL)
+        {
+          requisition->width = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+          requisition->height = (gint) (requisition->width / plugin->rows / plugin->ratio * n_cols);
+        }
+      else /* (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR) */
+        {
+          requisition->width = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+          requisition->height = (gint) (requisition->width / n_cols / plugin->ratio * plugin->rows);
+        }
+    }
+  else
+    {
+      gtk_widget_size_request (plugin->pager, requisition);
+    }
+}
+#endif
+
+
+static void
+pager_plugin_get_preferred_width (GtkWidget *widget,
+                                  gint      *minimum_width,
+                                  gint      *natural_width)
+{
+  PagerPlugin         *plugin = XFCE_PAGER_PLUGIN (widget);
+  XfcePanelPluginMode  mode;
+  gint                 n_workspaces, n_cols;
+
+  if (plugin->miniature_view)
+    {
+      mode   = xfce_panel_plugin_get_mode (XFCE_PANEL_PLUGIN (plugin));
+      n_workspaces = wnck_screen_get_workspace_count (plugin->wnck_screen);
+      n_cols = MAX (1, (n_workspaces + plugin->rows - 1) / plugin->rows);
+      if (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL)
+        *minimum_width = *natural_width = 1; //(gint) (requisition->height / plugin->rows * plugin->ratio * n_cols);
+      else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL)
+        *minimum_width = *natural_width = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+      else /* (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR) */
+        *minimum_width = *natural_width = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+    }
+  else
+    {
+      gtk_widget_get_preferred_width (plugin->pager, minimum_width, natural_width);
+    }
+}
+
+static void
+pager_plugin_get_preferred_width_for_height (GtkWidget *widget,
+                                             gint       height,
+                                             gint      *minimum_width,
+                                             gint      *natural_width)
+{
+  PagerPlugin         *plugin = XFCE_PAGER_PLUGIN (widget);
+  XfcePanelPluginMode  mode;
+  gint                 n_workspaces, n_cols;
+
+  if (plugin->miniature_view)
+    {
+      mode   = xfce_panel_plugin_get_mode (XFCE_PANEL_PLUGIN (plugin));
+      n_workspaces = wnck_screen_get_workspace_count (plugin->wnck_screen);
+      n_cols = MAX (1, (n_workspaces + plugin->rows - 1) / plugin->rows);
+      if (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL)
+        *minimum_width = *natural_width = (gint) (height / plugin->rows * plugin->ratio * n_cols);
+      else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL)
+        *minimum_width = *natural_width = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+      else /* (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR) */
+        *minimum_width = *natural_width = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+    }
+  else
+    {
+      gtk_widget_get_preferred_width_for_height (plugin->pager, height, minimum_width, natural_width);
+    }
+}
+
+static void
+pager_plugin_get_preferred_height (GtkWidget *widget,
+                                  gint      *minimum_height,
+                                  gint      *natural_height)
+{
+  PagerPlugin         *plugin = XFCE_PAGER_PLUGIN (widget);
+  XfcePanelPluginMode  mode;
+  gint                 n_workspaces, n_cols;
+
+  if (plugin->miniature_view)
+    {
+      mode   = xfce_panel_plugin_get_mode (XFCE_PANEL_PLUGIN (plugin));
+      n_workspaces = wnck_screen_get_workspace_count (plugin->wnck_screen);
+      n_cols = MAX (1, (n_workspaces + plugin->rows - 1) / plugin->rows);
+      if (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL)
+        *minimum_height = *natural_height = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+      else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL)
+        *minimum_height = *natural_height = 1; //(gint) (requisition->width / plugin->rows / plugin->ratio * n_cols);
+      else /* (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR) */
+        *minimum_height = *natural_height = 1; //(gint) (requisition->width / n_cols / plugin->ratio * plugin->rows);
+    }
+  else
+    {
+      gtk_widget_get_preferred_height (plugin->pager, minimum_height, natural_height);
+    }
+}
+
+static void
+pager_plugin_get_preferred_height_for_width (GtkWidget *widget,
+                                             gint       width,
+                                             gint      *minimum_height,
+                                             gint      *natural_height)
+{
+  PagerPlugin         *plugin = XFCE_PAGER_PLUGIN (widget);
+  XfcePanelPluginMode  mode;
+  gint                 n_workspaces, n_cols;
+
+  if (plugin->miniature_view)
+    {
+      mode   = xfce_panel_plugin_get_mode (XFCE_PANEL_PLUGIN (plugin));
+      n_workspaces = wnck_screen_get_workspace_count (plugin->wnck_screen);
+      n_cols = MAX (1, (n_workspaces + plugin->rows - 1) / plugin->rows);
+      if (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL)
+        *minimum_height = *natural_height = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+      else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL)
+        *minimum_height = *natural_height = (gint) (width / plugin->rows / plugin->ratio * n_cols);
+      else /* (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR) */
+        *minimum_height = *natural_height = (gint) (width / n_cols / plugin->ratio * plugin->rows);
+    }
+  else
+    {
+      gtk_widget_get_preferred_height_for_width (plugin->pager, width, minimum_height, natural_height);
+    }
+}
+