diff --git a/src/zmapApp/README b/src/zmapApp/README
new file mode 100755
index 0000000000000000000000000000000000000000..66f1572f29849bb3c2d7bbcb57f7b77d28311925
--- /dev/null
+++ b/src/zmapApp/README
@@ -0,0 +1,5 @@
+================================================================================   
+ZMapApp
+
+The code that forms the "main" of the zmap client application, it constructs
+the intial zmap window and creates/destroys individual ZMaps.
diff --git a/src/zmapApp/makefile b/src/zmapApp/makefile
new file mode 100755
index 0000000000000000000000000000000000000000..f32d31d75c010dcd5bbf09e6797ecedeab3ea937
--- /dev/null
+++ b/src/zmapApp/makefile
@@ -0,0 +1,50 @@
+#
+# Makes the manager part of the ZMap application.
+#
+
+
+# local macros
+APP_PRIV_HDRS = zmapApp_P.h
+APP_SRC = zmapAppwindow.c zmapAppmenubar.c zmapAppmanage.c zmapAppconnect.c
+APP_OBJ = zmapAppwindow.o zmapAppmenubar.o zmapAppmanage.o zmapAppconnect.o
+APP_CC_MAIN_OBJ = zmapAppmain_c.o
+APP_CCC_MAIN_OBJ = zmapAppmain_C.o
+APP_EXE = zmap zmapC
+
+#
+# These must all be set for the common includes to work.
+#
+CURRENT_LIB = $(ZMAPAPP_LIB)
+CURRENT_OBJ = $(APP_OBJ)
+CURRENT_DEP = $(PUB_HDRS) $(APP_PRIV_HDRS)
+CURRENT_SRC = $(APP_PRIV_HDRS) $(APP_SRC)
+CURRENT_REMOVE = cd $(BINDIR) ; rm -f $(APP_EXE) $(APP_CC_MAIN_OBJ) $(APP_CCC_MAIN_OBJ)
+
+#
+# point to common make include file which contains all the rules etc.
+#
+ROOT_DIRECTORY = ..
+MAKE_DIR = $(ROOT_DIRECTORY)/zmapMake
+include $(MAKE_DIR)/build.make
+
+
+# Make the application programs themselves.
+
+# ZMAP library...
+ZMAP_LIB_FLAGS = -L$(BINDIR) -lZMapApp -lZMap
+
+# Ace-Conn library...
+ACECONN_DIR = $(HOME)/acedb/CODE/Ace-Conn
+ACECONN_INCL_DIR = $(ACECONN_DIR)
+ACECONN_LIB_DIR = $(ACECONN_DIR)/bin.ALPHA_5
+ACECONN_LIB_FLAGS = -L$(ACECONN_LIB_DIR) -lAceConn -lmd5
+
+
+
+zmap: $(APP_CC_MAIN_OBJ) $(ZMAPAPP_LIB) $(ZMAP_LIB)
+	$(CC)  -g -pthread  -o $(BINDIR)/$@ `gtk-config --libs` $(BINDIR)/zmapAppmain_c.o $(ZMAP_LIB_FLAGS)  $(ACECONN_LIB_FLAGS)
+	@echo 'zmap (C version) make...'
+
+zmapC: $(APP_CCC_MAIN_OBJ) $(ZMAPAPP_LIB) $(ZMAP_LIB)
+	$(CCC)  -g -pthread  -o $(BINDIR)/$@ `gtk-config --libs` $(BINDIR)/zmapAppmain_c.o $(ZMAP_LIB_FLAGS)  $(ACECONN_LIB_FLAGS)
+	@echo 'zmap (C++ version) make...'
diff --git a/src/zmapApp/zmapApp_P.h b/src/zmapApp/zmapApp_P.h
new file mode 100755
index 0000000000000000000000000000000000000000..be2522b7adaddfc03699b05b5b2c2158e788138e
--- /dev/null
+++ b/src/zmapApp/zmapApp_P.h
@@ -0,0 +1,77 @@
+/*  File: zmapApp.h
+ *  Author: Ed Griffiths (edgrif@sanger.ac.uk)
+ *  Copyright (c) Sanger Institute, 2003
+ *-------------------------------------------------------------------
+ * ZMap is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * and was written by
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk and
+ *      Rob Clack (Sanger Institute, UK) rnc@sanger.ac.uk,
+ *
+ * Description: 
+ * Exported functions: See XXXXXXXXXXXXX.h
+ * HISTORY:
+ * Last edited: Nov 12 15:09 2003 (edgrif)
+ * Created: Thu Jul 24 14:35:41 2003 (edgrif)
+ * CVS info:   $Id: zmapApp_P.h,v 1.1 2003-11-13 14:58:39 edgrif Exp $
+ *-------------------------------------------------------------------
+ */
+#ifndef ZMAP_APP_PRIV_H
+#define ZMAP_APP_PRIV_H
+
+#include <gtk/gtk.h>
+#include <ZMap/zmapManager.h>
+
+
+/* Minimum GTK version supported. */
+enum {ZMAP_GTK_MAJOR = 1, ZMAP_GTK_MINOR = 2, ZMAP_GTK_MICRO = 10} ;
+
+
+/* Overall application control struct. */
+typedef struct
+{
+  GtkWidget *app_widg ;
+
+  GtkWidget *machine_widg ;
+  GtkWidget *port_widg ;
+  GtkWidget *sequence_widg ;
+
+  GtkWidget *clist_widg ;
+
+  ZMapManager zmap_manager ;
+  ZMapWinConn selected_zmap ;
+
+} ZMapAppContextStruct, *ZMapAppContext ;
+
+
+/* cols in connection list. */
+enum {ZMAP_NUM_COLS = 3} ;
+
+
+
+
+
+int zmapMainMakeAppWindow(int argc, char *argv[]) ;
+GtkWidget *zmapMainMakeMenuBar(ZMapAppContext app_context) ;
+GtkWidget *zmapMainMakeConnect(ZMapAppContext app_context) ;
+GtkWidget *zmapMainMakeManage(ZMapAppContext app_context) ;
+
+
+void zmapExit(ZMapAppContext app_context) ;
+
+
+#endif /* !ZMAP_APP_PRIV_H */
diff --git a/src/zmapApp/zmapAppconnect.c b/src/zmapApp/zmapAppconnect.c
new file mode 100755
index 0000000000000000000000000000000000000000..22733c14fd4fd0bb767497e4ab130a6fe3f6ccef
--- /dev/null
+++ b/src/zmapApp/zmapAppconnect.c
@@ -0,0 +1,141 @@
+/*  File: zmapappconnect.c
+ *  Author: Ed Griffiths (edgrif@sanger.ac.uk)
+ *  Copyright (c) Sanger Institute, 2003
+ *-------------------------------------------------------------------
+ * ZMap is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * and was written by
+ *      Rob Clack (Sanger Institute, UK) rnc@sanger.ac.uk,
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk and
+ *	Simon Kelley (Sanger Institute, UK) srk@sanger.ac.uk
+ *
+ * Description: 
+ * Exported functions: See XXXXXXXXXXXXX.h
+ * HISTORY:
+ * Last edited: Nov 12 15:06 2003 (edgrif)
+ * Created: Thu Jul 24 14:36:37 2003 (edgrif)
+ * CVS info:   $Id: zmapAppconnect.c,v 1.1 2003-11-13 14:58:39 edgrif Exp $
+ *-------------------------------------------------------------------
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <zmapApp_P.h>
+
+
+static void createThreadCB(GtkWidget *widget, gpointer data) ;
+
+
+
+GtkWidget *zmapMainMakeConnect(ZMapAppContext app_context)
+{
+  GtkWidget *frame ;
+  GtkWidget *topbox, *hbox, *entry, *label, *create_button ;
+
+  frame = gtk_frame_new( "New Connection" );
+  gtk_frame_set_label_align( GTK_FRAME( frame ), 0.0, 0.0 );
+  gtk_container_border_width(GTK_CONTAINER(frame), 5);
+
+  topbox = gtk_hbox_new(FALSE, 0) ;
+  gtk_container_border_width(GTK_CONTAINER(topbox), 5);
+  gtk_container_add (GTK_CONTAINER (frame), topbox);
+
+  hbox = gtk_hbox_new(FALSE, 0) ;
+  gtk_container_border_width(GTK_CONTAINER(hbox), 5);
+  gtk_box_pack_start(GTK_BOX(topbox), hbox, FALSE, FALSE, 0) ;
+
+  label = gtk_label_new( "Machine:" ) ;
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0) ;
+
+  app_context->machine_widg = entry = gtk_entry_new() ;
+  gtk_entry_set_text(GTK_ENTRY(entry), "") ;
+  gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1) ;
+  gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0) ;
+
+  hbox = gtk_hbox_new(FALSE, 0) ;
+  gtk_container_border_width(GTK_CONTAINER(hbox), 5);
+  gtk_box_pack_start(GTK_BOX(topbox), hbox, FALSE, FALSE, 0) ;
+
+  label = gtk_label_new( "Port:" ) ;
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0) ;
+
+  app_context->port_widg = entry = gtk_entry_new() ;
+  gtk_entry_set_text(GTK_ENTRY(entry), "") ;
+  gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1) ;
+  gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0) ;
+
+  hbox = gtk_hbox_new(FALSE, 0) ;
+  gtk_container_border_width(GTK_CONTAINER(hbox), 5);
+  gtk_box_pack_start(GTK_BOX(topbox), hbox, FALSE, FALSE, 0) ;
+
+  label = gtk_label_new( "Sequence:" ) ;
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0) ;
+
+  app_context->sequence_widg = entry = gtk_entry_new() ;
+  gtk_entry_set_text(GTK_ENTRY(entry), "") ;
+  gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1) ;
+  gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0) ;
+
+  create_button = gtk_button_new_with_label("Create Thread") ;
+  gtk_signal_connect(GTK_OBJECT(create_button), "clicked",
+		     GTK_SIGNAL_FUNC(createThreadCB), (gpointer)app_context) ;
+  gtk_box_pack_start(GTK_BOX(topbox), create_button, FALSE, FALSE, 0) ;
+  GTK_WIDGET_SET_FLAGS(create_button, GTK_CAN_DEFAULT) ;
+  gtk_widget_grab_default(create_button) ;
+
+
+  return frame ;
+}
+
+
+
+static void createThreadCB(GtkWidget *widget, gpointer cb_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+  char *machine ;
+  char *port_str ;
+  int port ;
+  char *sequence ;
+  char *row_text[ZMAP_NUM_COLS] = {"", "", ""} ;
+  int row ;
+  ZMapWinConn zmapconn ;
+
+  machine = gtk_entry_get_text(GTK_ENTRY(app_context->machine_widg)) ;
+  port_str = gtk_entry_get_text(GTK_ENTRY(app_context->port_widg)) ;
+  port = atoi(port_str) ;
+  sequence = gtk_entry_get_text(GTK_ENTRY(app_context->sequence_widg)) ;
+
+
+  zmapconn = zMapManagerAdd(app_context->zmap_manager, machine, port, sequence) ;
+  /* ERROR HANDLING ETC.... */
+
+
+  row_text[0] = machine ;
+  row_text[1] = port_str ;
+  row_text[2] = sequence ;
+
+  row = gtk_clist_append(GTK_CLIST(app_context->clist_widg), row_text) ;
+  gtk_clist_set_row_data(GTK_CLIST(app_context->clist_widg), row, (gpointer)zmapconn) ;
+
+
+  ZMAP_DEBUG(("GUI: create thread number %d to access: %s on port %d\n",
+		  (row + 1), machine ? machine : "localhost", port)) ;
+
+  return ;
+}
+
+
diff --git a/src/zmapApp/zmapAppmain_C.C b/src/zmapApp/zmapAppmain_C.C
new file mode 100755
index 0000000000000000000000000000000000000000..ad74e523812e2de3e204bc58c3bcb79334c824bd
--- /dev/null
+++ b/src/zmapApp/zmapAppmain_C.C
@@ -0,0 +1,48 @@
+/*  File: zmapAppmain_C.C
+ *  Author: Ed Griffiths (edgrif@sanger.ac.uk)
+ *  Copyright (c) Sanger Institute, 2003
+ *-------------------------------------------------------------------
+ * ZMap is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originated by
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk,
+ *      Rob Clack (Sanger Institute, UK) rnc@sanger.ac.uk
+ *
+ * Description: C++ main, if the executable is compiled/linked with
+ *              main then we can use C++ classes from our code.
+ * Exported functions: None.
+ * HISTORY:
+ * Created: Thu Nov 13 14:38:41 2003 (edgrif)
+ * CVS info:   $Id: zmapAppmain_C.C,v 1.1 2003-11-13 14:58:40 edgrif Exp $
+ *-------------------------------------------------------------------
+ */
+
+#include <zmapApp_P.h>
+
+
+int main(int argc, char *argv[])
+{
+  int main_rc ;
+  
+  // cout << "about to call zmap \"main\"" << endl ;
+
+  main_rc = zmapMainMakeAppWindow(argc, argv) ;
+
+  // cout << "I shouldn't have got here..." << endl ;
+
+  return(main_rc) ;
+}
diff --git a/src/zmapApp/zmapAppmain_c.c b/src/zmapApp/zmapAppmain_c.c
new file mode 100755
index 0000000000000000000000000000000000000000..859206b36f8bf63b4a7cb31894ad59b5338860a2
--- /dev/null
+++ b/src/zmapApp/zmapAppmain_c.c
@@ -0,0 +1,44 @@
+/*  File: zmapAppmain_c.c
+ *  Author: Ed Griffiths (edgrif@sanger.ac.uk)
+ *  Copyright (c) Sanger Institute, 2003
+ *-------------------------------------------------------------------
+ * ZMap is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originated by
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk,
+ *      Rob Clack (Sanger Institute, UK) rnc@sanger.ac.uk
+ *
+ * Description: C main, if the executable is compiled/linked with
+ *              main then you get a standard C executable.
+ * Exported functions: None.
+ * HISTORY:
+ * Last edited: Nov 13 14:40 2003 (edgrif)
+ * Created: Thu Nov 13 14:38:41 2003 (edgrif)
+ * CVS info:   $Id: zmapAppmain_c.c,v 1.1 2003-11-13 14:58:39 edgrif Exp $
+ *-------------------------------------------------------------------
+ */
+
+#include <zmapApp_P.h>
+
+int main(int argc, char *argv[])
+{
+  int main_rc ;
+  
+  main_rc = zmapMainMakeAppWindow(argc, argv) ;
+
+  return(main_rc) ;
+}
diff --git a/src/zmapApp/zmapAppmanage.c b/src/zmapApp/zmapAppmanage.c
new file mode 100755
index 0000000000000000000000000000000000000000..ebff829049a56408ca72d0df8fec94af268ecf0e
--- /dev/null
+++ b/src/zmapApp/zmapAppmanage.c
@@ -0,0 +1,203 @@
+/*  File: zmapappmanage.c
+ *  Author: Ed Griffiths (edgrif@sanger.ac.uk)
+ *  Copyright (c) Sanger Institute, 2003
+ *-------------------------------------------------------------------
+ * ZMap is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * and was written by
+ *      Rob Clack (Sanger Institute, UK) rnc@sanger.ac.uk,
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk and
+ *	Simon Kelley (Sanger Institute, UK) srk@sanger.ac.uk
+ *
+ * Description: 
+ * Exported functions: See XXXXXXXXXXXXX.h
+ * HISTORY:
+ * Last edited: Nov 13 12:29 2003 (edgrif)
+ * Created: Thu Jul 24 14:36:47 2003 (edgrif)
+ * CVS info:   $Id: zmapAppmanage.c,v 1.1 2003-11-13 14:58:39 edgrif Exp $
+ *-------------------------------------------------------------------
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <zmapApp_P.h>
+
+static void loadThreadCB(GtkWidget *widget, gpointer cb_data) ;
+static void killThreadCB(GtkWidget *widget, gpointer data) ;
+static void checkThreadCB(GtkWidget *widget, gpointer cb_data) ;
+static void selectRow(GtkCList *clist, gint row, gint column, GdkEventButton *event,
+		      gpointer cb_data) ;
+static void unselectRow(GtkCList *clist, gint row, gint column, GdkEventButton *event,
+			gpointer cb_data) ;
+
+
+static char *column_titles[ZMAP_NUM_COLS] = {"Window", "Status", "Last Request"} ;
+
+
+
+GtkWidget *zmapMainMakeManage(ZMapAppContext app_context)
+{
+  GtkWidget *frame ;
+  GtkWidget *vbox, *scrwin, *clist, *hbox, *load_button, *kill_button, *check_button ;
+
+  frame = gtk_frame_new("Manage Connections") ;
+  gtk_frame_set_label_align( GTK_FRAME( frame ), 0.0, 0.0 ) ;
+  gtk_container_border_width(GTK_CONTAINER(frame), 5) ;
+  
+  vbox = gtk_vbox_new(FALSE, 0) ;
+  gtk_container_border_width(GTK_CONTAINER(vbox), 5);
+  gtk_container_add(GTK_CONTAINER (frame), vbox);
+
+  scrwin = gtk_scrolled_window_new(NULL, NULL) ;
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwin),
+				 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC) ;
+  gtk_widget_set_usize(scrwin, -2, 150) ;		    /* -2  =>  leave value unchanged. */
+  gtk_box_pack_start(GTK_BOX(vbox), scrwin, FALSE, FALSE, 0) ;
+
+  app_context->clist_widg = clist = gtk_clist_new_with_titles(3, column_titles) ;
+  gtk_signal_connect(GTK_OBJECT(clist), "select_row",
+		     GTK_SIGNAL_FUNC(selectRow), (gpointer)app_context) ;
+  gtk_signal_connect(GTK_OBJECT(clist), "unselect_row",
+		     GTK_SIGNAL_FUNC(unselectRow), (gpointer)app_context) ;
+  gtk_container_add (GTK_CONTAINER (scrwin), clist);
+
+
+  hbox = gtk_hbox_new(FALSE, 0) ;
+  gtk_container_border_width(GTK_CONTAINER(hbox), 5);
+  gtk_container_add(GTK_CONTAINER(vbox), hbox);
+
+  load_button = gtk_button_new_with_label("Load Thread Data") ;
+  gtk_signal_connect(GTK_OBJECT(load_button), "clicked",
+		     GTK_SIGNAL_FUNC(loadThreadCB), (gpointer)app_context) ;
+  gtk_box_pack_start(GTK_BOX(hbox), load_button, FALSE, FALSE, 0) ;
+  GTK_WIDGET_SET_FLAGS(load_button, GTK_CAN_DEFAULT) ;
+  gtk_widget_grab_default(load_button) ;
+
+  kill_button = gtk_button_new_with_label("Kill Thread") ;
+  gtk_signal_connect(GTK_OBJECT(kill_button), "clicked",
+		     GTK_SIGNAL_FUNC(killThreadCB), (gpointer)app_context) ;
+  gtk_box_pack_start(GTK_BOX(hbox), kill_button, FALSE, FALSE, 0) ;
+  GTK_WIDGET_SET_FLAGS(kill_button, GTK_CAN_DEFAULT) ;
+  gtk_widget_grab_default(kill_button) ;
+
+  check_button = gtk_button_new_with_label("Check Connections") ;
+  gtk_signal_connect(GTK_OBJECT(check_button), "clicked",
+		     GTK_SIGNAL_FUNC(checkThreadCB), (gpointer)app_context) ;
+  gtk_box_pack_start(GTK_BOX(hbox), check_button, FALSE, FALSE, 0) ;
+  GTK_WIDGET_SET_FLAGS(check_button, GTK_CAN_DEFAULT) ;
+  gtk_widget_grab_default(check_button) ;
+
+  return frame ;
+}
+
+
+
+
+static void loadThreadCB(GtkWidget *widget, gpointer cb_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+  int row ;
+
+  if (app_context->selected_zmap)
+    {
+      zMapManagerLoadData(app_context->selected_zmap) ;
+    }
+
+
+  return ;
+}
+
+static void killThreadCB(GtkWidget *widget, gpointer cb_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+  int row ;
+
+  if (app_context->selected_zmap)
+    {
+      row = gtk_clist_find_row_from_data(GTK_CLIST(app_context->clist_widg),
+					 app_context->selected_zmap) ;
+
+      ZMAP_DEBUG(("GUI: kill thread for row %d with connection pointer: %x\n",
+		      row, app_context->selected_zmap)) ;
+
+      zMapManagerKill(app_context->zmap_manager, app_context->selected_zmap) ;
+
+
+#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+      /* this all done by a callback now as we need to do this from several places and
+       * at the right time. */
+
+      app_context->selected_zmap = NULL ;
+
+      /* The remove call actually sets my data which I attached to the row to NULL
+       * which is v. naughty, so I reset my data in the widget to NULL to avoid it being
+       * messed with. */
+      gtk_clist_set_row_data(GTK_CLIST(app_context->clist_widg), row, NULL) ;
+      gtk_clist_remove(GTK_CLIST(app_context->clist_widg), row) ;
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+
+    }
+
+
+  return ;
+}
+
+/* this function was for testing really and needs to go or be updated..... */
+static void checkThreadCB(GtkWidget *widget, gpointer cb_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+
+
+#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+
+  /* REPLACE WITH A CALL TO DISPLAY STATE OF CONNECTIONS.....was for testing only anyway. */
+  ZMapCheckConnections(app_context->connections,
+		       zmapSignalData, app_context,
+		       zmapCleanUpConnection, app_context) ;
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+
+
+  return ;
+}
+
+static void selectRow(GtkCList *clist, gint row, gint column, GdkEventButton *event,
+		      gpointer cb_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+
+  app_context->selected_zmap = (ZMapWinConn)gtk_clist_get_row_data(clist, row) ;
+
+
+#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+  ZMAP_DEBUG(("GUI: select row %d with connection pointer: %x\n", row, connection)) ;
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+
+
+  return ;
+}
+
+static void unselectRow(GtkCList *clist, gint row, gint column, GdkEventButton *event,
+			gpointer cb_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+
+  app_context->selected_zmap = NULL ;
+
+  ZMAP_DEBUG(("GUI: unselect row %d\n", row)) ;
+
+  return ;
+}
diff --git a/src/zmapApp/zmapAppmenubar.c b/src/zmapApp/zmapAppmenubar.c
new file mode 100755
index 0000000000000000000000000000000000000000..9a4ae9552122ff1687f49217f7a5e23bf2e916e5
--- /dev/null
+++ b/src/zmapApp/zmapAppmenubar.c
@@ -0,0 +1,159 @@
+/*  File: zmapappmenubar.c
+ *  Author: Ed Griffiths (edgrif@sanger.ac.uk)
+ *  Copyright (c) Sanger Institute, 2003
+ *-------------------------------------------------------------------
+ * ZMap is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * and was written by
+ *      Rob Clack (Sanger Institute, UK) rnc@sanger.ac.uk,
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk and
+ *	Simon Kelley (Sanger Institute, UK) srk@sanger.ac.uk
+ *
+ * Description: 
+ * Exported functions: See XXXXXXXXXXXXX.h
+ * HISTORY:
+ * Last edited: Nov 12 15:08 2003 (edgrif)
+ * Created: Thu Jul 24 14:36:59 2003 (edgrif)
+ * CVS info:   $Id: zmapAppmenubar.c,v 1.1 2003-11-13 14:58:39 edgrif Exp $
+ *-------------------------------------------------------------------
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <zmapApp_P.h>
+
+
+static void quitCB(gpointer cb_data, guint callback_action, GtkWidget *w) ;
+static void print_hello( gpointer data, guint callback_action, GtkWidget *w ) ;
+static void handle_option( gpointer data, guint callback_action, GtkWidget *w ) ;
+void DestroyNotifyFunc( gpointer data ) ;
+
+
+GtkItemFactory *item_factory;
+
+/* When we go to GTK 2 this global can disappear as the below table will allow us to
+ * specify callback data. */
+static ZMapAppContext app_context_G ;
+
+
+static GtkItemFactoryEntry menu_items[] = {
+ { "/_File",         NULL,         NULL, 0, "<Branch>" },
+ { "/File/_New",     "<control>N", print_hello, 2, NULL },
+ { "/File/_Open",    "<control>O", print_hello, 0, NULL },
+ { "/File/_Save",    "<control>S", print_hello, 0, NULL },
+ { "/File/Save _As", NULL,         NULL, 0, NULL },
+ { "/File/sep1",     NULL,         NULL, 0, "<Separator>" },
+ { "/File/Quit",     "<control>Q", quitCB, 0, NULL },
+ { "/_Edit",         NULL,         NULL, 0, "<Branch>" },
+ { "/Edit/Cu_t",     "<control>X", print_hello, 0, NULL },
+ { "/Edit/_Copy",    "<control>C", print_hello, 0, NULL },
+ { "/Edit/_Paste",    "<control>V", print_hello, 0, NULL },
+ { "/_Options",      NULL,         NULL, 0, "<Branch>" },
+ { "/Options/Option1",  NULL,      handle_option, 1, "<CheckItem>" },
+ { "/Options/Option2",  NULL,      handle_option, 2, "<ToggleItem>" },
+ { "/Options/Option3",  NULL,      handle_option, 3, "<CheckItem>" },
+ { "/Options/Option4",  NULL,      handle_option, 4, "<ToggleItem>" },
+ { "/_Help",         NULL,         NULL, 0, "<LastBranch>" },
+ { "/Help/One",   NULL,            NULL, 0, NULL },
+ { "/Help/Two",   NULL,            NULL, 0, "<Branch>" },
+ { "/Help/Two/A",   NULL,          NULL, 0, "<RadioItem>" },
+ { "/Help/Two/B",   NULL,          NULL, 0, "/Help/Two/A" },
+ { "/Help/Two/C",   NULL,          NULL, 0, "/Help/Two/A" },
+ { "/Help/Two/D",   NULL,          NULL, 0, "/Help/Two/A" },
+ { "/Help/Two/E",   NULL,          NULL, 0, "/Help/Two/A" },
+ { "/Help/Three",   NULL,          NULL, 0, NULL },
+};
+
+
+GtkWidget *zmapMainMakeMenuBar(ZMapAppContext app_context)
+{
+  GtkWidget *menubar ;
+  GtkAccelGroup *accel_group;
+  gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+  GtkWidget *widget;
+
+
+  /* global will go away with gtk 2 */
+  app_context_G = app_context ;
+
+
+  accel_group = gtk_accel_group_new ();
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group );
+
+  gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, (gpointer)app_context);
+
+  gtk_accel_group_attach(accel_group, GTK_OBJECT (app_context->app_widg));
+
+  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+  widget = (GtkWidget *) gtk_item_factory_from_widget(menubar);
+
+  /* What is this about ????????????????????? */
+  if ( widget == (GtkWidget *) item_factory )
+	  printf( "widget and item_factory are the same\n" );
+  else
+	  printf( "widget and item_factory are not the same\n" );
+
+
+
+  return menubar ;
+}
+
+static void quitCB(gpointer cb_data, guint callback_action, GtkWidget *w)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+
+  zmapExit(app_context) ;
+}
+
+static void print_hello( gpointer data, guint callback_action, GtkWidget *w )
+{
+
+#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+	GtkWidget *myWidget;
+	printf( "widget is %x data is %s\n", w, data );
+	g_message ("Hello, World!\n");
+
+	myWidget = gtk_item_factory_get_widget (item_factory, "/File/New");
+	printf( "File/New is %x\n", myWidget );
+
+	gtk_item_factory_delete_item( item_factory, "/Edit" );
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+
+}
+
+static void handle_option( gpointer data, guint callback_action, GtkWidget *w )
+{
+
+#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+	GtkCheckMenuItem *checkMenuItem = (GtkCheckMenuItem *) w;
+
+	printf( "widget is %x data is %s\n", w, data );
+	g_message ("Hello, World!\n");
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+
+}
+
+void DestroyNotifyFunc( gpointer data )
+{
+
+#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+	printf( "data is %x\n", data );	
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+
+}
+
diff --git a/src/zmapApp/zmapAppwindow.c b/src/zmapApp/zmapAppwindow.c
new file mode 100755
index 0000000000000000000000000000000000000000..6f0e87fa3df0fb9d608ebd9652edb3f35774b28d
--- /dev/null
+++ b/src/zmapApp/zmapAppwindow.c
@@ -0,0 +1,196 @@
+/*  File: zmapappmain.c
+ *  Author: Ed Griffiths (edgrif@sanger.ac.uk)
+ *  Copyright (c) Sanger Institute, 2003
+ *-------------------------------------------------------------------
+ * ZMap is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * and was written by
+ *      Rob Clack (Sanger Institute, UK) rnc@sanger.ac.uk,
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk and
+ *	Simon Kelley (Sanger Institute, UK) srk@sanger.ac.uk
+ *
+ * Description: 
+ * Exported functions: See XXXXXXXXXXXXX.h
+ * HISTORY:
+ * Last edited: Nov 12 15:06 2003 (edgrif)
+ * Created: Thu Jul 24 14:36:27 2003 (edgrif)
+ * CVS info:   $Id: zmapAppwindow.c,v 1.1 2003-11-13 14:58:39 edgrif Exp $
+ *-------------------------------------------------------------------
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <zmapApp_P.h>
+
+
+static void initGTK(int argc, char *argv[]) ;
+static ZMapAppContext createAppContext(void) ;
+
+static void quitCB(GtkWidget *widget, gpointer data) ;
+static gint idleCB(gpointer cb_data) ;
+static void removeZmapRow(void *app_data, void *zmap) ;
+
+
+/* Overall app. debugging output. */
+gboolean zmap_debug_G = TRUE ; 
+
+
+
+int zmapMainMakeAppWindow(int argc, char *argv[])
+{
+  ZMapAppContext app_context ;
+  GtkWidget *toplevel, *vbox, *menubar, *connect_frame, *manage_frame ;
+  GtkWidget *kill_button, *quit_button ;
+
+  initGTK(argc, argv) ;					    /* May exit if checks fail. */
+
+  app_context = createAppContext() ;
+
+  app_context->app_widg = toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL) ;
+  gtk_window_set_policy(GTK_WINDOW(toplevel), FALSE, TRUE, FALSE ) ;
+  gtk_window_set_title(GTK_WINDOW(toplevel), "ZMap - Son of FMap !") ;
+  gtk_container_border_width(GTK_CONTAINER(toplevel), 0) ;
+  gtk_signal_connect(GTK_OBJECT(toplevel), "destroy", 
+		     GTK_SIGNAL_FUNC(quitCB), (gpointer)app_context) ;
+
+  vbox = gtk_vbox_new(FALSE, 0) ;
+  gtk_container_add(GTK_CONTAINER(toplevel), vbox) ;
+
+  menubar = zmapMainMakeMenuBar(app_context) ;
+  gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
+
+  connect_frame = zmapMainMakeConnect(app_context) ;
+  gtk_box_pack_start(GTK_BOX(vbox), connect_frame, TRUE, TRUE, 0);
+
+  manage_frame = zmapMainMakeManage(app_context) ;
+  gtk_box_pack_start(GTK_BOX(vbox), manage_frame, TRUE, TRUE, 0);
+
+  quit_button = gtk_button_new_with_label("Quit") ;
+  gtk_signal_connect(GTK_OBJECT(quit_button), "clicked",
+		     GTK_SIGNAL_FUNC(quitCB), (gpointer)app_context) ;
+  gtk_box_pack_start(GTK_BOX(vbox), quit_button, FALSE, FALSE, 0) ;
+  GTK_WIDGET_SET_FLAGS(quit_button, GTK_CAN_DEFAULT) ;
+  gtk_widget_grab_default(quit_button) ;
+
+  gtk_widget_show_all(toplevel) ;
+
+  gtk_idle_add(idleCB, (gpointer)app_context) ;
+
+  gtk_main() ;
+
+
+  return(EXIT_SUCCESS) ;
+}
+
+
+void zmapExit(ZMapAppContext app_context)
+{
+  printf("\nGoodbye cruel world !\n" ) ;
+
+  gtk_exit(EXIT_SUCCESS) ;
+}
+
+
+
+/*
+ *  ------------------- Internal functions -------------------
+ */
+
+
+static void initGTK(int argc, char *argv[])
+{
+  gchar *err_msg ;
+
+  gtk_set_locale() ;
+
+  if ((err_msg = gtk_check_version(ZMAP_GTK_MAJOR, ZMAP_GTK_MINOR, ZMAP_GTK_MICRO)))
+    {
+      fprintf(stderr, "%s\n", err_msg) ;
+
+      gtk_exit(EXIT_FAILURE) ;
+    }
+
+  gtk_init(&argc, &argv) ;
+
+  return ;
+}
+
+
+static ZMapAppContext createAppContext(void)
+{
+  ZMapAppContext app_context ;
+
+  app_context = g_new(ZMapAppContextStruct, sizeof(ZMapAppContextStruct)) ;
+
+  app_context->app_widg
+    = app_context->machine_widg = app_context->port_widg = app_context->sequence_widg
+    = app_context->clist_widg = NULL ;
+
+  app_context->zmap_manager = zMapManagerInit(removeZmapRow, (void *)app_context) ;
+  app_context->selected_zmap = NULL ;
+
+  return app_context ;
+}
+
+
+static void quitCB(GtkWidget *widget, gpointer cb_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+
+  zmapExit(app_context) ;				    /* Does not return. */
+
+  return ;
+}
+
+
+/* This is really the guts of the code to check what our connection threads are up
+ * to. Every time the GUI thread has stopped doing things this routine gets called
+ * so then we check all connections for action..... */
+static gint idleCB(gpointer cb_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)cb_data ;
+
+  zMapManagerCheckConnections(app_context->zmap_manager) ;
+
+  return 1 ;						    /* > 0 tells gtk to keep calling idleCB */
+}
+
+
+
+static void removeZmapRow(void *app_data, void *zmap_data)
+{
+  ZMapAppContext app_context = (ZMapAppContext)app_data ;
+  ZMapWinConn zmap = (ZMapWinConn)zmap_data ;
+  int row ;
+
+
+  row = gtk_clist_find_row_from_data(GTK_CLIST(app_context->clist_widg), zmap) ;
+
+  if (app_context->selected_zmap == zmap)
+    app_context->selected_zmap = NULL ;
+
+  /* The remove call actually sets my data which I attached to the row to NULL
+   * which is v. naughty, so I reset my data in the widget to NULL to avoid it being
+   * messed with. */
+  gtk_clist_set_row_data(GTK_CLIST(app_context->clist_widg), row, NULL) ;
+  gtk_clist_remove(GTK_CLIST(app_context->clist_widg), row) ;
+
+
+  return ;
+}
+
+