Big interface cleanup.
Rethinking dynamic vs static polymorphism vs no polymorphism.