Splitted the class into several new ones; added more functionalities.