I just started using your source (Spirited, not Felipes) and love how its using dot net 3.1 and async. I have the chat system working now, many more packets to go. Anyways I like your idea on this deadlock. So you are recommending that on each map(conquer map), that it has its own dedicated threads? If I were to put this into practice, I would have a thread pool for each map, when the packet comes in, it will have the map and send it to the correct thread pool? Not necessarily threads per map. Tasks per map. Tasks are like green threads (lightweight threads that can spin up more quickly with less overhead). Multiple tasks can run in a single operating system thread using a task scheduler for managing contexts and context switching. Anyways, summary being you can run more tasks more efficiently than running threads. You can also run multiple maps in a single task. Just some ideas. Appreciate the clarification! I'll see what I can do and provide details of my solution once solved.