diff --git a/libview/ev-print-operation.c b/libview/ev-print-operation.c
index 4a268b4..e054320 100644
--- a/libview/ev-print-operation.c
+++ b/libview/ev-print-operation.c
@@ -1857,6 +1857,7 @@ ev_print_operation_print_draw_page (EvPrintOperationPrint *print,
 	gdouble           x_scale, y_scale;
         gdouble           x_offset, y_offset;
 	gdouble           top, bottom, left, right;
+	gboolean          landscape;
 
 	gtk_print_operation_set_defer_drawing (print->op);
 
@@ -1881,13 +1882,23 @@ ev_print_operation_print_draw_page (EvPrintOperationPrint *print,
 	cr_height = gtk_print_context_get_height (context);
         ev_print_operation_print_get_scaled_page_size (print, page, &width, &height);
 
+	landscape = FALSE;
+	if (cr_width > cr_height) /* or extract from GtkPageSetup */
+		landscape = TRUE;
+
 	if (print->page_scale == EV_SCALE_NONE) {
 		/* Center document page on the printed page */
 		if (print->autorotate) {
-                        x_offset = (cr_width - width) / 2;
-                        y_offset = (cr_height - height) / 2;
-                        cairo_device_to_user (cr, &x_offset, &y_offset);
-                        cairo_translate (cr, x_offset, y_offset);
+			if (landscape) {
+				y_offset = - (cr_width - width) / 2;
+				x_offset = (cr_height - height) / 2;
+			} else {
+				x_offset = (cr_width - width) / 2;
+				y_offset = (cr_height - height) / 2;
+			}
+
+			cairo_device_to_user_distance (cr, &x_offset, &y_offset);
+			cairo_translate (cr, x_offset, y_offset);
                 }
 	} else {
 		_print_context_get_hard_margins (context, &top, &bottom, &left, &right);
@@ -1901,27 +1912,15 @@ ev_print_operation_print_draw_page (EvPrintOperationPrint *print,
                         scale = 1.0;
 
 		if (print->autorotate) {
-                        x_offset = (cr_width - scale * width) / 2;
-                        y_offset = (cr_height - scale * height) / 2;
-                        cairo_device_to_user (cr, &x_offset, &y_offset);
+			if (landscape) {
+				y_offset = - (cr_width - scale*width) / 2;
+				x_offset = (cr_height - scale*height) / 2;
+			} else {
+				x_offset = (cr_width - scale*width) / 2;
+				y_offset = (cr_height - scale*height) / 2;
+			}
+			cairo_device_to_user_distance (cr, &x_offset, &y_offset);
                         cairo_translate (cr, x_offset, y_offset);
-
-			/* Ensure document page is within the margins. The
-			 * scale guarantees the document will fit in the
-			 * margins so we just need to check each side and
-			 * if it overhangs the margin, translate it to the
-                         * margin. */
-			if (x_offset < left)
-				cairo_translate (cr, left - x_offset, 0);
-
-			if (x_offset < right)
-				cairo_translate (cr, -(right - x_offset), 0);
-
-			if (y_offset < top)
-				cairo_translate (cr, 0, top - y_offset);
-
-			if (y_offset < bottom)
-				cairo_translate (cr, 0, -(bottom - y_offset));
 		} else {
 			cairo_translate (cr, left, top);
 		}
