architecture changed to a little bit more SOLID