sperating concerns a little, adding classes to handle specific functionality