added some classes to seperate some functionalities