diff --git a/data/evince-ui.xml b/data/evince-ui.xml
index 7ac4edb..4b78964 100644
--- data/evince-ui.xml
+++ data/evince-ui.xml
@@ -5,7 +5,6 @@
       <menuitem name="FileOpenCopyMenu" action="FileOpenCopy"/>
       <menuitem name="FileSaveAsMenu" action="FileSaveAs"/>
       <separator/>
-      <menuitem name="FilePageSetupMenu" action="FilePageSetup"/>
       <menuitem name="FilePrintMenu" action="FilePrint"/>
       <separator/>
       <menuitem name="FilePropertiesMenu" action="FileProperties"/>
diff --git a/shell/ev-print-operation.c b/shell/ev-print-operation.c
index a6f8d53..66205f4 100644
--- shell/ev-print-operation.c
+++ shell/ev-print-operation.c
@@ -79,6 +79,10 @@ struct _EvPrintOperationClass {
 	void              (* cancel)                 (EvPrintOperation       *op);
 	void              (* get_error)              (EvPrintOperation       *op,
 						      GError                **error);
+#if GTK_CHECK_VERSION (2, 17, 4)
+	void              (* set_embed_page_setup)   (EvPrintOperation       *op,
+						      gboolean                embed);
+#endif
 
 	/* signals */
 	void              (* done)                   (EvPrintOperation       *op,
@@ -327,6 +331,19 @@ ev_print_operation_update_status (EvPrintOperation *op,
 }
 #endif
 
+#if GTK_CHECK_VERSION (2, 17, 4)
+void
+ev_print_operation_set_embed_page_setup (EvPrintOperation *op,
+					 gboolean          embed)
+{
+	EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+	g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+
+	class->set_embed_page_setup (op, embed);
+}
+#endif
+
 #if GTKUNIXPRINT_ENABLED
 
 /* Export interface */
@@ -1619,6 +1636,18 @@ ev_print_operation_print_status_changed (EvPrintOperationPrint *print)
 #endif
 }
 
+#if GTK_CHECK_VERSION (2, 17, 4)
+static void
+ev_print_operation_print_set_embed_page_setup (EvPrintOperation *op,
+					       gboolean          embed)
+{
+	EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+	gtk_print_operation_set_embed_page_setup (print->op, embed);
+}
+#endif
+
+
 static void
 print_job_finished (EvJobPrint            *job,
 		    EvPrintOperationPrint *print)
@@ -1744,6 +1773,9 @@ ev_print_operation_print_class_init (EvPrintOperationPrintClass *klass)
 	ev_print_op_class->run = ev_print_operation_print_run;
 	ev_print_op_class->cancel = ev_print_operation_print_cancel;
 	ev_print_op_class->get_error = ev_print_operation_print_get_error;
+#if GTK_CHECK_VERSION (2, 17, 4)
+	ev_print_op_class->set_embed_page_setup = ev_print_operation_print_set_embed_page_setup;
+#endif
 
 	g_object_class->finalize = ev_print_operation_print_finalize;
 }
diff --git a/shell/ev-print-operation.h b/shell/ev-print-operation.h
index 20120d6..e3894e7 100644
--- shell/ev-print-operation.h
+++ shell/ev-print-operation.h
@@ -58,6 +58,10 @@ void              ev_print_operation_get_error              (EvPrintOperation *o
 							     GError          **error);
 const gchar      *ev_print_operation_get_status             (EvPrintOperation *op);
 gdouble           ev_print_operation_get_progress           (EvPrintOperation *op);
+#if GTK_CHECK_VERSION (2, 17, 4)
+void              ev_print_operation_set_embed_page_setup   (EvPrintOperation *op,
+							     gboolean          embed);
+#endif
 
 G_END_DECLS
 	
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 4cd8b64..8f6becf 100644
--- shell/ev-window.c
+++ shell/ev-window.c
@@ -386,7 +386,9 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window)
 	/* File menu */
 	ev_window_set_action_sensitive (ev_window, "FileOpenCopy", has_document);
 	ev_window_set_action_sensitive (ev_window, "FileSaveAs", has_document && ok_to_copy);
+#if !GTK_CHECK_VERSION (2, 17, 4)
 	ev_window_set_action_sensitive (ev_window, "FilePageSetup", has_pages && ok_to_print);
+#endif
 	ev_window_set_action_sensitive (ev_window, "FilePrint", has_pages && ok_to_print);
 	ev_window_set_action_sensitive (ev_window, "FileProperties", has_document && has_properties);
 
@@ -2754,6 +2756,7 @@ ev_window_load_print_page_setup_from_metadata (EvWindow *window)
 	}	
 }
 
+#if !GTK_CHECK_VERSION (2, 17, 4)
 static void
 ev_window_print_page_setup_done_cb (GtkPageSetup *page_setup,
 				    EvWindow     *window)
