heavily redesign app. Needs some refactoring