Fixed the multithreading issues with the run loop and am starting to implement an event based tick update. Whatever needs to update sends an eventObject to the eventQueue and on the next tick, the logic for that object is executed. Still needs a little tweaking but is more solid than before.