First Version. Todo: DI