New {quote:ClassAds} provide an iterator via the begin() and end() methods to traverse all of the attributes in the ad. The iterator doesn't handle any chained ad. One callsite is in Quill's jobqueuecollection.cpp. This site may require handling of chained ads. One difference between old {quote:ClassAds}' NextExpr() and new {quote:ClassAds}' iterator is that the former returns an {quote:ExprTree} of the assignment operator (including attribute name and value) while the latter returns an {quote:ExprTree} of just the attribute value. This shouldn't be a problem, as all of the callsites immediately use the {quote:ExprTree} to either copy into a new ad or unparse into a string. Developer time: half day to examine jobqueuecollection.cpp, plus 1-2 weeks student time to update callsites