PositionIterator should be re-written using Position PositionIterator is a large chunk of mostly copied code from Position. I think with a little work, PositionIterator could be re-written using Position objects. For example: bool PositionIterator::isCandidate() const bool Position::isCandidate() const void PositionIterator::increment() Position Position::next(PositionMoveType moveType) const are basically just copies of one another.