Completely redo provider type implementation, now married with the model (awesome!!)