the not so nice thing with this is that there is no compiler hint what the user needs to do (no abstract method)