#22 Seperated out the components, so they are testable