diff -pru dillo/src/bookmark.c dillo.new/src/bookmark.c
--- dillo/src/bookmark.c	Sun Dec 10 01:26:18 2000
+++ dillo.new/src/bookmark.c	Fri Dec 22 00:00:57 2000
@@ -43,6 +43,22 @@
 /* double quote */
 #define D_QUOTE 0x22
 
+/* Data types */
+
+typedef struct _DilloBookmark DilloBookmark;
+typedef struct _DilloBookmarkCallbackInfo DilloBookmarkCallbackInfo;
+
+struct _DilloBookmark {
+   char *title;
+   char *url;
+   GtkWidget *menuitem;
+};
+
+struct _DilloBookmarkCallbackInfo {
+   BrowserWindow *bw;
+   guint index;
+};
+
 /*
  * Forward declarations
  */
@@ -80,31 +96,34 @@ void a_Bookmarks_init(void)
 /*
  * ?
  */
-static void Bookmarks_goto_bookmark(GtkWidget *widget, BrowserWindow *bw)
+static void Bookmarks_goto_bookmark(GtkWidget *widget, DilloBookmarkCallbackInfo *callback_info)
 {
-   gint i;
 
-   for (i = 0; i < num_bookmarks; i++)
-      if (widget == bookmarks[i].menuitem)
-         break;
-   if (i == num_bookmarks) {
+   if (callback_info->index >= num_bookmarks) {
       g_warning("bookmark not found!\n");
       return;
    }
-   a_Nav_push(bw, bookmarks[i].url);
+   a_Nav_push(callback_info->bw, bookmarks[callback_info->index].url);
 }
 
 /*
  * Add a bookmark to the bookmarks menu of a particular browser window
  */
-void a_Bookmarks_add_to_menu(BrowserWindow *bw, GtkWidget *menuitem)
+void a_Bookmarks_add_to_menu(BrowserWindow *bw, GtkWidget *menuitem, guint index)
 {
+   DilloBookmarkCallbackInfo *callback_info;
+
+   callback_info = g_malloc(sizeof(DilloBookmarkCallbackInfo));
+
    gtk_menu_append(GTK_MENU(bw->bookmarks_menu), menuitem);
 
+   callback_info->bw = bw;
+   callback_info->index = index;
+
    /* accelerator goes here */
 
    gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
-                      (GtkSignalFunc) Bookmarks_goto_bookmark, bw);
+                      (GtkSignalFunc) Bookmarks_goto_bookmark, callback_info);
 }
 
 /*
@@ -187,8 +206,12 @@ void a_Bookmarks_add(GtkWidget *widget, 
 
    /* add bookmark to bookmarks menu of _all_ browser windows. */
    menuitem = Bookmarks_insert(title, url);
-   for (i = 0; i < num_bw; i++)
-      a_Bookmarks_add_to_menu(browser_window[i], menuitem);
+   a_Bookmarks_add_to_menu(browser_window[0], menuitem, num_bookmarks-1);
+   for (i = 1; i < num_bw; i++) {
+      menuitem = gtk_menu_item_new_with_label(bookmarks[num_bookmarks-1].title);
+      gtk_widget_show(menuitem);
+      a_Bookmarks_add_to_menu(browser_window[i], menuitem, num_bookmarks-1);
+   }
 
    /* write bookmark to file */
    Bookmarks_file_op(SAVE_BOOKMARK, title, url);
@@ -284,7 +307,7 @@ static void Bookmarks_add_to_menu(FILE *
    char *title;
    char *url;
    char buf[4096];
-   gint i;
+   gint i = 0;
    GtkWidget *menuitem;
 
    rewind(fp);
@@ -306,10 +329,31 @@ static void Bookmarks_add_to_menu(FILE *
       }
 
       menuitem = Bookmarks_insert(title, url);
-      for (i = 0; i < num_bw; i++)
-         a_Bookmarks_add_to_menu(browser_window[i], menuitem);
+      /*      for (i = 0; i < num_bw; i++) 
+	      a_Bookmarks_add_to_menu(browser_window[i], menuitem); */
+      a_Bookmarks_add_to_menu(browser_window[0], menuitem, i);
       g_free(url);
       g_free(title);
+      i++;
+   }
+}
+
+/*
+ * Load bookmarks when new browser windows are opened.
+ * Called `a_Menu_mainbar_new()`
+ */
+void a_Bookmarks_add_to_new_menu(BrowserWindow *bw)
+{
+   gint i;
+   GtkWidget *menuitem;
+
+   g_print("Loading bookmarks...\n");
+   for (i = 0; i < num_bookmarks; i++){
+
+     menuitem = gtk_menu_item_new_with_label(bookmarks[i].title);
+     gtk_widget_show(menuitem);
+     
+     a_Bookmarks_add_to_menu(bw, menuitem, i);
    }
 }
 
diff -pru dillo/src/bookmark.h dillo.new/src/bookmark.h
--- dillo/src/bookmark.h	Mon Apr  3 23:26:55 2000
+++ dillo.new/src/bookmark.h	Fri Dec 22 00:01:29 2000
@@ -3,5 +3,6 @@
 
 void a_Bookmarks_init();
 void a_Bookmarks_add(GtkWidget *widget, gpointer client_data);
+void a_Bookmarks_add_to_new_menu(BrowserWindow *bw);
 
 #endif /* __DILLO_BOOKMARK_H__ */
diff -pru dillo/src/browser.h dillo.new/src/browser.h
--- dillo/src/browser.h	Sun Dec 17 23:35:36 2000
+++ dillo.new/src/browser.h	Fri Dec 22 00:01:18 2000
@@ -3,7 +3,6 @@
 
 #include <sys/types.h>
 typedef struct _BrowserWindow BrowserWindow;
-typedef struct _DilloBookmark DilloBookmark;
 typedef struct _DilloMenuPopup DilloMenuPopup;
 
 #include "image.h"
@@ -119,13 +118,6 @@ struct _BrowserWindow
 
    /* ? */
    BrowserWindow *bw;
-};
-
-
-struct _DilloBookmark {
-  char *title;
-  char *url;
-  GtkWidget *menuitem;
 };
 
 
diff -pru dillo/src/menu.c dillo.new/src/menu.c
--- dillo/src/menu.c	Sun Dec 17 23:35:37 2000
+++ dillo.new/src/menu.c	Fri Dec 22 00:01:46 2000
@@ -144,6 +144,7 @@ GtkWidget *a_Menu_mainbar_new(BrowserWin
    Menu_add(bookmarks_menu, "_View Bookmarks", NULL, bw,
             a_Commands_viewbm_callback, bw);
    Menu_sep(bookmarks_menu);
+   a_Bookmarks_add_to_new_menu(bw);
 
    /* HELP MENU */
    help_menu = Menu_new(menubar, "_Help", TRUE, bw);
