make required methods abstract, improve naming