add OOP part