Fixing add and update functionality

If i had 1 method for add *and* update, then you could REPLACE values
with the add function and ADD values with the update function which
conflicts with its true purpose. Ergo made them exclusive now even
though interally both of them call the same thing, they have a set of
sanity checks in place

Updating tests

TODO
  comments
  clean up tests
  add more tests