fixed up some things and abstracted user as a service