diff -ur src/gtk2/gui/guiArt.ml src/gtk2/gui/guiArt.ml
--- src/gtk2/gui/guiArt.ml	2005-11-13 10:41:02.000000000 +0100
+++ src/gtk2/gui/guiArt.ml	2005-11-14 16:26:06.017953240 +0100
@@ -358,58 +358,53 @@
     else (range - (i * range / 2 / 16))
 
 (* define the colors we will use to display the availability *)
-let color_red = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:false ()
+let color_red = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:true ()
 let _ =
-  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:false () in
+  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:true () in
   for i = 0 to 15 do
     let r = highlight 255 i in
-(*  RGBA pixel to clear to (0xffffffff is opaque white, 0x00000000 transparent black) *)
     let s =  Printf.sprintf "0x%02X0000ff" r in
     GdkPixbuf.fill pixb (Int32.of_string s);
     GdkPixbuf.copy_area ~dest:color_red ~dest_x:0 ~dest_y:i ~width:1 ~height:1 ~src_x:0 ~src_y:0 pixb
   done
 
-let color_green = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:false ()
+let color_green = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:true ()
 let _ =
-  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:false () in
+  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:true () in
   for i = 0 to 15 do
     let r = highlight 255 i in
-(*  RGBA pixel to clear to (0xffffffff is opaque white, 0x00000000 transparent black) *)
     let s =  Printf.sprintf "0x00%02X00ff" r in
     GdkPixbuf.fill pixb (Int32.of_string s);
     GdkPixbuf.copy_area ~dest:color_green ~dest_x:0 ~dest_y:i ~width:1 ~height:1 ~src_x:0 ~src_y:0 pixb
   done
 
-let color_black = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:false ()
+let color_black = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:true ()
 let _ =
-  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:false () in
+  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:true () in
   for i = 0 to 15 do
     let r = highlight 128 i in
-(*  RGBA pixel to clear to (0xffffffff is opaque white, 0x00000000 transparent black) *)
     let s =  Printf.sprintf "0x%02X%02X%02Xff" r r r in
     GdkPixbuf.fill pixb (Int32.of_string s);
     GdkPixbuf.copy_area ~dest:color_black ~dest_x:0 ~dest_y:i ~width:1 ~height:1 ~src_x:0 ~src_y:0 pixb
   done
 
-let color_orange = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:false ()
+let color_orange = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:true ()
 let _ =
-  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:false () in
+  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:true () in
   for i = 0 to 15 do
     let r = highlight 255 i in
     let g = 178 * r / 255 in
-(*  RGBA pixel to clear to (0xffffffff is opaque white, 0x00000000 transparent black) *)
     let s =  Printf.sprintf "0x%02X%02X00ff" r g in
     GdkPixbuf.fill pixb (Int32.of_string s);
     GdkPixbuf.copy_area ~dest:color_orange ~dest_x:0 ~dest_y:i ~width:1 ~height:1 ~src_x:0 ~src_y:0 pixb
   done
 
-let color_yellow = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:false ()
+let color_yellow = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:true ()
 let _ =
-  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:false () in
+  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:true () in
   for i = 0 to 15 do
      let r = highlight 255 i in
     let g = 255 * r / 255 in
-(*  RGBA pixel to clear to (0xffffffff is opaque white, 0x00000000 transparent black) *)
     let s =  Printf.sprintf "0x%02X%02X00ff" r g in
     GdkPixbuf.fill pixb (Int32.of_string s);
     GdkPixbuf.copy_area ~dest:color_yellow ~dest_x:0 ~dest_y:i ~width:1 ~height:1 ~src_x:0 ~src_y:0 pixb
@@ -420,9 +415,9 @@
 let create_color_blue_relative () =
   color_blue_relative := [||];
   for i = 0 to (!!O.gtk_misc_availability_max - 1) do
-    let pixbuf = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:false () in
+    let pixbuf = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:true () in
     let col_step = i * 255 / (!!O.gtk_misc_availability_max - 1) in
-    let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:false () in
+    let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:true () in
     for j = 0 to 15 do
       let b = highlight 255 j in
       let g = highlight col_step j in
@@ -435,12 +430,11 @@
 
 let _ = create_color_blue_relative ()
 
-let color_grey = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:false ()
+let color_grey = GdkPixbuf.create ~width:1 ~height:16 ~has_alpha:true ()
 let _ =
-  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:false () in
+  let pixb = GdkPixbuf.create ~width:1 ~height:1 ~has_alpha:true () in
   for i = 0 to 15 do
     let r = highlight 255 i in
