could we not require the client to specify this? seems like a leaky abstraction