Doh! I just realized there's a bug inherent in this set of classes. If you take an element of a list and add it to a different list (or the same list) you will break the original list. The pointers will no longer be correct.
I'm going to have to add some checks to deal with this. Otherwise it could easily lead to engine crashes.