Stopped using interface, now uses abstract methods