diff -pru dillo/src/browser.h dillo073-myxtab/src/browser.h
--- dillo/src/browser.h	Sat Aug  9 12:14:02 2003
+++ dillo073-myxtab/src/browser.h	Fri Aug  8 00:50:09 2003
@@ -144,6 +144,7 @@ struct _DilloDoc
 
    /* This is the main document widget. (HTML rendering or whatever) */
    GtkWidget *docwin;
+   GtkWidget *socket;
 
    /* The "Headings" and "Anchors" menus */
    GtkWidget *pagemarks_menu;
diff -pru dillo/src/commands.c dillo073-myxtab/src/commands.c
--- dillo/src/commands.c	Sat Aug  9 12:15:05 2003
+++ dillo073-myxtab/src/commands.c	Sat Aug  9 10:35:07 2003
@@ -11,6 +11,7 @@
  */
 
 #include <gtk/gtk.h>
+#include <gdk/gdkx.h>
 #include <stdio.h>              /* for sprintf */
 #include <sys/time.h>           /* for gettimeofday (testing gorp only) */
 #include <unistd.h>
@@ -437,6 +438,94 @@ void a_Commands_save_callback(GtkWidget 
    a_Interface_save_dialog(widget, bw);
 }
 
+extern void Tab_label_button_press_event_callback(GtkWidget *widget,
+                                      GdkEventButton *event,
+                                      gpointer client_data);
+extern void
+Tab_label_size_request_callback(GtkWidget *widget,
+                                GtkAllocation *alloc,
+                                gpointer client_data);
+
+/*
+ * Add a tab (containing an external Gtk program socket) to a browser window
+ */
+void a_Commands_SYSTEMX_callback(GtkWidget *widget, gpointer client_data)
+{
+   BrowserWindow *bw = (BrowserWindow *)client_data;
+   DilloDoc *newdd;
+
+   if (gtk_selection_owner_set(widget,GDK_SELECTION_PRIMARY,GDK_CURRENT_TIME))
+   {
+	  char cmdstr[256];
+      GString *tab_title;
+      GtkWidget *tab_label, *tab_label_event_box, *box;
+      GtkPackType *pack_type = g_new0(GtkPackType, 1);
+
+      // get url for name
+	  Selection = g_strdup(URL_STR(bw->menu_popup.url));
+
+	  // create destination socket for external Gtk app
+      newdd = a_Doc_new();
+      newdd->bw = bw;
+      newdd->socket = gtk_socket_new();
+      gtk_widget_show(newdd->socket);
+
+      a_Doc_set_browserwindow(newdd, bw);
+
+      tab_title = g_string_new(Selection);
+      tab_label_event_box = gtk_event_box_new();
+      tab_label = gtk_label_new(tab_title->str);
+      gtk_widget_show(tab_label);
+      gtk_container_add(GTK_CONTAINER(tab_label_event_box), tab_label);
+      box = gtk_hbox_new(TRUE, 0);
+      gtk_container_set_border_width(GTK_CONTAINER(box), 0);
+      gtk_container_add(GTK_CONTAINER(box), newdd->docwin);
+      // hide non-displaying docwin
+      gtk_widget_hide(newdd->docwin);
+      gtk_container_add(GTK_CONTAINER(box), newdd->socket);
+      gtk_widget_show(box);
+      gtk_notebook_append_page(GTK_NOTEBOOK(bw->container), box, tab_label_event_box);
+
+      /* add tooltip with full title. This has to be attached to the event box,
+       * since label widgets are windowless and hence can not receive events */
+      gtk_tooltips_set_tip(GTK_TOOLTIPS(newdd->bw->tooltips),
+                           GTK_WIDGET(tab_label_event_box),
+                           tab_title->str,
+                           tab_title->str);
+
+      /* make sure the tab labels adjust their size according to available space */
+      gtk_signal_connect_after(GTK_OBJECT(tab_label),
+                           "size_allocate",
+                           GTK_SIGNAL_FUNC(Tab_label_size_request_callback),
+                           (gpointer) newdd);
+
+      /* catch button press events for showing menu, etc. This has to be attached
+       * to the event box, since label widgets are windowless and hence can not
+       * receive events */
+      gtk_signal_connect_after(GTK_OBJECT(tab_label_event_box),
+                      "button_press_event",
+                      GTK_SIGNAL_FUNC(Tab_label_button_press_event_callback),
+                      (gpointer) newdd);
+
+      // clean up after this train wreck
+      g_string_free(tab_title, TRUE);
+      gtk_notebook_query_tab_label_packing(GTK_NOTEBOOK(bw->container), GTK_WIDGET(newdd->socket)->parent, NULL, NULL, pack_type);
+      gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(bw->container), GTK_WIDGET(newdd->socket)->parent, TRUE, TRUE, *pack_type);
+      g_free(pack_type);
+      a_Tab_visibility_update(bw);
+
+      // show the results of our efforts
+      a_Tab_switch(newdd);
+
+      // Compose a command string for SYSTEM()
+	  if (!strncmp(Selection, "file:",5)) Selection += 5;
+	  sprintf(cmdstr,"gdx -x %u %s &",(gint) GDK_WINDOW_XWINDOW(newdd->socket->window) ,Selection);
+	  printf ("Opento:'%s'\n",(cmdstr));
+
+      // invoke suitably modified external Gtk app with '-x <XID>' option
+	  SYSTEM(cmdstr);
+   }
+}
 
 /*
  * Bring up the save link dialog
diff -pru dillo/src/commands.h dillo073-myxtab/src/commands.h
--- dillo/src/commands.h	Sat Aug  9 12:15:05 2003
+++ dillo073-myxtab/src/commands.h	Fri Aug  8 01:01:31 2003
@@ -31,6 +31,7 @@ void a_Commands_toglcolor_callback (GtkW
 void a_Commands_stop_callback (GtkWidget *widget, gpointer client_data);
 void a_Commands_home_callback (GtkWidget *widget, gpointer client_data);
 void a_Commands_save_callback (GtkWidget *widget, gpointer client_data);
+void a_Commands_SYSTEMX_callback(GtkWidget *widget, gpointer client_data);
 void a_Commands_save_doc_callback (GtkWidget *widget, gpointer client_data);
 void a_Commands_save_link_callback (GtkWidget *widget, gpointer client_data);
 void a_Commands_addbm_callback (GtkWidget *widget, gpointer client_data);
diff -pru dillo/src/dillo.c dillo073-myxtab/src/dillo.c
--- dillo/src/dillo.c	Sat Aug  9 12:15:05 2003
+++ dillo073-myxtab/src/dillo.c	Fri Aug  8 00:50:09 2003
@@ -268,7 +268,9 @@ gint main(int argc, char *argv[])
 
    /* a_Nav_init() has been moved into this call because it needs to be
     * initialized with the new browser_window structure */
