diff -x Root -x Repository -x Entries -x '*.rej' -x '*.orig' -u -N -r ./src/networks/donkey/donkeyClient.ml ./src/networks/donkey/donkeyClient.ml
--- ./src/networks/donkey/donkeyClient.ml	2005-01-18 01:49:59.000000000 +0100
+++ ./src/networks/donkey/donkeyClient.ml	2005-01-18 01:50:21.467803928 +0100
@@ -53,6 +53,9 @@
 
 module Udp = DonkeyProtoUdp
 
+let fullClientIdentifier c =
+	Printf.sprintf "%s (%s) '%s'" (Ip.to_string c.client_ip) (gbrand_to_string c.client_brand) c.client_name
+
 (* Lifetime of a socket after sending interesting messages *)
 let active_lifetime = 1200.
   
@@ -73,8 +76,7 @@
     let module M = DonkeyProtoClient in
     
     if !verbose then begin
-        lprintf "client %s(%s) %s, it has been banned\n" msg
-          c.client_name (brand_to_string c.client_brand);
+        lprintf "client %s %s has been banned\n" msg (fullClientIdentifier c);
       end;
     
     count_banned c;
@@ -109,8 +111,8 @@
               raise Exit;
             end;
           if !verbose then begin
-              lprintf "uploader %s(%s) has been warned\n" 
-                c.client_name (brand_to_string c.client_brand);
+              lprintf "uploader %s has been warned\n" 
+                (fullClientIdentifier c);
             end;
           if !!send_warning_messages then
             client_send c ( M.SayReq  (
@@ -143,8 +145,8 @@
           M.AvailableSlotReq Q.t);
         
         if !verbose then begin
-            lprintf "New uploader %s: brand %s\n" 
-              c.client_name (brand_to_string c.client_brand);
+            lprintf "New uploader %s\n" 
+              (fullClientIdentifier c);
           end;
         
     )  
@@ -687,30 +689,45 @@
       
 
 
+
 (*
-  Do what's need to be done when client has a file we want :
+  Do what's need to be done when client has a file we want:
   - register it in sources
-  - ask for sources if necessary
+  - do *not* ask for sources, we can't be sure, the client is still downloading the file!
 *)
 let client_has_file c file =
   
   DonkeyNeighbours.new_neighbour c file;          
-  DonkeySources.set_request_result c.client_source file.file_sources File_found;
-  let module M = DonkeyProtoClient in  
-    if file_state file = FileDownloading &&
-      M.sourceexchange c.client_emule_proto > 0 &&
-      DonkeySources.need_new_sources file.file_sources
+  DonkeySources.set_request_result c.client_source file.file_sources File_found
+
+(*
+  Do what's need to be done when client asked for a file we want :
+  - register it in sources
+  - ask for sources if necessary 
+  - do not ask sources from mldonkey-clients, they are supposed to automatically send sources after an QueryFileReq
+*)
+let client_queried_file c file =
+ 
+	client_has_file c file;
+	let module M = DonkeyProtoClient in
+		if	file_state file = FileDownloading &&
+			M.sourceexchange c.client_emule_proto > 0 &&
+			DonkeySources.need_new_sources file.file_sources &&
+			not (client_can_receive c)
 (*      (DonkeySources.number_of_sources file.file_sources) < !!max_sources_per_file *)
-      
-    then (* ask for more sources *)
-        let module E = M.EmuleRequestSources in
-        client_send c (M.EmuleRequestSourcesReq file.file_md4)
+		then (* ask for more sources *)
+			if !verbose_location then
+				lprintf "donkeyClient: Requesting sources from client %s that queried file %s\n"
+					(fullClientIdentifier c) (file_best_name file);
+			let module E = M.EmuleRequestSources in
+				client_send c (M.EmuleRequestSourcesReq file.file_md4)
+
 
 
 (*
   Do what's need to be done when client has file chunks we want :
   - register it in sources
-  - ask for sources if necessary
+  - ask for sources if necessary ... errr, where is this done?
 *)
 let client_is_useful c file chunks = 
   DonkeySources.set_request_result c.client_source file.file_sources File_chunk;
@@ -777,7 +794,7 @@
       end else 
       chunks in
     if is_useful_client file chunks then client_is_useful c file chunks
-    
+
 
 let send_pending_messages c sock =
   let module M = DonkeyProtoClient in
@@ -917,13 +934,12 @@
       update_emule_proto_from_tags c t.CI.tags;
       
       if !verbose_msg_clienttags then begin
-          lprintf "Message from client[%d] %s(%s)%s\n" (client_num c)
-          c.client_name (brand_to_string c.client_brand)
-          (match c.client_kind with
-              Indirect_address _ | Invalid_address _ -> ""
-            | Direct_address (ip,port) ->
-                Printf.sprintf  " [%s:%d]" (Ip.to_string ip) port;
-          );
+          lprintf "Message from client[%d] %s %s\n" (client_num c)
+          	(match c.client_kind with
+            	  Indirect_address _ | Invalid_address _ -> ""
+	            | Direct_address (ip,port) ->
+                Printf.sprintf  " [%s:%d]" (Ip.to_string ip) port;)
+			(fullClientIdentifier c);
           let xx = string_of_tags_list t.CI.tags in
           lprintf "tags: %s\n" xx;
         end
@@ -948,17 +964,20 @@
                 List.exists (fun r ->
                     r.DonkeySources.request_score > expected_score
                 ) s.DonkeySources.source_files then
