rework things so we don't have to expose so many types