major refactor to use a step module