for v1, implemented on iOS only