Rethink the API a bit