diff -pru dillo.my/src/url.c dillo.new/src/url.c
--- dillo.my/src/url.c	Mon Aug 27 23:24:30 2001
+++ dillo.new/src/url.c	Tue Aug 28 00:09:15 2001
@@ -77,10 +77,11 @@ static gchar *
  Url_str_resolve_relative(const gchar *urlstring, const gchar *BaseUrl)
 {
    guint i;
-   gchar *ptr, *tmp, *base_url;
+   gchar *ptr, *tmp, *base_url, *base_protocol;
 
    for (i = 0; BaseUrl[i] && BaseUrl[i] != ':'; i++);
-   for (i++; BaseUrl[i] && BaseUrl[i] == '/'; i++);
+   base_protocol = (i > 0) ? g_strndup(BaseUrl, i+1) : "";
+   for (i++; BaseUrl[i] && BaseUrl[i] == '/'; i++); 
    for (i++; BaseUrl[i] && BaseUrl[i] != '/'; i++);
    
    if ( (ptr = Url_str_parse_hash(BaseUrl)) )
@@ -89,12 +90,18 @@ static gchar *
       base_url = (gchar *)BaseUrl;
 
    if (urlstring[0] == '/' ) {
-      if (i && base_url[i]) {
-         gchar *base_host = g_strndup(base_url, i);
-         tmp = g_strconcat(base_host, urlstring, NULL);
-         g_free(base_host);
-      } else
-         tmp = g_strconcat(base_url, urlstring, NULL);
+      if (urlstring[1] == '/') {
+	 tmp = g_strconcat(base_protocol, urlstring, NULL);
+	 g_print("URL=%s\n", tmp);
+      }
+      else {
+	 if (i && base_url[i]) {
+	    gchar *base_host = g_strndup(base_url, i);
+	    tmp = g_strconcat(base_host, urlstring, NULL);
+	    g_free(base_host);
+	 } else
+	    tmp = g_strconcat(base_url, urlstring, NULL);
+      }
 
    } else {
       if (urlstring[0] == '#') 
@@ -111,6 +118,9 @@ static gchar *
 
    if (base_url != BaseUrl)
       g_free(base_url);
+
+   if (base_protocol != "")
+      g_free(base_protocol);
 
    return tmp;
 }

