diff -u --recursive --new-file spruce-0.5.9/globals.c spruce-0.5.9-fetchmail/globals.c
--- spruce-0.5.9/globals.c	Mon Nov 15 17:52:51 1999
+++ spruce-0.5.9-fetchmail/globals.c	Sun Nov 28 17:37:40 1999
@@ -50,10 +50,11 @@
 gchar *signaturefile;                    /* user's signature file */
 
 /* Accounts */
+
 gint NumAccounts;                        /* number of pop3 accounts we have */
 accounts_t AccountsList[MAX_ACCOUNTS];
 Server SmtpServer;                       /* smtp server */
-
+gint external_fetchmail;                 /* use an external fetchmail program */
 gint use_rand_sig;                       /* attach a random signature? */
 gint save_outgoing;                      /* save outgoing messages? */
 gchar *signaturefile;                    /* user's signature file */
@@ -139,6 +140,7 @@
    save_outgoing = TRUE;
    
    SmtpServer.port = 25;   
+   external_fetchmail = FALSE;
 
    spruceconf = get_config_path();
 
diff -u --recursive --new-file spruce-0.5.9/main.c spruce-0.5.9-fetchmail/main.c
--- spruce-0.5.9/main.c	Mon Nov 15 17:52:51 1999
+++ spruce-0.5.9-fetchmail/main.c	Sun Nov 28 17:45:49 1999
@@ -55,6 +55,7 @@
 extern gint NumAccounts;                        /* number of pop3 accounts we have */
 extern accounts_t AccountsList[MAX_ACCOUNTS];
 extern Server SmtpServer;                       /* smtp server */
+extern gint external_fetchmail;		        /* use an external fetchmail program */
 /* Appearance */
 extern gchar *mesg_body_font;
 extern gchar *unread_mesg_header_font;