+printf("xid='%u'\n",xid);
    bw = a_Interface_browser_window_new(prefs.width, prefs.height, xid);
+printf("docwin='%u'\n",bw->dd->docwin);
 
    a_Bookmarks_init();
 
diff -pru dillo/src/menu.c dillo073-myxtab/src/menu.c
--- dillo/src/menu.c	Sat Aug  9 12:15:05 2003
+++ dillo073-myxtab/src/menu.c	Sat Aug  9 10:57:14 2003
@@ -432,12 +432,15 @@ GtkWidget *a_Menu_popup_ol_new(BrowserWi
    Menu_sep(menu);
    Menu_add(menu, "       LINK OPTIONS", NULL, bw, NULL, NULL);
    Menu_sep(menu);
-   Menu_add(menu, "Open Link in New Window", NULL, bw,
-            a_Commands_open_link_nw_callback, bw);
 #ifndef DISABLE_TABS
+   Menu_add(menu, "Edit:", NULL, bw,
+	    a_Commands_SYSTEMX_callback, bw);
+
    Menu_add(menu, "Open Link in New Tab", NULL, bw,
             a_Commands_open_link_nw_tab_callback, bw);
 #endif /* !DISABLE_TABS */
+   Menu_add(menu, "Open Link in New Window", NULL, bw,
+            a_Commands_open_link_nw_callback, bw);
    Menu_add(menu, "Add Bookmark for Link", NULL, bw,
             a_Commands_addbm_link_callback, bw);
 
diff -pru dillo/stamp-h.in dillo073-myxtab/stamp-h.in
--- dillo/stamp-h.in	Sat Aug  9 12:14:49 2003
+++ dillo073-myxtab/stamp-h.in	Fri Aug  8 00:50:09 2003
@@ -0,0 +1 @@
+timestamp
