a little more virtual refactoring