Refactoring + Design fixes