diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index bb528fd..c8ad591 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -390,7 +390,7 @@ static void gtk_notebook_calc_tabs           (GtkNotebook      *notebook,
 
 /*** GtkNotebook Page Switch Methods ***/
 static void gtk_notebook_real_switch_page    (GtkNotebook      *notebook,
-					      GtkNotebookPage  *page,
+					      GtkNotebookPage  *child,
 					      guint             page_num);
 
 /*** GtkNotebook Page Switch Functions ***/
@@ -6011,12 +6011,14 @@ gtk_notebook_update_tab_states (GtkNotebook *notebook)
  */
 static void
 gtk_notebook_real_switch_page (GtkNotebook     *notebook,
-			       GtkNotebookPage *page,
+			       GtkNotebookPage* child,
 			       guint            page_num)
 {
+  GList *list = gtk_notebook_find_child (notebook, GTK_WIDGET (child), NULL);
+  GtkNotebookPage *page = GTK_NOTEBOOK_PAGE (list);
   gboolean child_has_focus;
 
-  if (notebook->cur_page == page || !gtk_widget_get_visible (page->child))
+  if (notebook->cur_page == page || !gtk_widget_get_visible (GTK_WIDGET (child)))
     return;
 
   /* save the value here, changing visibility changes focus */
@@ -6074,7 +6076,7 @@ gtk_notebook_switch_page (GtkNotebook     *notebook,
   g_signal_emit (notebook,
 		 notebook_signals[SWITCH_PAGE],
 		 0,
-		 page,
+		 page->child,
 		 page_num);
 }
 
diff --git a/gtk/gtknotebook.h b/gtk/gtknotebook.h
index e58bc5d..9774d77 100644
--- a/gtk/gtknotebook.h
+++ b/gtk/gtknotebook.h
@@ -54,13 +54,19 @@ typedef enum
 
 typedef struct _GtkNotebook       GtkNotebook;
 typedef struct _GtkNotebookClass  GtkNotebookClass;
+#if !defined (GTK_DISABLE_DEPRECATED) || defined (GTK_COMPILATION)
 typedef struct _GtkNotebookPage   GtkNotebookPage;
+#endif
 
 struct _GtkNotebook
 {
   GtkContainer container;
   
+#if !defined (GTK_DISABLE_DEPRECATED) || defined (GTK_COMPILATION)
   GtkNotebookPage *GSEAL (cur_page);
+#else
+  gpointer GSEAL (cur_page);
+#endif
   GList *GSEAL (children);
   GList *GSEAL (first_tab);		/* The first tab visible (for scrolling notebooks) */
   GList *GSEAL (focus_tab);
@@ -97,7 +103,11 @@ struct _GtkNotebookClass
   GtkContainerClass parent_class;
 
   void (* switch_page)       (GtkNotebook     *notebook,
+#if !defined (GTK_DISABLE_DEPRECATED) || defined (GTK_COMPILATION)
                               GtkNotebookPage *page,
+#else
+                              gpointer         page,
+#endif
 			      guint            page_num);
 
   /* Action signals for keybindings */
diff --git a/modules/other/gail/gailnotebookpage.h b/modules/other/gail/gailnotebookpage.h
index 38e2acf..27778ce 100644
--- a/modules/other/gail/gailnotebookpage.h
+++ b/modules/other/gail/gailnotebookpage.h
@@ -40,7 +40,11 @@ struct _GailNotebookPage
   AtkObject parent;
 
   GtkNotebook *notebook;
+#ifndef GTK_DISABLE_DEPRECATED
   GtkNotebookPage *page;
+#else
+  gpointer page;
+#endif
   
   gint index;
   guint notify_child_added_id;
diff --git a/tests/testgtk.c b/tests/testgtk.c
index abd1f7f..4cc494e 100644
--- a/tests/testgtk.c
+++ b/tests/testgtk.c
@@ -6681,7 +6681,7 @@ set_page_image (GtkNotebook *notebook, gint page_num, GdkPixbuf *pixbuf)
 }
 
 static void
-page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
+page_switch (GtkWidget *widget, gpointer *page, gint page_num)
 {
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
   gint old_page_num = gtk_notebook_get_current_page (notebook);
