diff -pru dillo-0.6.5/src/browser.h dillo-0.6.5-hacked/src/browser.h
--- dillo-0.6.5/src/browser.h	Wed Mar 27 10:26:06 2002
+++ dillo-0.6.5-hacked/src/browser.h	Sun Jun  2 10:27:36 2002
@@ -118,6 +118,12 @@ struct _BrowserWindow
 
    /* The tag for the idle function that sets button sensitivity. */
    gint sens_idle_tag;
+
+   /* Scaling */
+   guint scale_factor;
+   guint scale_timeout;
+   GtkWidget *scale_spin_button;
+   GtkAdjustment *scale_adjustment;
 };
 
 
diff -pru dillo-0.6.5/src/dw_page.c dillo-0.6.5-hacked/src/dw_page.c
--- dillo-0.6.5/src/dw_page.c	Sat Apr  6 01:18:17 2002
+++ dillo-0.6.5-hacked/src/dw_page.c	Tue Jun  4 23:55:14 2002
@@ -25,6 +25,7 @@
 #include "dw_page.h"
 #include "dw_marshal.h"
 #include "dw_gtk_viewport.h"
+#include "dw_image.h"
 
 #include "prefs.h"
 
@@ -189,6 +190,9 @@ static void Dw_page_init (DwPage *page)
    page->avail_width = 100;
    page->avail_ascent = 100;
    page->avail_descent = 0;
+
+   /* Scaling */
+   page->scale_factor = 100;
 }
 
 /*
@@ -945,7 +949,17 @@ static void Dw_page_rewrap(DwPage *page)
       word = &page->words[word_index];
 
       if (word->content_type == DW_PAGE_CONTENT_WIDGET)
+	  {
          Dw_page_calc_widget_size (page, word->content.widget, &word->size);
+		 
+		 /* Scaling */
+		 if(DW_IS_IMAGE(word->content.widget))
+		 {
+			 word->size.width = word->size.width * page->scale_factor / 100;
+			 word->size.ascent = word->size.ascent * page->scale_factor / 100;
+			 word->size.descent = word->size.descent * page->scale_factor / 100;
+		 }
+	  }
       Dw_page_word_wrap(page, word_index);
       if (word->content_type == DW_PAGE_CONTENT_WIDGET)
          word->content.widget->parent_ref = page->num_lines - 1;
@@ -1331,6 +1345,7 @@ void a_Dw_page_add_text(DwPage *page, ch
    Dw_page_word_wrap (page, page->num_words - 1);
 }
 
+
 /*
  * Add a widget (word type) to the page.
  */
@@ -1599,3 +1614,4 @@ static gint Dw_page_findtext(DwContainer
    /* compiler happiness */
    return 0;
 }
+
diff -pru dillo-0.6.5/src/dw_page.h dillo-0.6.5-hacked/src/dw_page.h
--- dillo-0.6.5/src/dw_page.h	Tue Mar 12 03:45:00 2002
+++ dillo-0.6.5-hacked/src/dw_page.h	Sun Jun  2 03:04:20 2002
@@ -109,6 +109,9 @@ struct _DwPage
 
    /* The link under the button */
    gint hover_link;
+   
+   /* Scaling */
+   guint scale_factor;
 };
 
 
