moved implementation out of base package