abstract a lot of stuff.