-                sources := {
-                  E.src_ip = ip;
-                  E.src_port = port;
-                  E.src_server_ip = Ip.null;
-                  E.src_server_port = 0;
+						sources := {
+							E.src_ip = ip;
+							E.src_port = port;
+							E.src_server_ip = Ip.null;
+							E.src_server_port = 0;
 (* this is not very good, but what can we do ? we don't keep sources UIDs *)
-                  E.src_md4 = Md4.null;
-                } :: !sources
+							E.src_md4 = Md4.null;
+						} :: !sources
       ) file.file_sources;
       if !sources <> [] then        
-        client_send c (
+		if !verbose_location then
+			lprintf "donkeyClient: EmuleRequestSourcesReq: Sending %d Sources to %s for file %s\n"
+				(List.length !sources) (fullClientIdentifier c) (file_best_name file);
+		client_send c (
           M.EmuleRequestSourcesReplyReq {
             E.md4 = t;
             E.sources = Array.of_list !sources;
@@ -973,6 +992,7 @@
       *)
       let module Q = M.ViewFilesReply in
       begin
+		lprintf "Received ViewFilesReply\n";
         try
           let list = ref [] in
           List.iter (fun f ->
@@ -1086,8 +1106,8 @@
         end else *)
       CommonUploads.add_pending_slot (as_client c);
       if !verbose then begin
-          lprintf "(uploader %s: brand %s, couldn't get a slot)\n" 
-            c.client_name (brand_to_string c.client_brand);
+          lprintf "(uploader %s couldn't get a slot)\n" 
+            (fullClientIdentifier c);
         end;
 (*      end *)
   
@@ -1172,8 +1192,9 @@
 	    let file = find_file t.Q.md4 in	    
 	      received_client_bitmap c file t.Q.chunks
 	  with e ->
-	    lprintf "Exception %s in Query Chunks Reply\n"
+	    lprintf "Exception %s in Query Chunks Reply file-md4: %s\n  client was %s\n"
             (Printexc2.to_string e)
+            (Md4.to_string t.Q.md4) (fullClientIdentifier c)
 	end
   
   | M.QueryChunkMd4ReplyReq t ->
@@ -1344,6 +1365,7 @@
 (*
        lprintf "ASK VIEW FILES\n"; 
        *)
+      lprintf "Sending %d Files in ViewFilesReqReply\n" (List.length !published_files);
       client_send_files sock !published_files
   
   | M.QueryFileReq t ->
@@ -1356,14 +1378,16 @@
         
         (try client_wants_file c md4 with _ -> ());
       
-      
+      (* Can This be removed !? .. I think it's time to eliminate that one*)
       if md4 = Md4.null && c.client_brand = Brand_edonkey then  begin
           c.client_brand <- Brand_mldonkey1;
+          lprintf "donkeyClient: QueryFileReq: Client %s is brand mldonkey1 ... WOW !! someone riding an old horse queried file %s\n" (fullClientIdentifier c) (Md4.to_string md4);
           if Random.int 100 < 2 && !!send_warning_messages then
             client_send c (
               M.SayReq "[AUTOMATED WARNING] Please, Update Your MLdonkey client to version 2.5-16a");
         end;
       
+      
       begin try 	
           count_filerequest c;
           let file = find_file md4 in
@@ -1386,7 +1410,9 @@
               Q.md4 = file.file_md4;
               Q.name = published_filename
             });
-	  client_has_file c file;
+
+	  client_queried_file c file;
+
 	  (* Here's the correct place to check for emule_extension*)
 	  begin
             match t.M.QueryFile.emule_extension with
@@ -1398,6 +1424,7 @@
           DonkeySources.query_files c.client_source
         
         with Not_found -> 
+			lprintf "donkeyClient: QueryFileReq: Client %s queried unpublished file %s\n" (fullClientIdentifier c) (Md4.to_string md4);
             client_send c (
               M.NoSuchFileReq md4);
             
@@ -1425,9 +1452,10 @@
               lprintf "** Dropped %d sources for %s **\n" (List.length t.Q.sources) (file_best_name file);
               
 end else *)
-          if !verbose_location then begin
-              lprintf "Client: Received %d sources for %s\n" (Array.length t.Q.sources) (file_best_name file);
-            end;
+			if !verbose_location then
+				lprintf "donkeyClient: EmuleRequestSourcesReply: Received %d sources from %s for %s\n"
+					(Array.length t.Q.sources) (fullClientIdentifier c) (file_best_name file);
+
           Array.iter (fun s ->
               try
                 let addr = 
@@ -1464,6 +1492,9 @@
               lprintf "** Dropped %d sources for %s **\n" (List.length t.Q.sources) (file_best_name file);
               
             end else *)
+			if !verbose_location then
+				lprintf "donkeyClient: SourcesReq: Received %d sources from %s for %s\n"
+					(List.length t.Q.sources) (fullClientIdentifier c) (file_best_name file);
           List.iter (fun (ip1, port, ip2) ->
               if Ip.valid ip1 && ip_reachable ip1 then
                 let s = DonkeySources.find_source_by_uid (Direct_address (ip1, port))
@@ -1568,8 +1599,7 @@
     client_has_a_slot (as_client c) ->
       
       if !verbose then begin
-          lprintf "uploader %s(%s) ask for block\n" c.client_name
-            (brand_to_string c.client_brand); 
+          lprintf "uploader %s ask for block\n" (fullClientIdentifier c); 
         end;
       
       let module Q = M.QueryBloc in
@@ -1643,8 +1673,13 @@
       begin
         try
           let file = find_file t in
+			if !verbose_location then
+				lprintf "donkeyClient: NoSuchFileReq: from %s for file %s\n"
+					(fullClientIdentifier c) (file_best_name file);
+
           DonkeySources.set_request_result c.client_source 
             file.file_sources File_not_found;
+            
         with _ -> ()
       end
         
