cleaned up provider so you can pass in arbitrary arguments