add sync and async interface