Revert "Revert "OOP2 project""

This reverts commit e83a541d8684e94d74d4285ac1106c5f75e8c8d1.
Revert "OOP2 project"

This reverts commit 961bb92e00443e5eb42752f40071b9c5fdd7d163.