mixins gone, simplified implementation, all tests passing