add cursor and client impl