Lots of refactoring, added untested implementations for item adding