refactored it more, finished event system, completed server side throw protection