split OOP out to V3