New {quote:ClassAds} have a compatibility version of this method, but it has several deficiencies. First, it doesn't print attributes from the chained ad. Second, it doesn't omit private attributes when necessary. It also doesn't encrypt them when appropriate. Third, it doesn't have the optional addition of the {quote:ServerTime} attribute. Fourth, it doesn't convert local IP addresses in attribute values to that of the open socket (using ConvertDefaultIPToSocketIP()). Fifth, it doesn't emulate AttrList::put(), which doesn't send the {quote:MyType} and {quote:TargetType} attributes after the other attributes. There is a standalone function that does this (putOldClassAdNoTypes()). Clarification: putOldClassAdNoTypes() doesn't send the {quote:MyType} or {quote:TargetType} after other attributes. Developer time: 1-2 days.