seperate the controller into several controllers for clear function module