Still not done. TODO: finish put, remove, Iterator