more polymorphism, cleanup