diff -ur gbuffy-0.2.2.orig/config.c gbuffy-0.2.2/config.c
--- gbuffy-0.2.2.orig/config.c	Mon Jan 11 03:12:05 1999
+++ gbuffy-0.2.2/config.c	Wed May 10 14:55:38 2000
@@ -199,6 +199,8 @@
 
   top = PLInsertDictionaryEntry (top, mailboxes, boxes);
   top = pl_set_dict_entry (top, "vertical", (Vertical ? "true" : "false"));
+  snprintf (buf, sizeof (buf), "%d", NumRowsCols);
+  top = pl_set_dict_entry (top, "numrowscols", buf);
   snprintf (buf, sizeof (buf), "%d", PollTime);
   top = pl_set_dict_entry (top, "polltime", buf);
   top = pl_set_dict_entry (top, "maildir", NONULL(Maildir));
@@ -340,6 +342,14 @@
       s = PLGetString (tmp);
       if (!strcmp (s, "true"))
 	Vertical = TRUE;
+    }
+    tmp = pl_get_dict_entry (top, "numrowscols");
+    if (tmp)
+    {
+      s = PLGetString (tmp);
+      sscanf (s, "%d", &NumRowsCols);
+      if ((NumRowsCols < 0) || (NumRowsCols > MAX_ROWS_COLS))
+        NumRowsCols = 1;
     }
     tmp = pl_get_dict_entry (top, "polltime");
     if (tmp)
diff -ur gbuffy-0.2.2.orig/gbconfig.c gbuffy-0.2.2/gbconfig.c
--- gbuffy-0.2.2.orig/gbconfig.c	Mon Aug  2 00:41:38 1999
+++ gbuffy-0.2.2/gbconfig.c	Wed May 10 14:55:38 2000
@@ -24,6 +24,7 @@
 static GtkWidget *PathEntry;
 static GtkWidget *CommandEntry;
 static GtkWidget *PollTimeEntry;
+static GtkWidget *NumRowsColsEntry;
 static GtkWidget *MaildirEntry;
 static GtkWidget *MailboxCList;
 static GtkWidget *TypeOptionMenu;
@@ -314,6 +315,9 @@
     box = box->next;
   }
   safe_free ((void *)&Maildir);
+  NumRowsCols = atoi (gtk_entry_get_text (GTK_ENTRY (NumRowsColsEntry)));
+  if ((NumRowsCols < 0) || (NumRowsCols > MAX_ROWS_COLS))
+    NumRowsCols = 1;
   Maildir = safe_strdup (gtk_entry_get_text (GTK_ENTRY (MaildirEntry)));
   PollTime = atoi (gtk_entry_get_text (GTK_ENTRY (PollTimeEntry)));
 
@@ -412,6 +416,9 @@
     box = box->next;
   }
   safe_free ((void *)&Maildir);
+  NumRowsCols = atoi (gtk_entry_get_text (GTK_ENTRY (NumRowsColsEntry)));
+  if ((NumRowsCols < 0) || (NumRowsCols > MAX_ROWS_COLS))
+    NumRowsCols = 1;
   Maildir = safe_strdup (gtk_entry_get_text (GTK_ENTRY (MaildirEntry)));
   PollTime = atoi (gtk_entry_get_text (GTK_ENTRY (PollTimeEntry)));
 
@@ -625,24 +632,35 @@
 	GTK_SIGNAL_FUNC(toggle_var_callback), &Vertical);
     gtk_widget_show (button);
 
-    label = gtk_label_new ("Mail Directory:");
+    label = gtk_label_new ("Number of Rows/Columns:");
     gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, 
 	GTK_FILL, GTK_EXPAND, 0, 5);
     gtk_widget_show (label);
