Not sure if Jim will see this due to the time lapse, but I have also see the same issue. I believe I've narrowed it down to a race condition that occurs between the time the tcpListener.EndAcceptTcpClient completed (the first time, and probably due to instantiation of the associated objects, and when the method LogonUser exits. That is, the first time, apparently the LogonUser exits before EndAcceptTcpClient has time to assigne the WindowsIdentity to Id. A quick solution is to put a boolean set a boolean flag to false at the beginning of the LogonUser that is set after the Id is set and loop at the end of the method until the flag is set trur. However, this not a good solution. I think the correct solution is to use a WaitEvent, but I havn't quick got that to work.