anchor.diff:  		catch(e) {
   			var meta = dumpStruct(structKeyExists(attrib,'var') ? attrib.var : nullValue(), attrib.top, attrib.show, attrib.hide, attrib.keys, attrib.metaInfo, attrib.showUDFs);
   		}
  +		
  +
  +		if ( attrib.async && ( attrib.output NEQ "browser" ) ) {
  +
  +			thread name="dump-#createUUID()#" attrib="#attrib#" meta="#meta#" context="#context#" caller="#arguments.caller#" {
  +
  +				doOutput( attrib, meta, context, caller );
  +			}
  +		} else {
  +
  +			doOutput( attrib, meta, context, arguments.caller );
  +		}
  +
  +
  +		if( attrib.abort )
  +			abort;
  +
  +		return true;
  +	}
  +
  +
  +	function doOutput( attrib, meta, context, caller  ) {
  +
   		var dumpID = createId();
   
  -		// create output
  -		var hasReference = structKeyExists(meta,'hasReference') && meta.hasReference;
  -		var result = this[attrib.format](meta, context, attrib.expand, attrib.output, hasReference, 0, dumpID);
  -
  -		// output
  -		if(attrib.output EQ "browser") {
  +		var hasReference = structKeyExists( arguments.meta,'hasReference' ) && arguments.meta.hasReference;
  +		var result = this[ arguments.attrib.format ]( arguments.meta, arguments.context, arguments.attrib.expand, arguments.attrib.output, hasReference, 0, dumpID );
  +
  +		// sleep( 5000 );	// simulate long process to test async=true
  +		
  +		if (arguments.attrib.output EQ "browser") {
  +
   			echo(variables.NEWLINE & '<!-- ==start== dump #now()# format: #attrib.format# -->' & variables.NEWLINE);
  -			echo('<div id="#dumpID#">#result#</div>' & variables.NEWLINE);
  +			echo('<div id="#dumpID#" class="-railo-dump">#result#</div>' & variables.NEWLINE);
   			echo('<!-- ==stop== dump -->' & variables.NEWLINE);
   		}
  -		else if(attrib.output EQ "console") {
  +		else if (arguments.attrib.output EQ "console") {
   			systemOutput(result);
   		}
   		else {
  -			file action="write" addnewline="yes" file="#attrib.output#" output="#result#";
  -		}
  -
  -		// abort
  -		if(attrib.abort) abort;
  -
  -		return true;
  -	}
  +			file action="write" addnewline="yes" file="#arguments.attrib.output#" output="#result#";
  +		}
  +	}
  +
   
   	/* ==================================================================================================
   	   html                                                                                             =
  
positive.code: 				var comment = structKeyExists(arguments.meta,'comment') ? "<br />" & replace(HTMLEditFormat(arguments.meta.comment),chr(10),' <br>','all') : '';
  
  				rtn&=('<tr>');
  				rtn&=('<td class="#doCSSColors(arguments.cssColors,arguments.meta.highLightColor)#" onclick="dumpOC(''#id#'');" colspan="#columnCount#">');
  				rtn&=('<span>#arguments.meta.title##metaID#</span>');
  				rtn&=(comment & '</td>');
  				rtn&=('</tr>');
  
negative.code: 				var comment = structKeyExists(arguments.meta,'comment') ? "<br />" & replace(HTMLEditFormat(arguments.meta.comment),chr(10),' <br>','all') : '';
  
  				rtn&=('<tr>');
  				rtn&=('<td onclick="dumpOC(''#id#'');" colspan="#columnCount#" style="background:#h1Color#; border-color:#borderColor#; color:white;" style="cursor:pointer;">');
  				rtn&=('<span>#arguments.meta.title##metaID#</span>');
  				rtn&=(comment & '</td>');
  				rtn&=('</tr>');
  