Still not done. TODO: Iterator, toString, getLengths