Hi Here is my current situation: When pressing a button, i'm creating a random positionned drone with random id. Then i give this drone to my drone manager which has a function : Code (CSharp): public void UpdtateFleet(Drone_Dev drone) This function will do stuff (is it a new drone, or is it an update of the position of a drone that i already know (because of the id)). Aniway. At the end of this function i'm triggering an event Code (CSharp): public delegate void OnFleetChangeDelegate(Drone_Dev newDrone); public event OnFleetChangeDelegate OnFleetChange; Then on another script i'm listening to this event, which allow me to deal with the drone gameobject creation / position update. This is working perfectly fine in this scenario. 2nd scenario: i'm not creating random value for drone creation by pressing a button, but by receiving those value through network. I'm receiving a network message, that i'm reading to decide what to do, and if it's about a drone i'm calling the same function UpdtateFleet(Drone_Dev drone) as i was in the first scenario. BUT now at the end of this story (networkmanager -> DroneManager -> event -> creation of gameobject) i run into some troubles because i'm not anymore on the main thread. As i'm not very familiar with threads / networks i'm a bit lost about what to do to fix this. How can i "return" to the main thread after firing my event ? Is there something wrong about my game logic ? How am i suppose to handle things ?