@@ -275,6 +276,8 @@
 void mail_check (gboolean show_dialog)
 {
    gint i;
+   gint parent;
+   gint status;
    gint err;
    gchar reason[50];
    gchar buffer[256];
@@ -283,51 +286,62 @@
    {
       fetching_mail = TRUE;
 
-      if (show_dialog)
-      {
-         frmStatus = create_frmStatus(NULL);
-         gtk_widget_show(frmStatus);
+      if (external_fetchmail) {
+          parent = fork ();
+	  if (! parent) {
+	  	if (execlp ("fetchmail", "fetchmail", NULL) < 0)
+	            perror ("execl");
+          }
+	  /* FIXME -- Actually do something with this status! */
+	  wait (&status);
       }
-
-      for (i = 0; i < NumAccounts; i++)
-      {
-         if (AccountsList[i].type == TYPE_POP3)
-         {
-	         g_snprintf(buffer, 255, "%s", AccountsList[i].server.hostname);
-		      if (show_dialog)
-            {
-               gtk_window_set_title (GTK_WINDOW (frmStatus), buffer);
-            }
-	         fprintf(stdout, "Retrieving mail from: %s:%d...",
-	                 AccountsList[i].server.hostname,
-	                 AccountsList[i].server.port);
-	         fflush(stdout);
-	         err = fetchmail(&AccountsList[i].server, AccountsList[i].login, 
-	                         AccountsList[i].passwd, 
-	                         get_mailbox(AccountsList[i].mailbox),
-	                         AccountsList[i].delemail, show_dialog);
-
-            update_display();
-
-	         if(!err)
-	         {
-	            pop3error(reason, 49);
-	            fprintf(stderr, "failed.\nSpruce%s\n", reason);
-	            fflush(stdout);
-	         }
-	         else
-	         {
-	            fprintf(stdout, "done.\n");
-	            fflush(stdout);
-	         }
-         }
-      }
-
-      if (show_dialog)
-         gtk_widget_destroy(frmStatus);
-
-      fetching_mail = FALSE;
-      refresh_mail_list(STAY);
+      else {
+          if (show_dialog)
+          {
+             frmStatus = create_frmStatus(NULL);
+             gtk_widget_show(frmStatus);
+          }
+
+          for (i = 0; i < NumAccounts; i++)
+          {
+             if (AccountsList[i].type == TYPE_POP3)
+             {
+	             g_snprintf(buffer, 255, "%s", AccountsList[i].server.hostname);
+		          if (show_dialog)
+                {
+                   gtk_window_set_title (GTK_WINDOW (frmStatus), buffer);
+                }
+	             fprintf(stdout, "Retrieving mail from: %s:%d...",
+	                     AccountsList[i].server.hostname,
+	                      AccountsList[i].server.port);
+	             fflush(stdout);
+	             err = fetchmail(&AccountsList[i].server, AccountsList[i].login, 
+	                             AccountsList[i].passwd, 
+	                             get_mailbox(AccountsList[i].mailbox),
+	                             AccountsList[i].delemail, show_dialog);
+
+                update_display();
+
+	             if(!err)
+	             {
+	                pop3error(reason, 49);
+	                fprintf(stderr, "failed.\nSpruce%s\n", reason);
+	                fflush(stdout);
+	             }
+	             else
+	             {
+	                fprintf(stdout, "done.\n");
+	                fflush(stdout);
+	             }
+             }
+          }
+
+          if (show_dialog)
+             gtk_widget_destroy(frmStatus);
+
+       }
+          fetching_mail = FALSE;
+          refresh_mail_list(STAY);
    }
 }
 
diff -u --recursive --new-file spruce-0.5.9/options.c spruce-0.5.9-fetchmail/options.c
--- spruce-0.5.9/options.c	Mon Nov 15 17:52:51 1999
+++ spruce-0.5.9-fetchmail/options.c	Sun Dec  5 11:45:10 1999
@@ -40,6 +40,7 @@
 extern gint NumAccounts;
 extern accounts_t AccountsList[MAX_ACCOUNTS];
 extern Server SmtpServer;
+extern gint external_fetchmail;
 
 /* Appearance */
 extern gchar *mesg_body_font;
@@ -69,8 +70,24 @@
 static GtkWidget *frmFontSel;
 static GtkWidget *txtFont;               /* pointer to the current font textbox */
 
+static GtkWidget *scrolledwindow1;
+static GtkWidget *cmdOptionsEdit;
+static GtkWidget *cmdOptionsRefresh;
+
+void on_frmOptions_button_release (void)
+{
+	external_fetchmail = ! external_fetchmail;
+	gtk_widget_set_sensitive (scrolledwindow1, ! external_fetchmail);
+	gtk_widget_show (scrolledwindow1);
+	gtk_widget_set_sensitive (cmdOptionsEdit, ! external_fetchmail);
+	gtk_widget_show_now (cmdOptionsEdit);
+	gtk_widget_set_sensitive (cmdOptionsRefresh, ! external_fetchmail);
+	gtk_widget_show_now (cmdOptionsRefresh);
+}
+
 GtkWidget* create_frmOptions ()
 {
+  GtkWidget *chkExtFetch;
   GtkWidget *frmOptions;
   GtkWidget *fixed;
   GtkWidget *hseparator;
@@ -102,13 +119,10 @@
   GtkWidget *lblSMTPport;
   GtkWidget *frameIncoming;
   GtkWidget *fixedIncoming;
-  GtkWidget *scrolledwindow1;
   GtkWidget *clistPop3Servers;
   GtkWidget *lblServer;
   GtkWidget *lblPort;
   GtkWidget *lblMailbox;
-  GtkWidget *cmdOptionsEdit;
-  GtkWidget *cmdOptionsRefresh;
   GtkWidget *fixedAppearance;
   GtkWidget *frameFonts;
   GtkWidget *fixedFonts;
@@ -441,13 +455,24 @@
   gtk_widget_show (fixedIncoming);
   gtk_container_add (GTK_CONTAINER (frameIncoming), fixedIncoming);
 
+  chkExtFetch = gtk_check_button_new_with_label ("Use External Fetchmail Program");
+  gtk_widget_set_name (chkExtFetch, "chkExtFetch");
+  gtk_object_set_data (GTK_OBJECT (frmOptions), "chkExtFetch", chkExtFetch);
+  gtk_signal_connect (GTK_OBJECT (chkExtFetch), "button-release-event", GTK_SIGNAL_FUNC (on_frmOptions_button_release), NULL);
+  gtk_widget_show (chkExtFetch);
+  gtk_fixed_put (GTK_FIXED (fixedIncoming), chkExtFetch, 6, 6);
+  gtk_widget_set_uposition (chkExtFetch, 6, 6);
+  gtk_widget_set_usize (chkExtFetch, 370, 24);
+  gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (chkExtFetch), external_fetchmail);
+  
   scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
   gtk_widget_set_name (scrolledwindow1, "scrolledwindow1");
   gtk_object_set_data (GTK_OBJECT (frmOptions), "scrolledwindow1", scrolledwindow1);
+  gtk_widget_set_sensitive (scrolledwindow1, ! external_fetchmail);
   gtk_widget_show (scrolledwindow1);
-  gtk_fixed_put (GTK_FIXED (fixedIncoming), scrolledwindow1, 6, 6);
-  gtk_widget_set_uposition (scrolledwindow1, 6, 6);
-  gtk_widget_set_usize (scrolledwindow1, 370, 166);
+  gtk_fixed_put (GTK_FIXED (fixedIncoming), scrolledwindow1, 6, 36);
+  gtk_widget_set_uposition (scrolledwindow1, 6, 36);
+  gtk_widget_set_usize (scrolledwindow1, 370, 136);
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
   clistPop3Servers = gtk_clist_new (3);
@@ -481,9 +506,10 @@
   cmdOptionsEdit = gtk_button_new_with_label (_("Edit"));
   gtk_widget_set_name (cmdOptionsEdit, "cmdOptionsEdit");
   gtk_object_set_data (GTK_OBJECT (frmOptions), "cmdOptionsEdit", cmdOptionsEdit);
+  gtk_widget_set_sensitive (cmdOptionsEdit, ! external_fetchmail);
   gtk_widget_show (cmdOptionsEdit);
-  gtk_fixed_put (GTK_FIXED (fixedIncoming), cmdOptionsEdit, 384, 24);
-  gtk_widget_set_uposition (cmdOptionsEdit, 384, 24);
+  gtk_fixed_put (GTK_FIXED (fixedIncoming), cmdOptionsEdit, 384, 36);
+  gtk_widget_set_uposition (cmdOptionsEdit, 384, 36);
   gtk_widget_set_usize (cmdOptionsEdit, 80, 32);
   gtk_signal_connect_object (GTK_OBJECT (cmdOptionsEdit), "clicked",
                              GTK_SIGNAL_FUNC (on_cmdOptionsEdit_clicked),
@@ -492,9 +518,10 @@
   cmdOptionsRefresh = gtk_button_new_with_label (_("Refresh"));
   gtk_widget_set_name (cmdOptionsRefresh, "cmdOptionsRefresh");
   gtk_object_set_data (GTK_OBJECT (frmOptions), "cmdOptionsRefresh", cmdOptionsRefresh);
+  gtk_widget_set_sensitive (cmdOptionsRefresh, ! external_fetchmail);
   gtk_widget_show (cmdOptionsRefresh);
-  gtk_fixed_put (GTK_FIXED (fixedIncoming), cmdOptionsRefresh, 384, 64);
-  gtk_widget_set_uposition (cmdOptionsRefresh, 384, 64);
+  gtk_fixed_put (GTK_FIXED (fixedIncoming), cmdOptionsRefresh, 384, 78);
+  gtk_widget_set_uposition (cmdOptionsRefresh, 384, 78);
   gtk_widget_set_usize (cmdOptionsRefresh, 80, 32);
   gtk_signal_connect_object (GTK_OBJECT (cmdOptionsRefresh), "clicked",
                              GTK_SIGNAL_FUNC (on_cmdOptionsRefresh_clicked),
@@ -935,6 +962,7 @@
 
 void on_cmdOptionsOK_clicked (GtkButton *button, gpointer user_data)
 {
+   GtkWidget *chkExtFetch    = get_widget(frmOptions, "chkExtFetch");
    GtkWidget *spinMinutes    = get_widget(frmOptions, "spinMinutes");
    GtkWidget *radGpg         = get_widget(frmOptions, "radGpg");
    GtkWidget *chkPgpSign     = get_widget(frmOptions, "chkPgpSign");
@@ -950,6 +978,7 @@
    GtkWidget *chkEmptyOnExit = get_widget(frmOptions, "chkEmptyOnExit");
    GtkWidget *chkSaveSizes   = get_widget(frmOptions, "chkSaveSizes");
 
+   external_fetchmail = GTK_TOGGLE_BUTTON (chkExtFetch)->active;
    cm_delay = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinMinutes));
    use_gnupg = GTK_TOGGLE_BUTTON (radGpg)->active;
    pgp_sign = GTK_TOGGLE_BUTTON (chkPgpSign)->active;
@@ -987,6 +1016,7 @@
 
 void on_cmdOptionsApply_clicked (GtkButton *button, gpointer user_data)
 {
+   GtkWidget *chkExtFetch    = get_widget(frmOptions, "chkExtFetch");
    GtkWidget *spinMinutes    = get_widget(frmOptions, "spinMinutes");
    GtkWidget *radGpg         = get_widget(frmOptions, "radGpg");
    GtkWidget *chkPgpSign     = get_widget(frmOptions, "chkPgpSign");
@@ -1004,6 +1034,7 @@
    GtkWidget *chkEmptyOnExit = get_widget(frmOptions, "chkEmptyOnExit");
    GtkWidget *chkSaveSize    = get_widget(frmOptions, "chkSaveSizes");
 
+   external_fetchmail = GTK_TOGGLE_BUTTON (chkExtFetch)->active;
    cm_delay = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinMinutes));
    use_gnupg = GTK_TOGGLE_BUTTON (radGpg)->active;
    pgp_sign = GTK_TOGGLE_BUTTON (chkPgpSign)->active;
diff -u --recursive --new-file spruce-0.5.9/options.h spruce-0.5.9-fetchmail/options.h
--- spruce-0.5.9/options.h	Mon Nov 15 17:52:51 1999
+++ spruce-0.5.9-fetchmail/options.h	Sun Dec  5 02:28:34 1999
@@ -40,6 +40,8 @@
 #include "accounts.h"
 #include "accounts_t.h"
 
+#include "main.h"
+
 GtkWidget* create_frmOptions (void);
 GtkWidget* create_frmBrowseSigFile (void);
 GtkWidget* create_frmFontSel (void);
diff -u --recursive --new-file spruce-0.5.9/rc.c spruce-0.5.9-fetchmail/rc.c
--- spruce-0.5.9/rc.c	Mon Nov 15 17:52:51 1999
+++ spruce-0.5.9-fetchmail/rc.c	Sun Nov 28 17:39:58 1999
@@ -32,6 +32,7 @@
 extern gint NumAccounts;
 extern accounts_t AccountsList[MAX_ACCOUNTS];
 extern Server SmtpServer;
+extern gint external_fetchmail;
 /* Appearance */
 extern gchar *mesg_body_font;
 extern gchar *unread_mesg_header_font;
@@ -177,6 +178,11 @@
    }
    fprintf(fp, "\n");
 
+   fprintf (fp, "# Use external fetchmail program\n");
+   fprintf (fp, "# 0 = no, 1 = yes\n");
+   fprintf (fp, "external_fetchmail %d\n", external_fetchmail);
+   fprintf (fp, "\n");
+
    fprintf(fp, "%c List your pop3 servers here in the following format:\n", comment);
    fprintf(fp, "%c pop3-server	hostname:port:mailbox:login:passwd:del\n", comment);
    fprintf(fp, "%c\n", comment);
@@ -366,6 +372,12 @@
             signaturefile = g_strdup(buffer);
             continue;
          }
+	 if (!strncmp("external_fetchmail", buffer, strlen("external_fetchmail"))) {
+	    strcut(buffer, 0, strlen("external_fetchmail"));
+	    trim_whtspc(buffer);
+	    external_fetchmail = atoi(buffer);
+	    continue;
+	 }
          if (!strncmp("cm-delay", buffer, strlen("cm-delay")))
          {
             strcut(buffer, 0, strlen("cm-delay"));