diff -pru dillo-0.6.5/src/html.c dillo-0.6.5-hacked/src/html.c
--- dillo-0.6.5/src/html.c	Fri Apr 12 08:03:48 2002
+++ dillo-0.6.5-hacked/src/html.c	Tue Jun 11 19:20:45 2002
@@ -76,7 +76,6 @@ static void Html_callback(int Op, CacheC
 static DilloHtml *Html_new(BrowserWindow *bw, const DilloUrl *url);
 static void Html_tag_open_input(DilloHtml *html, char *tag, gint tagsize);
 
-
 /*
  * Local Data
  */
@@ -386,7 +385,14 @@ static void Html_set_top_font(DilloHtml 
    if ( name )
       font_attrs.name = name;
    if ( size )
-      font_attrs.size = size;
+   {
+      font_attrs.size = size * html->bw->scale_factor / 100;
+      if(font_attrs.size < FontSizes[0])
+	  {
+		  font_attrs.size = FontSizes[0];
+	  }
+   }
+      
    if ( BImask & 1 )
       font_attrs.bold   = (BI & 1) ? TRUE : FALSE;
    if ( BImask & 2 )
@@ -462,6 +468,7 @@ static void Html_add_indented_widget(Dil
 static void Html_add_indented(DilloHtml *html, int left, int right, int space)
 {
    DwWidget *page = a_Dw_page_new ();
+   (DW_PAGE(page))->scale_factor = html->bw->scale_factor;
    Html_add_indented_widget (html, page, left, right, space);
 }
 
@@ -511,11 +518,16 @@ static void Html_set_dwpage(DilloHtml *h
 
    widget = a_Dw_page_new ();
    page = DW_PAGE (widget);
+   page->scale_factor = html->bw->scale_factor;
    html->dw = html->stack[0].page = widget;
 
    /* Create a dummy font, attribute, and tag for the bottom of the stack. */
    font.name = prefs.vw_fontname; /* Helvetica */
-   font.size = Html_level_to_fontsize(FontSizesBase);
+   font.size = Html_level_to_fontsize(FontSizesBase) * html->bw->scale_factor / 100;
+   if(font.size < FontSizes[0])
+   {
+	   font.size = FontSizes[0];
+   }
    font.bold = FALSE;
    font.italic = FALSE;
 
@@ -1015,6 +1027,9 @@ static DwStyleLength Html_parse_length_o
    gchar *end;
 
    v = strtod (attr, &end);
+
+   /* Scaling */
+
    switch (*end) {
    case '%':
       end++;
@@ -1400,6 +1415,7 @@ static void Html_tag_open_table_cell(Dil
       }
 
       col_page = a_Dw_page_new ();
+      (DW_PAGE(col_page))->scale_factor = html->bw->scale_factor;
       if (new_style) {
          style = a_Dw_style_new (&style_attrs, html->bw->main_window->window);
          a_Dw_widget_set_style (col_page, style);
@@ -1675,6 +1691,7 @@ static void Html_tag_open_button(DilloHt
    a_Dw_style_box_set_val(&style_attrs.margin, 5);
    style = a_Dw_style_new (&style_attrs, html->bw->main_window->window);
    page = a_Dw_page_new ();
+   (DW_PAGE(page))->scale_factor = html->bw->scale_factor;
    a_Dw_widget_set_style (page, style);
    a_Dw_style_unref (style);
    a_Dw_container_add (DW_CONTAINER (button), page);
@@ -1874,7 +1891,6 @@ static void Html_tag_open_img(DilloHtml 
                        html->stack[html->stack_top].current_bg_color);
    Html_add_widget(html, DW_WIDGET(Image->dw), width_ptr, height_ptr,
                    &style_attrs);
-   Html_connect_signals(html, GTK_OBJECT(Image->dw));
 
    /* Image maps */
    if (Html_get_attr(html, tag, tagsize, "ismap")) {
@@ -3864,7 +3880,7 @@ static void Html_write(DilloHtml *html, 
    html->Start_Ofs += token_start;
 
    if ( html->bw ) {
-      sprintf(completestr,"%s%.1f Kb", PBAR_PSTR(prefs.panel_size == 1),
+      sprintf(completestr,"%s%.1f Kb", PBAR_PSTR(prefs.panel_size == 1 || prefs.panel_size == 4),
               (float)html->Start_Ofs/1024);
       a_Progressbar_update(html->bw->progress, completestr, 1);
    }
@@ -3900,5 +3916,4 @@ static void Html_close(DilloHtml *html, 
 
    g_free(html);
 }
-
 
diff -pru dillo-0.6.5/src/interface.c dillo-0.6.5-hacked/src/interface.c
--- dillo-0.6.5/src/interface.c	Fri Apr 12 05:53:49 2002
+++ dillo-0.6.5-hacked/src/interface.c	Tue Jun 11 19:21:48 2002
@@ -145,7 +145,7 @@ void a_Interface_close_client(BrowserWin
    a_Interface_remove_client(bw, ClientKey);
 
    /* --Progress bars stuff-- */
-   sprintf(numstr, "%s%d of %d", PBAR_ISTR(prefs.panel_size == 1),
+   sprintf(numstr, "%s%d of %d", PBAR_ISTR(prefs.panel_size == 1 || prefs.panel_size == 4),
            bw->NumImagesGot, bw->NumImages);
    a_Progressbar_update(bw->imgprogress, numstr,
                         (bw->NumImagesGot == bw->NumImages) ? 0 : 1 );
@@ -212,7 +212,7 @@ void a_Interface_add_client(BrowserWindo
       a_Interface_set_button_sens(bw);
 
       /* --Progress bar stuff-- */
-      sprintf(numstr, "%s%d of %d", PBAR_ISTR(prefs.panel_size == 1),
+      sprintf(numstr, "%s%d of %d", PBAR_ISTR(prefs.panel_size == 1 || prefs.panel_size == 4),
               bw->NumImagesGot, bw->NumImages);
       a_Progressbar_update(bw->imgprogress, numstr, 1);
    }
@@ -487,6 +487,42 @@ static GtkWidget *Interface_toolbar_new(
    return toolbar;
 }
 
+static gint scale_callback(gpointer data)
+{
+   BrowserWindow *bw;
+
+   bw = (BrowserWindow *) data;
+   bw->scale_timeout = 0;
+   a_Nav_reload(bw);
+   return FALSE;
+}
+
+/* Scaling */
+static void Interface_scale_value_changed(GtkAdjustment *adjustment, gpointer data)
+{
+   BrowserWindow *bw;
+
+   bw = (BrowserWindow *) data;
+   if(bw->scale_timeout)
+   {
+      gtk_timeout_remove(bw->scale_timeout);
+   }
+   bw->scale_factor = (guint) adjustment->value;
+   bw->scale_timeout = gtk_timeout_add(1500, scale_callback, bw);
+}
+
+/*
+ * Create the scale spin_button
+ */
+static GtkWidget *Interface_scale_spin_button_new(BrowserWindow *bw)
+{
+   bw->scale_adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(100.0, 5.0, 200.0, 5.0, 5.0, 5.0));
+   bw->scale_spin_button = gtk_spin_button_new(bw->scale_adjustment, 5.0, 0);
+   gtk_signal_connect(GTK_OBJECT(bw->scale_adjustment), "value-changed",
+		              GTK_SIGNAL_FUNC(Interface_scale_value_changed), bw);
+   return bw->scale_spin_button;
+}
+
 /*
  * Create the progressbar's box
  */
@@ -572,6 +608,9 @@ BrowserWindow *a_Interface_browser_windo
    BrowserWindow *bw;
    char buf[64];
 
+   /* Scaling */
+   GtkWidget *scale_spin_button;
+
    /* We use g_new0() to zero the memory */
    bw = g_new0(BrowserWindow, 1);
 
@@ -581,6 +620,9 @@ BrowserWindow *a_Interface_browser_windo
    /* initialize nav_stack struct in browser_window struct */
    a_Nav_init(bw);
 
+   /* Scaling */
+   bw->scale_factor = 100;
+
    bw->main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
    gtk_window_set_policy(GTK_WINDOW(bw->main_window), TRUE, TRUE, FALSE);
@@ -618,11 +660,15 @@ BrowserWindow *a_Interface_browser_windo
       locbox = Interface_locbar_new(bw);
       /* progress bars */
       progbox = Interface_progressbox_new(bw, 0);
+	  /* Scaling */
+	  scale_spin_button = Interface_scale_spin_button_new(bw);
 
       gtk_box_pack_start(GTK_BOX(hbox), toolbar, FALSE, FALSE, 0);
       gtk_widget_show(toolbar);
       gtk_box_pack_start(GTK_BOX(hbox), menubar, FALSE, FALSE, 0);
       gtk_widget_show(menubar);
+	  gtk_box_pack_start(GTK_BOX(hbox), scale_spin_button, FALSE, FALSE, 0);
+	  gtk_widget_show(scale_spin_button);
       gtk_box_pack_start(GTK_BOX(hbox), locbox, TRUE, TRUE, 0);
       gtk_widget_show(locbox);
       gtk_box_pack_start(GTK_BOX(hbox), progbox, FALSE, FALSE, 0);
@@ -638,6 +684,8 @@ BrowserWindow *a_Interface_browser_windo
       hbox = gtk_hbox_new(FALSE, 0);
       menubar = a_Menu_mainbar_new(bw, 0);
       locbox = Interface_locbar_new(bw);
+	  scale_spin_button = Interface_scale_spin_button_new(bw);
+
       gtk_box_pack_start(GTK_BOX(hbox), menubar, FALSE, FALSE, 0);
       gtk_widget_show(menubar);
       gtk_box_pack_start(GTK_BOX(hbox), locbox, TRUE, TRUE, 0);
@@ -655,6 +703,8 @@ BrowserWindow *a_Interface_browser_windo
       progbox = Interface_progressbox_new(bw, 1);
       gtk_box_pack_start(GTK_BOX(hbox), toolbar, TRUE, TRUE, 0);
       gtk_widget_show(toolbar);
+	  gtk_box_pack_start(GTK_BOX(hbox), scale_spin_button, FALSE, FALSE, 0);
+	  gtk_widget_show(scale_spin_button);
       gtk_box_pack_start(GTK_BOX(hbox), progbox, FALSE, FALSE, 0);
       gtk_widget_show(progbox);
       gtk_container_add(GTK_CONTAINER(handlebox), hbox);
@@ -662,6 +712,45 @@ BrowserWindow *a_Interface_browser_windo
       gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0);
       gtk_widget_show(handlebox);
 
+   } else if (prefs.panel_size == 4) {
+
+      handlebox = gtk_handle_box_new();
+      bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox);
+      hbox = gtk_hbox_new(FALSE, 0);
+      /* Control Buttons */
+      toolbar = Interface_toolbar_new(bw, 0);
+      /* Menus */
+      menubar = a_Menu_mainbar_new(bw, 1);
+      /* Location entry */
+      locbox = Interface_locbar_new(bw);
+      /* progress bars */
+      progbox = Interface_progressbox_new(bw, 0);
+	  /* Scaling */
+	  scale_spin_button = Interface_scale_spin_button_new(bw);
+
+      gtk_box_pack_start(GTK_BOX(hbox), menubar, FALSE, FALSE, 0);
+      gtk_widget_show(menubar);
+      gtk_box_pack_start(GTK_BOX(hbox), toolbar, FALSE, FALSE, 0);
+      gtk_widget_show(toolbar);
+	  gtk_container_add(GTK_CONTAINER(handlebox), hbox);
+	  gtk_widget_show(hbox);
+	  gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0);
+      gtk_widget_show(handlebox);
+
+      handlebox = gtk_handle_box_new();
+      hbox = gtk_hbox_new(FALSE, 0);
+      bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox);
+      gtk_box_pack_start(GTK_BOX(hbox), locbox, TRUE, TRUE, 0);
+      gtk_widget_show(locbox);
+	  gtk_box_pack_start(GTK_BOX(hbox), scale_spin_button, TRUE, TRUE, 0);
+	  gtk_widget_show(scale_spin_button);
+      gtk_box_pack_start(GTK_BOX(hbox), progbox, FALSE, FALSE, 0);
+      gtk_widget_show(progbox);
+	  gtk_container_add(GTK_CONTAINER(handlebox), hbox);
+	  gtk_widget_show(hbox);
+      gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0);
+      gtk_widget_show(handlebox);
+
    } else {
       handlebox = gtk_handle_box_new();
       bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox);
@@ -677,8 +766,11 @@ BrowserWindow *a_Interface_browser_windo
       hbox = gtk_hbox_new(FALSE, 0);
       toolbar = Interface_toolbar_new(bw, 1);
       progbox = Interface_progressbox_new(bw, 1);
+	  scale_spin_button = Interface_scale_spin_button_new(bw);
       gtk_box_pack_start(GTK_BOX(hbox), toolbar, TRUE, TRUE, 0);
       gtk_widget_show(toolbar);
+	  gtk_box_pack_start(GTK_BOX(hbox), scale_spin_button, FALSE, FALSE, 0);
+	  gtk_widget_show(scale_spin_button);
       gtk_box_pack_start(GTK_BOX(hbox), progbox, FALSE, FALSE, 0);
       gtk_widget_show(progbox);
       gtk_container_add(GTK_CONTAINER(handlebox), hbox);
diff -pru dillo-0.6.5/src/prefs.c dillo-0.6.5-hacked/src/prefs.c
--- dillo-0.6.5/src/prefs.c	Thu Apr  4 02:31:46 2002
+++ dillo-0.6.5-hacked/src/prefs.c	Sun Jun  2 10:45:00 2002
@@ -67,7 +67,8 @@ static const struct {
    { "vw_fontname", DRC_TOKEN_VW_FONT },
    { "fw_fontname", DRC_TOKEN_FW_FONT },
    { "generate_submit", DRC_TOKEN_GENERATE_SUBMIT },
-   { "enterpress_forces_submit", DRC_TOKEN_ENTERPRESS_FORCES_SUBMIT }
+   { "enterpress_forces_submit", DRC_TOKEN_ENTERPRESS_FORCES_SUBMIT },
+   { "show_scale_spin", DRC_TOKEN_SHOW_SCALE_SPIN }
 };
 
 static const guint n_symbols = sizeof (symbols) / sizeof (symbols[0]);
@@ -156,6 +157,8 @@ static guint Prefs_parser(GScanner *scan
          prefs.panel_size = 1;
       else if (!g_strcasecmp(scanner->value.v_string, "medium"))
          prefs.panel_size = 2;
+	  else if (!g_strcasecmp(scanner->value.v_string, "stack"))
+         prefs.panel_size = 4;
       else /* default to "large" */
          prefs.panel_size = 3;
       break;
@@ -226,6 +229,9 @@ static guint Prefs_parser(GScanner *scan
       prefs.enterpress_forces_submit =
          (strcmp(scanner->value.v_string, "YES") == 0);
       break;
+   case DRC_TOKEN_SHOW_SCALE_SPIN:
+	  prefs.show_scale_spin = (strcmp(scanner->value.v_string, "YES") == 0);
+	  break;
    default:
       break;   /* Not reached */
    }
@@ -354,8 +360,9 @@ void a_Prefs_init(void)
    prefs.fw_fontname = g_strdup("courier");
    prefs.generate_submit = FALSE;
    prefs.enterpress_forces_submit = FALSE;
+   prefs.show_scale_spin=TRUE;
 
-   /* this locale stuff is to avoid parsing problems with float numbers */
+      /* this locale stuff is to avoid parsing problems with float numbers */
    old_locale = g_strdup (setlocale (LC_NUMERIC, NULL));
    setlocale (LC_NUMERIC, "C");
 
diff -pru dillo-0.6.5/src/prefs.h dillo-0.6.5-hacked/src/prefs.h
--- dillo-0.6.5/src/prefs.h	Thu Apr  4 02:31:46 2002
+++ dillo-0.6.5-hacked/src/prefs.h	Sun Jun  2 10:47:20 2002
@@ -58,6 +58,7 @@ typedef enum {
    DRC_TOKEN_VW_FONT,
    DRC_TOKEN_GENERATE_SUBMIT,
    DRC_TOKEN_ENTERPRESS_FORCES_SUBMIT,
+   DRC_TOKEN_SHOW_SCALE_SPIN,
 
    DRC_TOKEN_LAST
 } Dillo_Rc_TokenType;
@@ -100,6 +101,7 @@ struct _DilloPrefs {
    gchar *fw_fontname;
    gboolean generate_submit;
    gboolean enterpress_forces_submit;
+   gboolean show_scale_spin;
 };
 
 /* Global Data */

