Index: src/eog-print-image-setup.c
===================================================================
--- src/eog-print-image-setup.c	(revision 4903)
+++ src/eog-print-image-setup.c	(working copy)
@@ -1041,3 +1041,34 @@
 	*scale = gtk_range_get_value (GTK_RANGE (priv->scaling));
 	*unit = priv->current_unit;
 }
+
+void
+eog_print_image_reinit (GtkPrintUnixDialog *dialog,
+			EogPrintImageSetup *setup)
+{
+	GtkWidget *preview;
+	gdouble    pos_x;
+	gdouble    pos_y;
+
+	if (setup->priv->page_setup)
+		{
+			g_object_unref (setup->priv->page_setup);
+			setup->priv->page_setup = gtk_page_setup_copy (gtk_print_unix_dialog_get_page_setup (dialog));
+		}
+	else
+		setup->priv->page_setup = gtk_page_setup_copy (gtk_print_unix_dialog_get_page_setup (dialog));
+
+	set_initial_values (EOG_PRINT_IMAGE_SETUP (setup));
+
+	preview = EOG_PRINT_IMAGE_SETUP (setup)->priv->preview;
+	eog_print_preview_set_from_page_setup (EOG_PRINT_PREVIEW (preview),
+					       setup->priv->page_setup);
+
+	pos_x = gtk_spin_button_get_value (GTK_SPIN_BUTTON (setup->priv->left));
+	pos_y = gtk_spin_button_get_value (GTK_SPIN_BUTTON (setup->priv->top));
+	if (setup->priv->current_unit == GTK_UNIT_MM) {
+		pos_x *= FACTOR_MM_TO_INCH;
+		pos_y *= FACTOR_MM_TO_INCH;
+	}
+	eog_print_preview_set_image_position (EOG_PRINT_PREVIEW (setup->priv->preview), pos_x, pos_y);
+}
Index: src/eog-print-image-setup.h
===================================================================
--- src/eog-print-image-setup.h	(revision 4903)
+++ src/eog-print-image-setup.h	(working copy)
@@ -57,6 +57,8 @@
 						     gdouble            *top,
 						     gdouble            *scale,
 						     GtkUnit            *unit);
+void              eog_print_image_reinit            (GtkPrintUnixDialog *dialog,
+						     EogPrintImageSetup *setup);
 
 G_END_DECLS
 
Index: src/eog-print.c
===================================================================
--- src/eog-print.c	(revision 4903)
+++ src/eog-print.c	(working copy)
@@ -20,6 +20,7 @@
  */
 
 #include <gtk/gtk.h>
+#include <gtk/gtkprintunixdialog.h>
 #include <glib/gi18n.h>
 #include "eog-print.h"
 #include "eog-print-image-setup.h"
@@ -119,6 +120,28 @@
 }
 
 static void
+eog_print_init_custom_widget (GtkPrintOperation  *operation,
+                              GtkWidget          *print_dialog,
+                              GtkWidget          *custom_widget,
+			      gpointer            user_data)
+{
+	EogPrintData *data;
+	GtkPrintUnixDialog *print_unix_dialog;
+	EogPrintImageSetup *setup;
+
+	eog_debug (DEBUG_PRINTING);
+
+	data = (EogPrintData *)user_data;
+
+	print_unix_dialog = GTK_PRINT_UNIX_DIALOG (print_dialog);
+	setup = EOG_PRINT_IMAGE_SETUP (custom_widget);
+
+	g_signal_connect (print_unix_dialog, "printer-changed",
+			  G_CALLBACK (eog_print_image_reinit),
+			  setup);
+}
+
+static void
 eog_print_custom_widget_apply (GtkPrintOperation *operation,
 			       GtkWidget         *widget,
 			       gpointer           user_data)
@@ -187,6 +210,9 @@
 	g_signal_connect (print, "create-custom-widget",
 			  G_CALLBACK (eog_print_create_custom_widget),
 			  data);
+	g_signal_connect (print, "init-custom-widget",
+			  G_CALLBACK (eog_print_init_custom_widget),
+			  data);
 	g_signal_connect (print, "custom-widget-apply",
 			  G_CALLBACK (eog_print_custom_widget_apply),
 			  data);
