diff --git a/stickynotes/stickynotes.c b/stickynotes/stickynotes.c
index 6113338..227f332 100644
--- a/stickynotes/stickynotes.c
+++ b/stickynotes/stickynotes.c
@@ -196,13 +196,26 @@ stickynote_new_aux (GdkScreen *screen, gint x, gint y, gint w, gint h)
 
 	gtk_widget_realize (note->w_window);
 
-	/* gnome_popup_menu_*() are deprecated. Rewrite to use gtk_menu_popup_*()? */
 	/* Connect a popup menu to all buttons and title */
-	gnome_popup_menu_attach(note->w_menu, note->w_window, note);
-	gnome_popup_menu_attach(note->w_menu, note->w_lock, note);
-	gnome_popup_menu_attach(note->w_menu, note->w_close, note);
-	gnome_popup_menu_attach(note->w_menu, note->w_resize_se, note);
-	gnome_popup_menu_attach(note->w_menu, note->w_resize_sw, note);
+	/* GtkBuilder holds and drops the references to all the widgets it 
+	 * creates for as long as it exist (GtkBuilder). Hence in our callback
+	 * we would have an invalid GtkMenu. We need to ref it.
+	 */
+	g_object_ref (note->w_menu);
+	g_signal_connect (G_OBJECT (note->w_window), "button-press-event",
+			G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+	g_signal_connect (G_OBJECT (note->w_lock), "button-press-event",
+			G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+	g_signal_connect (G_OBJECT (note->w_close), "button-press-event",
+			G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+	g_signal_connect (G_OBJECT (note->w_resize_se), "button-press-event",
+			G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
+
+	g_signal_connect (G_OBJECT (note->w_resize_sw), "button-press-event",
+			G_CALLBACK (stickynote_show_popup_menu), note->w_menu);
 
 	/* Connect a properties dialog to the note */
 	gtk_window_set_transient_for (GTK_WINDOW(note->w_properties),
diff --git a/stickynotes/stickynotes_callbacks.c b/stickynotes/stickynotes_callbacks.c
index baef8aa..2553c9f 100644
--- a/stickynotes/stickynotes_callbacks.c
+++ b/stickynotes/stickynotes_callbacks.c
@@ -99,6 +99,22 @@ gboolean stickynote_delete_cb(GtkWidget *widget, GdkEvent *event, StickyNote *no
 	return TRUE;
 }
 
+/* Sticky Window Callback : Popup the right click menu. */
+gboolean
+stickynote_show_popup_menu (GtkWidget *widget, GdkEventButton *event, GtkWidget *popup_menu)
+{
+	if (event->type = GDK_BUTTON_PRESS && event->button == 3)
+	{
+		gtk_menu_popup (GTK_MENU (popup_menu),
+				NULL, NULL,
+				NULL, NULL,
+				event->button, event->time);
+	}
+
+	return FALSE;
+}
+
+
 /* Popup Menu Callback : Create a new sticky note */
 void popup_create_cb(GtkWidget *widget, StickyNote *note)
 {
diff --git a/stickynotes/stickynotes_callbacks.h b/stickynotes/stickynotes_callbacks.h
index fcda1e0..686d7da 100644
--- a/stickynotes/stickynotes_callbacks.h
+++ b/stickynotes/stickynotes_callbacks.h
@@ -30,6 +30,7 @@ gboolean stickynote_move_cb(GtkWidget *widget, GdkEventButton *event, StickyNote
 gboolean stickynote_expose_cb(GtkWidget *widget, GdkEventExpose *event, StickyNote *note);
 gboolean stickynote_configure_cb(GtkWidget *widget, GdkEventConfigure *event, StickyNote *note);
 gboolean stickynote_delete_cb(GtkWidget *widget, GdkEvent *event, StickyNote *note);
+gboolean stickynote_show_popup_menu(GtkWidget *widget, GdkEventButton *event, GtkWidget *popup_menu);
 
 /* Callbacks for the sticky notes popup menu */
 void popup_create_cb(GtkWidget *widget, StickyNote *note);
