Refactor, large update