In this chapter, we developed an instant-messaging application using Remoting and showed how it could be modified into a peer-to-peer system with a central lookup service. However, the current version of the Talk .NET system still suffers from some notable shortcomings, which will become particularly apparent under high user loads. If different users attempt to register, unregister, or send messages at the same time, the user collection may be updated incorrectly, and information could be lost. To guard against these problems, which are almost impossible to replicate under modest loads, you'll need to add multithreading, as described in the next chapter.