One thing I’ve been overlooking so far with respect to DHTs and so forth is that it may be difficult to solve the problem of heterogeneity. When a peer joins the network, its finger table is initialised to contain the addresses of m other nodes, where m is the number of bits in the identifier or key. But what happens when node A cannot communicate directly with node B because they are on completely different networks? Perhaps node A is a Bluetooth device and node B is on a TCP/IP network. As long as some physical path exists between the two nodes (via a multi-interfaced device or whatnot) the situation is not completely hopeless. My DHT extension must incorporate some notion of proxying directly. That is, proxying must be inherent to the protocol rather than an optional extra added at a later time. The heterogeneity issue is a large one, and one that I cannot afford to ignore from the outset.