cleaned up ugly abstract method sig