refactoring, visitor pattern for steps