of course it has to be abstract