Implemented a nice and clean class decomposition