shuffle things around to make multiple provider support easier