refactor and add support for use, release, reserve-with-timeout