-(*  RGBA pixel to clear to (0xffffffff is opaque white, 0x00000000 transparent black) *)
     let s =  Printf.sprintf "0x%02X%02X%02Xff" r r r in
     GdkPixbuf.fill pixb (Int32.of_string s);
     GdkPixbuf.copy_area ~dest:color_grey ~dest_x:0 ~dest_y:i ~width:1 ~height:1 ~src_x:0 ~src_y:0 pixb
@@ -475,7 +469,7 @@
   with _ ->
     begin
       (if !!verbose then lprintf' "Creating new availability bar\n");
-      let dest = GdkPixbuf.create ~width:nchunks ~height ~has_alpha:false () in
+      let dest = GdkPixbuf.create ~width:nchunks ~height ~has_alpha:true () in
       (try
         for i = 0 to (nchunks - 1) do
           if is_file
diff -ur src/gtk2/gui/guiDownloads.ml src/gtk2/gui/guiDownloads.ml
--- src/gtk2/gui/guiDownloads.ml	2005-11-14 16:16:49.458563128 +0100
+++ src/gtk2/gui/guiDownloads.ml	2005-11-14 16:27:22.131382240 +0100
@@ -62,6 +62,7 @@
 
 let downloaders_timerID = ref (GMain.Timeout.add ~ms:2000 ~callback:(fun _ -> true))
 let (view_context : GPango.context option ref) = ref None
+let (razorback_progress_box : (GMisc.label * GRange.progress_bar) option ref) = ref None
 let interested_in_sources = ref false
 let expanded_rows = ref 0
 
@@ -559,7 +560,7 @@
                            Some pb when width > 0 ->
                              begin
                                let w = GdkPixbuf.get_width pb in
-                               let pixb = GdkPixbuf.create ~width ~height ~has_alpha:false () in
+                               let pixb = GdkPixbuf.create ~width ~height ~has_alpha:true () in
                                let scale_x = (float_of_int width) /. (float_of_int w) in
                                (if !!verbose then lprintf' "Resizing pixbuf using scale %5.2f width:%d old_width:%d\n"
                                  scale_x width w);
@@ -987,7 +988,32 @@
 let razorback2_stats k () =
   try
     let file = file_of_key k in
-    GuiHtml.get_razorback2_stats file
+    let t1 = ref 0. in
+    let t2 = ref 0. in
+    let progress t md4 desc n m =
+      let s = U.utf8_of (Printf.sprintf "%s %s:" desc md4) in
+      let tt = !t in
+      t := !t +. float_of_int n;
+      let p =
+        if m > 0
+          then min 1. (!t /. float_of_int m)
+          else if !t > 0. then tt /. !t else 0.
+      in
+      let v = int_of_float (p *. 100.) in
+      let percent = U.simple_utf8_of (Printf.sprintf "%d%%" v) in
+      Printf2.lprintf_nl2 "%s: %s" s percent;
+      match !razorback_progress_box with
+        Some (label, pbar) ->
+          begin
+            label#set_label s;
+            pbar#set_fraction p;
+            pbar#set_text percent;
+            label#misc#show ();
+            pbar#misc#show ()
+          end
+      | _ -> ()
+    in
+    GuiHtml.get_razorback2_stats file (progress t1) (progress t2)
   with _ -> ()
 
 (*************************************************************************)
@@ -1345,6 +1371,7 @@
   ignore (vbox#connect#destroy ~callback:
     (fun _ ->
        view_context := None;
+       razorback_progress_box := None;
        expanded_rows := 0;
        Timeout.remove (!downloaders_timerID)
   ));
@@ -1368,30 +1395,22 @@
       ~packing:(vbox#pack ~expand:true ~fill:true) ()
   in
   let hbox_razorback_stats =
-    GPack.hbox ~homogeneous:false ~border_width:6
-      ~spacing:12
+    GPack.hbox ~homogeneous:false ~border_width:6 ~spacing:12
       ~packing:(vbox#pack ~expand:false ~fill:true) ()
   in
-  let razorback_history =
-    GMisc.image ~packing:(hbox_razorback_stats#pack ~expand:false ~fill:true) ()
-  in
-  let vbox_razorback_stats =
-    GPack.vbox ~homogeneous:false ~border_width:6
-      ~spacing:12
-      ~packing:(hbox_razorback_stats#pack ~expand:false ~fill:true) ()
-  in
-  let label_rating =
-    GMisc.label ~xalign:0. ~yalign:0.
-      ~packing:(vbox_razorback_stats#pack ~expand:false ~fill:true) ()
+  let hbox_razorback_progress =
+    GPack.hbox ~homogeneous:false ~border_width:6 ~spacing:12
+      ~packing:(vbox#pack ~expand:false ~fill:true) ()
   in
-  let label_availability =
-    GMisc.label ~xalign:0. ~yalign:0.
-      ~packing:(vbox_razorback_stats#pack ~expand:false ~fill:true) ()
+  let label_razorback_progress =
+    GMisc.label ~xalign:0. ~yalign:0.5 ~show:false
+      ~packing:(hbox_razorback_progress#pack ~expand:false ~fill:true) ()
   in
-  let label_completed =
-    GMisc.label ~xalign:0. ~yalign:0.
-      ~packing:(vbox_razorback_stats#pack ~expand:false ~fill:true) ()
+  let pbar_razorback_progress =
+    GRange.progress_bar ~pulse_step:0.01 ~show:false
+      ~packing:(hbox_razorback_progress#pack ~expand:false ~fill:true) ()
   in
+  razorback_progress_box := Some (label_razorback_progress, pbar_razorback_progress);
   let on_select_files keys =
     match keys with
       k :: _ when (is_file k) ->
@@ -1401,21 +1420,49 @@
             match file.g_file_razorback_stats with
               None ->
                 begin
-                  let pixb = A.get_icon ~icon:M.icon_mime_unknown ~size:A.LARGE () in
-                  razorback_history#set_pixbuf pixb;
-                  label_rating#set_label "Razorback Stats not available"
+                  List.iter (fun w -> w#destroy ()) hbox_razorback_stats#children;
+                  List.iter (fun w -> w#misc#hide ()) hbox_razorback_progress#children;
                 end
             | Some stats ->
                 begin
                   try
+                    List.iter (fun w -> w#destroy ()) hbox_razorback_stats#children;
+                    List.iter (fun w -> w#misc#hide ()) hbox_razorback_progress#children;
+                    let razorback_history =
+                      GMisc.image ~packing:(hbox_razorback_stats#pack ~expand:false ~fill:true) ()
+                    in
+                    let vbox_razorback_stats =
+                      GPack.vbox ~homogeneous:false ~border_width:6 ~spacing:12
+                        ~packing:(hbox_razorback_stats#pack ~expand:false ~fill:true) ()
+                    in
+                    let label_rating =
+                      GMisc.label ~xalign:0. ~yalign:0.
+                        ~packing:(vbox_razorback_stats#pack ~expand:false ~fill:true) ()
+                    in
+                    let label_availability =
+                      GMisc.label ~xalign:0. ~yalign:0.
+                        ~packing:(vbox_razorback_stats#pack ~expand:false ~fill:true) ()
+                    in
+                    let label_completed =
+                      GMisc.label ~xalign:0. ~yalign:0.
+                        ~packing:(vbox_razorback_stats#pack ~expand:false ~fill:true) ()
+                    in
                     let filename = stats.razorback_file_history in
                     Printf2.lprintf_nl2 "image: %s" filename;
                     let pixb = GdkPixbuf.from_file filename in
                     razorback_history#set_pixbuf pixb;
-                    label_rating#set_label (Printf.sprintf "Rating: %s" stats.razorback_file_rating);
-                    label_availability#set_label (Printf.sprintf "Available: %d" stats.razorback_file_avalaibility);
-                    label_completed#set_label (Printf.sprintf "Completed: %d" stats.razorback_file_completed);
-                    GuiHtml.get_razorback2_stats file
+                    let rating = U.utf8_of (
+                      Printf.sprintf "%s %s"
+                        !M.dT_lb_razorback2_stats_rate stats.razorback_file_rating) in
+                    let availability = U.utf8_of (
+                      Printf.sprintf "%s %d"
+                        !M.dT_lb_razorback2_stats_available stats.razorback_file_avalaibility) in
+                    let completed = U.utf8_of (
+                      Printf.sprintf "%s %d"
+                        !M.dT_lb_razorback2_stats_complete stats.razorback_file_completed) in
+                    label_rating#set_label rating;
+                    label_availability#set_label availability;
+                    label_completed#set_label completed
                   with _ -> ()
                 end
           with _ -> ()
diff -ur src/gtk2/gui/guiHtml.ml src/gtk2/gui/guiHtml.ml
--- src/gtk2/gui/guiHtml.ml	2005-11-14 16:16:49.492557960 +0100
+++ src/gtk2/gui/guiHtml.ml	2005-11-14 16:09:41.322649680 +0100
@@ -26,6 +26,8 @@
 open Md4
 
 module O = GuiOptions
+module M = GuiMessages
+module U = GuiUtf8
 
 let cache_dir = Filename.concat GuiMessages.gui_config_dir "cache"
 
@@ -39,12 +41,11 @@
 let _ =
   Unix2.safe_mkdir cache_dir;
   Unix2.can_write_to_directory cache_dir;
-  clean_cache_dir ();
-  ignore (GMain.Timeout.add ~ms:3600000 ~callback:
-    (fun _ ->
-      clean_cache_dir ();
-      true
-  ))
+  clean_cache_dir ()
+
+let user_agent =
+(* "Mozilla/5.0 (Linux 2.4.19-16mdk i686; U) Opera 6.11  [en]" *)
+  Printf.sprintf "Mlgui/%s (%s) [en]" Autoconf.current_version Autoconf.build_system
 
 let make_request url =
   let module H = Http_client in
@@ -57,7 +58,7 @@
       H.basic_request with
       H.req_url = Url.of_string url;
       H.req_proxy = proxy;
-      H.req_user_agent = "Mozilla/5.0 (Linux 2.4.19-16mdk i686; U) Opera 6.11  [en]";
+      H.req_user_agent = user_agent;
       H.req_referer = None;
       H.req_request = H.GET;
     } in
@@ -76,7 +77,8 @@
     Filename.concat cache_dir file
   with _ -> ""
 
-let get url_name f =
+let get url_name f progress =
+  let progress_desc = Printf.sprintf "http://stats.razorback2.com :: %s" !M.dT_lb_razorback2_stats_get_main_page in
   let r = make_request url_name in
   let module H = Http_client in
   let filename = file_from_url (Url.to_string r.H.req_url) in
@@ -94,7 +96,7 @@
                ~return_comments:true lexb
     in
     f dl;
-    close_in in_chan) (fun n m -> lprintf_nl2 "progress: %d / %d" n m)
+    close_in in_chan) (fun n m -> progress progress_desc n m)
 
 
 let uids_to_md4 uids =
@@ -112,7 +114,8 @@
     then !s
     else raise Not_found
 
-let parse_razorback_stats stats md4 referer dl =
+let parse_razorback_stats stats md4 referer progress dl =
+  let progress_desc = Printf.sprintf "http://stats.razorback2.com :: %s" !M.dT_lb_razorback2_stats_get_image in
   let rec iter _dl =
     List.iter (fun d ->
       match d with
@@ -131,8 +134,7 @@
                         (try Sys.remove filename with _ -> lprintf_nl2 "cannot remove file %s" filename);
                         File.from_string filename ___s;
                         stats.razorback_file_history <- filename;
-                        stats.razorback_file_last_time <- BasicSocket.current_time ();
-                      with _ -> (lprintf_nl2 "failed in H.wget_string")) (fun n m -> lprintf_nl2 "progress: %d / %d" n m)
+                      with _ -> (lprintf_nl2 "failed in H.wget_string")) (fun n m -> progress progress_desc n m)
                   end
               ) sl;
               iter __dl
@@ -192,8 +194,7 @@
   in
   iter dl
 
-let get_razorback2_stats file = ()
-(*
+let get_razorback2_stats file progress1 progress2 =
   try
     let md4 = uids_to_md4 file.g_file_uids in
     let stats =
@@ -205,22 +206,16 @@
                razorback_file_rating       = "";
                razorback_file_avalaibility = 0;
                razorback_file_completed    = 0;
-               razorback_file_last_time    = 0.;
              } in
              file.g_file_razorback_stats <- Some s;
              s
            end
       | Some s -> s
     in
-    let last_time = BasicSocket.current_time () -. stats.razorback_file_last_time in
-    if last_time > 3600000. (* 60 min *)
-      then begin
-        let referer = "http://stats.razorback2.com/" in
-        let url = Printf.sprintf "%sed2khistory?ed2k=%s" referer md4 in
-        get url (parse_razorback_stats stats md4 referer)
-      end
+    let referer = "http://stats.razorback2.com/" in
+    let url = Printf.sprintf "%sed2khistory?ed2k=%s" referer md4 in
+    get url (parse_razorback_stats stats md4 referer (progress1 md4)) (progress2 md4)
   with _ -> ()
-*)
 
 (*
 Element: !
diff -ur src/gtk2/gui/guiInfoWindow.ml src/gtk2/gui/guiInfoWindow.ml
--- src/gtk2/gui/guiInfoWindow.ml	2005-11-01 11:46:55.000000000 +0100
+++ src/gtk2/gui/guiInfoWindow.ml	2005-11-14 15:48:59.095496912 +0100
@@ -290,7 +290,7 @@
                 ~expand:`X ~fill:`X
                 img#coerce;
               let w = GdkPixbuf.get_width pixb in
-              let pixbuf = GdkPixbuf.create ~width ~height ~has_alpha:false () in
+              let pixbuf = GdkPixbuf.create ~width ~height ~has_alpha:true () in
               let scale_x = (float_of_int width) /. (float_of_int w) in
               GdkPixbuf.scale
                 ~dest:pixbuf ~dest_x:0 ~dest_y:0
diff -ur src/gtk2/gui/guiMessages.ml src/gtk2/gui/guiMessages.ml
--- src/gtk2/gui/guiMessages.ml	2005-11-14 16:16:49.546549752 +0100
+++ src/gtk2/gui/guiMessages.ml	2005-11-14 15:22:24.785868816 +0100
@@ -240,6 +240,11 @@
 let dT_me_show_file_details  = ref ""
 let dT_me_show_source_details  = ref ""
 let dT_wt_show_source_details  = ref ""
+let dT_lb_razorback2_stats_get_main_page  = ref ""
+let dT_lb_razorback2_stats_get_image  = ref ""
+let dT_lb_razorback2_stats_rate  = ref ""
+let dT_lb_razorback2_stats_available  = ref ""
+let dT_lb_razorback2_stats_complete  = ref ""
 
 (* Friends Tab *)
 
@@ -702,7 +707,12 @@
   dT_me_show_file_details  :=  _s "Show file details";
   dT_me_show_source_details  :=  _s "Show source details";
   dT_wt_show_source_details  :=  _s "Source details";
-  dT_me_razorback2_stats := _s "Get Razorback Stats";
+  dT_me_razorback2_stats := _s "Get/Refresh Razorback Stats";
+  dT_lb_razorback2_stats_get_main_page := _s "Getting main page for file";
+  dT_lb_razorback2_stats_get_image := _s "Getting graph image for file";
+  dT_lb_razorback2_stats_rate := _s_ "Rate";
+  dT_lb_razorback2_stats_available := _s_ "Availability";
+  dT_lb_razorback2_stats_complete := _s_ "Complete";
 
 (* Friends Tab *)
 
diff -ur src/gtk2/gui/guiMisc.ml src/gtk2/gui/guiMisc.ml
--- src/gtk2/gui/guiMisc.ml	2005-11-13 10:41:02.000000000 +0100
+++ src/gtk2/gui/guiMisc.ml	2005-11-14 10:59:49.000000000 +0100
@@ -824,18 +824,7 @@
 let main_availability_of net availabilities  =
   try
     List.assoc net availabilities
-  with _ ->
-    begin
-      match availabilities with
-          (_, availability)::_ ->
-             begin
-               let len = String.length availability in
-               String.make len (char_of_int 0)
-             end
-
-        | _ -> ""
-
-    end
+  with _ -> ""
 
 let availability_bar availability chunks b =
   if !!O.gtk_look_graphical_availability
diff -ur src/gtk2/gui/guiTemplates.ml src/gtk2/gui/guiTemplates.ml
--- src/gtk2/gui/guiTemplates.ml	2005-11-13 10:41:02.000000000 +0100
+++ src/gtk2/gui/guiTemplates.ml	2005-11-14 10:54:46.237139296 +0100
@@ -1227,6 +1227,16 @@
            not (List.mem_assoc c !!columns)
         ) column_strings
       in
+      let rec iter p n =
+        if p = n
+          then true
+          else begin
+            let col = view#get_column p in
+            let autosized = match col#sizing with `AUTOSIZE -> true | _ -> false in
+            if autosized then iter (p + 1) n else false
+          end
+      in
+      let all_autosized = iter 0 (List.length !!columns) in
       [
         `C (!M.mAutosize, (match vc#sizing with `AUTOSIZE -> true | _ -> false),
           (fun autosize ->
@@ -1249,7 +1259,7 @@
              with _ -> ()
           )
         );
-        `C (!M.mAutosize_all, (match vc#sizing with `AUTOSIZE -> true | _ -> false),
+        `C (!M.mAutosize_all, all_autosized,
           (fun autosize ->
              try
                let pos = ref 0 in
diff -ur src/gtk2/gui/guiTypes2.ml src/gtk2/gui/guiTypes2.ml
--- src/gtk2/gui/guiTypes2.ml	2005-11-14 16:16:49.627537440 +0100
+++ src/gtk2/gui/guiTypes2.ml	2005-11-14 13:43:10.873001152 +0100
@@ -218,7 +218,6 @@
    mutable razorback_file_rating       : string;
    mutable razorback_file_avalaibility : int;
    mutable razorback_file_completed    : int;
-   mutable razorback_file_last_time    : float;
   }
 
 type g_file_info = {
