bug fix : an iterator is not valid after the element was erased
clean up iterators/find + use std::list instead of std::vector when erase(i) is a common action
clean up iterators + add assert()s
use iterators (maybe these vectors can be changed to lists)