oops, making non-abstract functions abstract is not nice