diff -pru dillo.orig/src/dw_gtk_scrolled_window.c dillo.new/src/dw_gtk_scrolled_window.c
--- dillo.orig/src/dw_gtk_scrolled_window.c	Thu Jul 19 23:55:26 2001
+++ dillo.new/src/dw_gtk_scrolled_window.c	Wed Aug  1 03:36:21 2001
@@ -215,6 +215,15 @@ void a_Dw_gtk_scrolled_window_set_anchor
 }
 
 
+gint a_Dw_gtk_scrolled_window_get_scrolling_position (GtkDwScrolledWindow 
+						      *scrolled)
+{
+   GtkLayout *viewport = GTK_LAYOUT(GTK_BIN(GTK_BIN(scrolled)->child)->child);
+
+   return ((int) viewport->vadjustment->value);
+}
+
+
 /*
  * See a_Dw_gtk_viewport_set_scrolling_position.
  */
diff -pru dillo.orig/src/dw_gtk_scrolled_window.h dillo.new/src/dw_gtk_scrolled_window.h
--- dillo.orig/src/dw_gtk_scrolled_window.h	Mon May 21 23:36:14 2001
+++ dillo.new/src/dw_gtk_scrolled_window.h	Wed Aug  1 03:30:17 2001
@@ -47,6 +47,8 @@ DwWidget*  a_Dw_gtk_scrolled_window_get_
 
 void       a_Dw_gtk_scrolled_window_set_anchor (
               GtkDwScrolledWindow *scrolled, const gchar *anchor);
+gint       a_Dw_gtk_scrolled_window_get_scrolling_position (
+              GtkDwScrolledWindow *scrolled);
 void       a_Dw_gtk_scrolled_window_set_scrolling_position (
               GtkDwScrolledWindow *scrolled, gint pos);
 
diff -pru dillo.orig/src/nav.c dillo.new/src/nav.c
--- dillo.orig/src/nav.c	Sun Jul  8 00:04:53 2001
+++ dillo.new/src/nav.c	Wed Aug  1 03:50:07 2001
@@ -75,6 +75,11 @@ static void Nav_open_url(BrowserWindow *
       if ( bw->nav_expect.url )
          old_url = bw->nav_expect.url;
    }
+   
+   if (old_url) /* Record current position in the viewport for latter */
+      old_url->scrolling_position =  
+	 a_Dw_gtk_scrolled_window_get_scrolling_position(
+	    GTK_DW_SCROLLED_WINDOW(bw->docwin));
 
    /* Page must be reloaded, if old and new url (without anchor) differ */
    MustLoad = ForceReload || !(old_url && !a_Url_cmp(old_url, url));
@@ -220,6 +225,9 @@ void a_Nav_back(BrowserWindow *bw)
    a_Nav_cancel_expect(bw);
    if ( bw->nav_stack_ptr > 0 ){
       a_Interface_msg(bw, "");
+      bw->nav_stack[bw->nav_stack_ptr].url->scrolling_position =
+	 a_Dw_gtk_scrolled_window_get_scrolling_position(
+	    GTK_DW_SCROLLED_WINDOW(bw->docwin));
       bw->nav_stack_ptr--;
       Nav_open_url(bw, bw->nav_stack[bw->nav_stack_ptr].url);
    }
@@ -233,6 +241,9 @@ void a_Nav_forw(BrowserWindow *bw)
    a_Nav_cancel_expect(bw);
    if (bw->nav_stack_ptr < bw->nav_stack_size - 1) {
       a_Interface_msg(bw, "");
+      bw->nav_stack[bw->nav_stack_ptr].url->scrolling_position =
+	 a_Dw_gtk_scrolled_window_get_scrolling_position(
+	    GTK_DW_SCROLLED_WINDOW(bw->docwin));
       bw->nav_stack_ptr++;
       Nav_open_url(bw, bw->nav_stack[bw->nav_stack_ptr].url);
    }
diff -pru dillo.orig/src/web.c dillo.new/src/web.c
--- dillo.orig/src/web.c	Sun Jul  8 00:04:57 2001
+++ dillo.new/src/web.c	Wed Aug  1 05:08:26 2001
@@ -69,10 +69,14 @@ DwWidget* a_Web_dispatch_by_type (const 
    
       a_Dw_gtk_scrolled_window_set_dw(
          GTK_DW_SCROLLED_WINDOW(Web->bw->docwin), dw);
-      a_Dw_gtk_scrolled_window_set_anchor(
-         GTK_DW_SCROLLED_WINDOW(Web->bw->docwin),
-         URL_ANCHOR(Web->url) ? URL_ANCHOR(Web->url)+1: NULL);
-   
+      if (URL_POS(Web->url)) 
+	 a_Dw_gtk_scrolled_window_set_scrolling_position(
+	    GTK_DW_SCROLLED_WINDOW(Web->bw->docwin), URL_POS(Web->url));
+      else
+	 a_Dw_gtk_scrolled_window_set_anchor(
+   	    GTK_DW_SCROLLED_WINDOW(Web->bw->docwin),
+            URL_ANCHOR(Web->url) ? URL_ANCHOR(Web->url)+1: NULL);
+
       /* Set the title bar for pages without a <TITLE> tag */
       a_Interface_set_Page_title(Web->bw, "");
       a_Interface_set_location_text(Web->bw, URL_STR(Web->url));