@@ -2788,6 +2791,7 @@ ev_window_cmd_file_print_setup (GtkAction *action, EvWindow *ev_window)
 		(GtkPageSetupDoneFunc) ev_window_print_page_setup_done_cb,
 		ev_window);
 }
+#endif
 
 static void
 ev_window_print_cancel (EvWindow *ev_window)
@@ -2846,6 +2850,9 @@ ev_window_print_operation_done (EvPrintOperation       *op,
 	switch (result) {
 	case GTK_PRINT_OPERATION_RESULT_APPLY: {
 		GtkPrintSettings *print_settings;
+#if GTK_CHECK_VERSION (2, 17, 4)
+		GtkPageSetup     *page_setup;
+#endif
 		
 		print_settings = ev_print_operation_get_print_settings (op);
 		if (ev_window->priv->print_settings != print_settings) {
@@ -2856,6 +2863,18 @@ ev_window_print_operation_done (EvPrintOperation       *op,
 		
 		ev_application_set_print_settings (EV_APP, print_settings);
 		ev_window_save_print_settings (ev_window);
+
+#if GTK_CHECK_VERSION (2, 17, 4)
+		page_setup = ev_print_operation_get_default_page_setup (op);
+		if (ev_window->priv->print_page_setup != page_setup) {
+			if (ev_window->priv->print_page_setup)
+				g_object_unref (ev_window->priv->print_page_setup);
+			ev_window->priv->print_page_setup = g_object_ref (page_setup);
+		}
+	
+		ev_application_set_page_setup (EV_APP, page_setup);
+		ev_window_save_print_page_setup (ev_window);
+#endif
 	}
 
 		break;
@@ -3039,6 +3058,9 @@ ev_window_print_range (EvWindow *ev_window,
 	ev_print_operation_set_current_page (op, current_page);
 	ev_print_operation_set_print_settings (op, ev_window->priv->print_settings);
 	ev_print_operation_set_default_page_setup (op, ev_window->priv->print_page_setup);
+#if GTK_CHECK_VERSION (2, 17, 4)
+	ev_print_operation_set_embed_page_setup (op, TRUE);
+#endif
 
 	ev_print_operation_run (op, GTK_WINDOW (ev_window));
 }
@@ -4924,9 +4946,11 @@ static const GtkActionEntry entries[] = {
        	{ "FileSaveAs", GTK_STOCK_SAVE_AS, N_("_Save a Copy..."), "<control>S",
 	  N_("Save a copy of the current document"),
 	  G_CALLBACK (ev_window_cmd_save_as) },
+#if !GTK_CHECK_VERSION (2, 17, 4)
 	{ "FilePageSetup", GTK_STOCK_PAGE_SETUP, N_("Page Set_up..."), NULL,
 	  N_("Setup the page settings for printing"),
 	  G_CALLBACK (ev_window_cmd_file_print_setup) },
+#endif
 	{ "FilePrint", GTK_STOCK_PRINT, N_("_Print..."), "<control>P",
 	  N_("Print this document"),
 	  G_CALLBACK (ev_window_cmd_file_print) },
@@ -5892,6 +5916,7 @@ ev_window_init (EvWindow *ev_window)
 	GtkWidget *sidebar_widget;
 	GObject *mpkeys;
 	gchar *ui_path;
+	guint merge_id;
 
 	g_signal_connect (ev_window, "configure_event",
 			  G_CALLBACK (window_configure_event_cb), NULL);
@@ -5948,13 +5973,26 @@ ev_window_init (EvWindow *ev_window)
 
 	ui_path = g_build_filename (ev_application_get_data_dir (EV_APP),
 				    "evince-ui.xml", NULL);
-	if (!gtk_ui_manager_add_ui_from_file (
-		ev_window->priv->ui_manager, ui_path, &error))
+	merge_id = gtk_ui_manager_add_ui_from_file (
+		ev_window->priv->ui_manager, ui_path, &error);
+	if (merge_id == 0)
 	{
 		g_warning ("building menus failed: %s", error->message);
 		g_error_free (error);
 	}
 	g_free (ui_path);
+
+#if !GTK_CHECK_VERSION (2, 17, 4)
+	{
+		gtk_ui_manager_add_ui (ev_window->priv->ui_manager,
+				       merge_id,
+				       "/MainMenu/FileMenu/FilePrintMenu",
+				       "FilePageSetupMenu",
+				       "FilePageSetup",
+				       GTK_UI_MANAGER_MENUITEM,
+				       TRUE);
+	}
+#endif
 	
 	ev_window->priv->recent_manager = gtk_recent_manager_get_default ();
 	ev_window->priv->recent_action_group = NULL;
