Okay, let's start breaking this up into useful libraries