A bunch of updates to try and straighten out the modeling and api