default implementation