some refactoring, plus implemented get() and remove()
finished test suite