refactor defaults into methods to faciliate subclassing