further refactoring, fully splitted presentation layer from data layer