implemented all methods except delete