moving functionality into their own classes