added most of part 2 methods. working on remove()