implement functions except remove()