Well i found from school that using .net remoting can do the samething but i want the raw power of sockets. knowing who is connect when/where/there IP, i assume you can write this into all of your objects and do the same with remoting, but why re-invent the wheel ? and for some reason even though i spent alot of time with remoting in school i seem to beable to use Asyncronous Sockets alot easier, they just make sense to me. And i have alot of power on how i recieve the objects, for example..in my recieving callback i have a stream write the recieved bytes to a file so it doesnt hog up my memory while it waits to download all of the object. This saved alot of memory because sending files encapslated in a class are very large, my socket recieves every connection and give it a unique output and saves the reieved bytes to that output. The unqiue output dir is saved in my state object in my recieve callback and i just reuse that same state object the next time around. Once the object is fully downloaded i move on and decrypt the saved bytes, decompress / reserialize, and the other user recieved it fine. Deep down inside the remoting calls uses sockets as well...although the remoting classes are more user friendly and by all means not dumbed down at all. (it also generates the sockets for you on the fly...which is awesome) Jesse M. The Code Project Is Your Friend...