+    NumRowsColsEntry = gtk_entry_new ();
+    snprintf (buf, sizeof (buf), "%d", NumRowsCols);
+    gtk_entry_set_text (GTK_ENTRY (NumRowsColsEntry), buf);
+    gtk_table_attach (GTK_TABLE (table), NumRowsColsEntry, 3, 4, 0, 1, 
+	GTK_EXPAND | GTK_FILL, GTK_EXPAND, 0, 5);
+    gtk_widget_show (NumRowsColsEntry);
+
+    label = gtk_label_new ("Mail Directory:");
+    gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2, 
+	GTK_FILL, GTK_EXPAND, 0, 5);
+    gtk_widget_show (label);
     MaildirEntry = gtk_entry_new ();
     gtk_entry_set_text (GTK_ENTRY (MaildirEntry), NONULL (Maildir));
-    gtk_table_attach (GTK_TABLE (table), MaildirEntry, 3, 4, 0, 1, 
+    gtk_table_attach (GTK_TABLE (table), MaildirEntry, 3, 4, 1, 2, 
 	GTK_EXPAND | GTK_FILL, GTK_EXPAND, 0, 5);
     gtk_widget_show (MaildirEntry);
 
     label = gtk_label_new ("Poll Time:");
-    gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2, 
+    gtk_table_attach (GTK_TABLE (table), label, 1, 2, 2, 3, 
 	GTK_FILL, GTK_EXPAND, 0, 5);
     gtk_widget_show (label);
     PollTimeEntry = gtk_entry_new ();
     snprintf (buf, sizeof (buf), "%d", PollTime);
     gtk_entry_set_text (GTK_ENTRY (PollTimeEntry), buf);
-    gtk_table_attach (GTK_TABLE (table), PollTimeEntry, 3, 4, 1, 2, 
+    gtk_table_attach (GTK_TABLE (table), PollTimeEntry, 3, 4, 2, 3, 
 	GTK_EXPAND | GTK_FILL, GTK_EXPAND, 0, 5);
     gtk_widget_show (PollTimeEntry);
     gtk_widget_show (table);
diff -ur gbuffy-0.2.2.orig/gbuffy.c gbuffy-0.2.2/gbuffy.c
--- gbuffy-0.2.2.orig/gbuffy.c	Mon Aug  2 01:17:53 1999
+++ gbuffy-0.2.2/gbuffy.c	Wed May 10 23:20:01 2000
@@ -16,6 +16,7 @@
 char *Spooldir = "/var/spool/mail";
 char *DefaultNewserver;
 int Vertical = FALSE;
+int NumRowsCols = 1;	/* Default is old behavior */
 int PollTime = 10;
 int PollId = 0;
 int DontExit = FALSE;
@@ -485,9 +486,16 @@
 {
   static GtkWidget *window = NULL;
   GtkWidget *box;
+  //GtkWidget *boxlist[MAX_ROWS_COLS];
+  GtkWidget **boxlist;
   GtkWidget *button;
   BOX_INFO *mbox;
   char buf[STRING];
+  int i;
+
+  /* sanity check */
+  if ((NumRowsCols > MAX_ROWS_COLS) || (NumRowsCols < 1))
+    NumRowsCols = 1;
 
   if (window != NULL)
   {
@@ -505,14 +513,32 @@
   gtk_signal_connect (GTK_OBJECT (window), "destroy",
       GTK_SIGNAL_FUNC (gbuffy_exit), NULL);
 
+  boxlist = (GtkWidget **) malloc (sizeof(GtkWidget *) * NumRowsCols);
+  /* FIXME - Should error out if malloc fails. Sigh. */
+
   if (Vertical)
-    box = gtk_vbox_new (TRUE, 0);
-  else
+  {
     box = gtk_hbox_new (TRUE, 0);
-
-  gtk_container_add (GTK_CONTAINER (window), box);
+    gtk_container_add (GTK_CONTAINER (window), box);
+    for (i = 0 ; i < NumRowsCols ; i++)
+    {
+       boxlist[i] = gtk_vbox_new (TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (box), boxlist[i], TRUE, TRUE, TRUE);
+    }
+  }
+  else
+  {
+    box = gtk_vbox_new (TRUE, 0);
+    gtk_container_add (GTK_CONTAINER (window), box);
+    for (i = 0 ; i < NumRowsCols ; i++)
+    {
+       boxlist[i] = gtk_hbox_new (TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (box), boxlist[i], TRUE, TRUE, TRUE);
+    }
+  }
 
   mbox = MailboxInfo;
+  i = 0;
   while (mbox != NULL)
   {
     /* (*(MailboxClass[mbox->type].count))(mbox, 1, NULL); */
@@ -522,7 +548,8 @@
     if (mbox->new_messages)
       gtk_widget_set_state (mbox->button, GTK_STATE_SELECTED);
 
-    gtk_box_pack_start (GTK_BOX (box), mbox->button, TRUE, TRUE, TRUE);
+    gtk_box_pack_start (GTK_BOX (boxlist[i % NumRowsCols]), 
+		    mbox->button, TRUE, TRUE, TRUE);
     gtk_widget_show (mbox->button);
     gtk_signal_connect (GTK_OBJECT (mbox->button), "button_press_event",
 	GTK_SIGNAL_FUNC (gbuffy_button_callback), mbox);
@@ -531,14 +558,20 @@
     gtk_signal_connect_after (GTK_OBJECT (mbox->button), "leave_notify_event",
 	GTK_SIGNAL_FUNC (gbuffy_leave_box), mbox);
     mbox = mbox->next;
+    i++;
   }
 
+  for (i = 0 ; i < NumRowsCols ; i++)
+    gtk_widget_show (boxlist[i]);
+
   gtk_widget_show (box);
 
   gtk_widget_show (window);
   gbuffy_poll_boxes (NULL);
 
   PollId = gtk_timeout_add (PollTime * 1000, gbuffy_poll_boxes, NULL);
+
+  free(boxlist);
 }
 
 int main (int argc, char *argv[])
diff -ur gbuffy-0.2.2.orig/gbuffy.h gbuffy-0.2.2/gbuffy.h
--- gbuffy-0.2.2.orig/gbuffy.h	Mon Jan 11 14:12:07 1999
+++ gbuffy-0.2.2/gbuffy.h	Wed May 10 14:55:38 2000
@@ -19,6 +19,8 @@
 #define LONG_STRING    1024
 #define HUGE_STRING    5120
 
+#define MAX_ROWS_COLS	256
+
 enum BOXTYPE {UNKNOWN = -1, GB_MBOX = 0, GB_MMDF, GB_MAILDIR, GB_MH, GB_IMAP, 
   GB_NNTP, GB_EXTERNAL, GB_MAX};
 
@@ -76,6 +78,8 @@
 
 /* Global Variables */
 extern int Vertical;
+extern int NumRowsCols;		/* Denotes the number of rows or columns to 
+				   create. */
 extern char *Username;
 extern char *DefaultNewserver;
 extern char *Homedir;
--- gbuffy-0.2.2/count.c	Mon Aug  2 00:24:53 1999
+++ gbuffy-0.2.2-new/count.c	Tue Nov 27 07:18:23 2001
@@ -16,7 +16,7 @@
   static size_t buflen = STRING;
   char from[STRING] = "";
   char subject[STRING] = "";
-  char xface[STRING] = "";
+  char xface[LONG_STRING] = "";
   int status = FALSE;
   int is_new = FALSE;
 
@@ -51,7 +51,11 @@
 	while (*s && ISSPACE (*s)) s++;
 	strfcpy (xface, s, sizeof (xface));
 	if (strlen (s) > sizeof (xface))
+	{
 	  g_print ("-E- xface header is larger than buffer\n");
+	  fprintf (stderr, "-E- string '%s' is the problem\n", s);
+	  fprintf (stderr, "-E- strlen xface %d strlen s %d\n", strlen(xface), strlen(s));
+	}
       }
     }
   }
