refactor to more cohesive methods