Lots of refactoring and work :)