two api impls