stronger default implementation