Split the main workflow into several method calls

- Makes it easier to extend the default behavior through inheritence.