divide functionalities up