Clean up the API and add Buffering