diff -x Root -x Repository -x Tag -x Entries -x .svn -x '*.rej' -x '*.orig' -x .cvsignore -u -N -r -E -B ./src/networks/opennap/opennapClients.ml ./src/networks/opennap/opennapClients.ml
--- ./src/networks/opennap/opennapClients.ml	2004-02-08 23:58:17.000000000 +0100
+++ ./src/networks/opennap/opennapClients.ml	2005-03-13 23:41:27.000000000 +0100
@@ -151,10 +151,10 @@
 lprint_newline ();
   *)
     TcpBufferedSocket.buf_used b b.len;
-    if c.client_pos > file_downloaded file then begin
+(*    if c.client_pos > file_downloaded file then begin
         add_file_downloaded file.file_file
         (Int64.sub c.client_pos (file_downloaded file))
-      end;
+      end; *)
     if file_downloaded file = file_size file then
       
       file_complete file             
diff -x Root -x Repository -x Tag -x Entries -x .svn -x '*.rej' -x '*.orig' -x .cvsignore -u -N -r -E -B ./src/networks/opennap/opennapComplexOptions.ml ./src/networks/opennap/opennapComplexOptions.ml
--- ./src/networks/opennap/opennapComplexOptions.ml	2004-01-30 07:11:06.000000000 +0100
+++ ./src/networks/opennap/opennapComplexOptions.ml	2005-03-13 23:41:27.000000000 +0100
@@ -138,11 +138,11 @@
     "file_downloaded", int64_to_value (file_downloaded file);
     "file_id", string_to_value (Md4.to_string file.file_id);
     "file_sources", 
