add cursor implementation