refactor to avoid naming conflicts