-    list_to_value "Opennap Sources" (fun c ->
+    list_to_value (fun c ->
         let filename = List.assoc file c.client_files  in
         SmallList [string_to_value c.client_user.user_nick;
           string_to_value filename;
-          (list_to_value "Opennap Sources" (fun s ->
+          (list_to_value (fun s ->
                 SmallList [to_value Ip.option s.server_ip;
                   int_to_value s.server_port]
             ) c.client_user.user_servers)]
diff -x Root -x Repository -x Tag -x Entries -x .svn -x '*.rej' -x '*.orig' -x .cvsignore -u -N -r -E -B ./src/networks/opennap/opennapGlobals.ml ./src/networks/opennap/opennapGlobals.ml
--- ./src/networks/opennap/opennapGlobals.ml	2004-11-01 12:23:02.000000000 +0100
+++ ./src/networks/opennap/opennapGlobals.ml	2005-03-13 23:41:27.000000000 +0100
@@ -120,8 +120,8 @@
           server_desc = "";
           server_net = "";
           server_sock = NoConnection;
-          server_nusers = 0;
-          server_nfiles = 0;
+          server_nusers = Int64.zero;
+          server_nfiles = Int64.zero;
           server_size = 0;
           server_connection_control = DG.new_connection_control ( ());
           server_nick_num = -1;
@@ -146,6 +146,21 @@
 let set_server_state s state =
   set_server_state (as_server s.server_server) state
 
+let result_sources = Hashtbl.create 1000
+
+let add_result_source r (s : user) (index : string) =
+  let ss =
+    try
+      Hashtbl.find result_sources r.stored_result_num
+    with _ ->
+	let ss = ref [] in
+	Hashtbl.add result_sources r.stored_result_num ss;
+	ss
+  in
+  let key = (s, index) in
+  if not (List.mem key !ss) then begin
+      ss := key :: !ss
+    end
 
 let new_result file_name file_size =
   let basename = basename file_name in
@@ -153,21 +168,15 @@
   try
     Hashtbl.find results_by_file key
   with _ ->
-      let rec result = {
-          result_result = result_impl;
-          result_name = basename;
+      let r = {
+          dummy_result with
+	  result_names = [basename];
           result_size = file_size;
-          result_info = [];
-          result_sources = [];
-        } and 
-        result_impl = {
-          dummy_result_impl with
-          impl_result_val = result;
-          impl_result_ops = result_ops;
-        } in
-      new_result result_impl;
-      Hashtbl.add results_by_file key result;
-      result  
+        }
+      in
+      let r = update_result_num r in
+      Hashtbl.add results_by_file key r;
+      r
   
 let new_file file_id file_name file_size =
   let key = (file_name, file_size) in
@@ -277,9 +286,17 @@
       c
 
 let add_source r user filename =
-  let key = (user,filename) in
-  if not (List.mem key r.result_sources) then begin
-      r.result_sources <- key :: r.result_sources
+  let ss =
+    try
+      Hashtbl.find result_sources r.stored_result_num
+    with _ ->
+        let ss = ref [] in
+        Hashtbl.add result_sources r.stored_result_num ss;
+        ss
+  in
+  let key = (user, filename) in
+  if not (List.memq key !ss) then begin
+      ss := key :: !ss
     end
 
 let add_file_client file user filename = 
diff -x Root -x Repository -x Tag -x Entries -x .svn -x '*.rej' -x '*.orig' -x .cvsignore -u -N -r -E -B ./src/networks/opennap/opennapInteractive.ml ./src/networks/opennap/opennapInteractive.ml
--- ./src/networks/opennap/opennapInteractive.ml	2004-03-18 00:42:32.000000000 +0100
+++ ./src/networks/opennap/opennapInteractive.ml	2005-03-13 23:41:36.000000000 +0100
@@ -28,6 +28,7 @@
 open CommonResult
 open CommonServer
 open CommonTypes
+open CommonOptions
 open CommonComplexOptions
 open CommonFile
 open OpennapGlobals
@@ -76,7 +77,7 @@
         | QHasMinVal (field, value) ->
             begin
               match field with
-                Field_unknown "bitrate" ->  
+                Field_UNKNOWN "bitrate" ->  
                   { t with S.bitrate = Some (Int64.to_int value, OP.AtLeast) };
               | Field_Size -> t
               | _ -> t
@@ -84,7 +85,7 @@
         | QHasMaxVal (field, value) ->
             begin
               match field with
-                Field_unknown "bitrate" -> 
+                Field_UNKNOWN "bitrate" -> 
                   { t with S.bitrate = Some (Int64.to_int value, OP.AtBest) };
               | Field_Size -> t
               | _ -> t
@@ -112,11 +113,11 @@
 let string_of_length d =
   Printf.sprintf "%02d:%02d" (d / 60) (d mod 60)
 
-
-
+(*
 let _ = 
   result_ops.CommonResult.op_result_download <- (fun r _ force ->
       OpennapServers.download_file r)
+*)
 
 let file_num file =
   file.file_file.impl_file_num
@@ -142,8 +143,8 @@
         P.file_md4 = file.file_id;
         P.file_size = file_size file;
         P.file_downloaded = file_downloaded file;
-        P.file_nlocations = 0;
-        P.file_nclients = 0;
+        P.file_all_sources = 0;
+        P.file_active_sources = 0;
         P.file_state = file_state file;
         P.file_sources = None;
         P.file_download_rate = 0.0;
@@ -174,11 +175,13 @@
         P.server_description = s.server_net;
         P.server_users = None;
         P.server_banner = "";
+	P.server_preferred = false;
         }
   )
 
 module C = CommonTypes
   
+(*
 let _ =
   result_ops.op_result_info <- (fun r ->
        {
@@ -195,6 +198,7 @@
         C.result_done = false;
       }   
   )
+*)
 
 let _ =  
   user_ops.op_user_info <- (fun user ->
@@ -252,9 +256,13 @@
   );
   client_ops.op_client_browse <- (fun c immediate ->
       browse_client c  );
-  
-  
-  
+
+  network.op_network_recover_temp <-
+   (fun _ ->
+    if !verbose_hidden_errors then
+       lprintf "recover_temp is not implemented for Opennap.\n";
+   );
+
   network.op_network_add_server <- (fun ip port ->
       as_server (new_server (Ip.ip_of_addr ip) port).server_server
   )
\ No newline at end of file
diff -x Root -x Repository -x Tag -x Entries -x .svn -x '*.rej' -x '*.orig' -x .cvsignore -u -N -r -E -B ./src/networks/opennap/opennapOptions.ml ./src/networks/opennap/opennapOptions.ml
--- ./src/networks/opennap/opennapOptions.ml	2004-11-01 12:23:02.000000000 +0100
+++ ./src/networks/opennap/opennapOptions.ml	2005-03-13 23:41:27.000000000 +0100
@@ -68,7 +68,7 @@
       
   
 let shortname o =
-  Printf.sprintf "%s%s" !!network_options_prefix (shortname o)
+  Printf.sprintf "OpenNap-%s" (shortname o)
     
 let gui_opennap_options_panel = 
   (*
diff -x Root -x Repository -x Tag -x Entries -x .svn -x '*.rej' -x '*.orig' -x .cvsignore -u -N -r -E -B ./src/networks/opennap/opennapServers.ml ./src/networks/opennap/opennapServers.ml
--- ./src/networks/opennap/opennapServers.ml	2004-01-30 07:11:06.000000000 +0100
+++ ./src/networks/opennap/opennapServers.ml	2005-03-13 23:41:27.000000000 +0100
@@ -172,18 +172,23 @@
       (Printexc2.to_string e)
 
   
-let download_file (r : result) =
-  let file = new_file (Md4.random ()) r.result_name r.result_size in
+let download_file hash (r : CommonTypes.result_info) =
+  let file = new_file (Md4.random ())
+   (List.hd r.result_names)
+   r.result_size in
 (*  lprintf "DOWNLOAD FILE %s\n" f.file_name;  *)
   if not (List.memq file !current_files) then begin
       current_files := file :: !current_files;
     end;
-  List.iter (fun (user, filename) ->
+  begin
+    let sources = Hashtbl.find result_sources r.result_num in
+    List.iter (fun (user,filename) ->
       lprintf "Adding source %s (%d servers)\n" user.user_nick
         (List.length user.user_servers); 
-      let c = add_file_client file user  filename in
+      let c = add_file_client file user filename in
       get_file_from_source c file;
-  ) r.result_sources;
+  ) !sources;
+  end;
   as_file file.file_file
 
 let login_on_server s sock =
@@ -310,8 +315,8 @@
   | OP.ServerStatsReq t ->
       DG.connection_ok s.server_connection_control;
       let module SS = OP.ServerStats in
-      s.server_nfiles <- t.SS.files;
-      s.server_nusers <- t.SS.users;
+      s.server_nfiles <- Int64.of_int t.SS.files;
+      s.server_nusers <- Int64.of_int t.SS.users;
       s.server_size <- t.SS.size;
       
   | OP.SearchReplyReq t ->
@@ -325,7 +330,7 @@
             user.user_link <- t.SR.link_type;
             let result = new_result (basename t.SR.filename) t.SR.size in
             add_source result user t.SR.filename;
-            CommonInteractive.search_add_result true q result.result_result;
+            CommonInteractive.search_add_result true q result;
         | Some (Recover_file _) -> 
             begin
               try
@@ -355,7 +360,7 @@
                 c.client_all_files <- Some (r :: rs);
                 client_new_file (as_client c.client_client) 
                 (Filename.dirname t.BU.filename)
-                (as_result r.result_result) 
+                r
               end
         | _ -> ()
       end
diff -x Root -x Repository -x Tag -x Entries -x .svn -x '*.rej' -x '*.orig' -x .cvsignore -u -N -r -E -B ./src/networks/opennap/opennapTypes.ml ./src/networks/opennap/opennapTypes.ml
--- ./src/networks/opennap/opennapTypes.ml	2004-11-01 12:23:02.000000000 +0100
+++ ./src/networks/opennap/opennapTypes.ml	2005-03-13 23:41:27.000000000 +0100
@@ -44,8 +44,8 @@
     mutable server_sock : tcp_connection; 
     mutable server_connection_control : connection_control;
     mutable server_size : int;
-    mutable server_nusers : int;
-    mutable server_nfiles : int;
+    mutable server_nusers : int64;
+    mutable server_nfiles : int64;
     mutable server_nick_num : int;
     mutable server_last_nick : string;
     mutable server_pending_searches : (
