Additionally, it would be nice if also Attributes.setStartTag() would not use an iterator:

void setStartTag(final StartTag startTag) {
    // this just preloads the startTag cache in each Attribute so we don't have to go looking for it if it is requested.
    for (int i = attributeList.size(); i-- != 0; ) attributeList.get(i).startTag=startTag;

A lot of iterators generated by the previous code are showing up in our heap dumps...