WIP: Use abstract base classes