Get rid of all introduced smells and to implement a cleaner, better abstracted architecture.