1) SHA-1 was chosen by the GDF, MD5 was not. SHA-1 is more secure, although a little (like 20%) slower. I don't see any point in changing that now.
2) Gnucleus has AFAIK not implemented hashes or checksums. If you could call any client "Daddy Gnutella" it would be the old Gnutella 0.56 client. Of the clients still being developed, LimeWire is the oldest ;-).
3) There's a reason why LimeWire doesn't allow you to reduce the bandwidth allocated for upstream any further. You can set it in your limewire.props file, however.
4) The implementation of queueing has been queued, see
http://www.gnutellaforums.com/showth...&threadid=7199
5) Sending HTTP requests and returning 404s usually doesn't cause much traffic. One of those clients resending requests is Bearshare, but I think, they wanted to change that.
6) I don't quite get the scripting point. Could you give me any further explanation how that should work?
7) You usually can control the CPU utilization of an application at OS - level. Unix systems can allocate a priority for any process for example. I think Windows XP can do that, too. Java does not really support that, and I don't think they will in the forseeable future.
8) The GUI can become slower, if you have minimized the window for a longer time. That's because your OS moves the data of the GUI in different parts of your memory, when it is not accessed for some time. The "kill upload issue" is a fault of Javas Swing object, I think.
9) You could try interpreting the downloads.dat file, that's where the information, which parts of the file already have been written, is saved. You could also edit the source code, I think the changes you want to make would consider the IncompleteFileManager.