moving some data behavior out of general cursor implementation