anchor.diff:  										<cfloop query="timers">
   											<tr class="nowrap">
   												<td align="right">#timers.label#</td>
  -												<td align="right">#formatUnit( arguments.custom.unit, timers.time * 1000000 )#</td>
  +												<td align="right">#unitFormat( arguments.custom.unit, timers.time * 1000000 )#</td>
   												<td align="right">#timers.template#</td>
   											</tr>
   										</cfloop>
  
positive.code: 		</tr>
  	</cffunction>
  
   
  	<cffunction name="formatUnit" output="no" returntype="string">
  		<cfargument name="unit" type="string" required="yes" />
  		<cfargument name="time" type="numeric" required="yes" />
  		<cfif arguments.time GTE 100000000>
  			<!--- 1000ms --->
  			<cfreturn int(arguments.time/1000000)&" ms" />
  		<cfelseif arguments.time GTE 10000000>
  			<!--- 100ms --->
  			<cfreturn (int(arguments.time/100000)/10)&" ms" />
  		<cfelseif arguments.time GTE 1000000>
  			<!--- 10ms --->
  			<cfreturn (int(arguments.time/10000)/100)&" ms" />
  		<cfelse>
  			<!--- 0ms --->
  			<cfreturn (int(arguments.time/1000)/1000)&" ms" />
  		</cfif>
  		<cfreturn (arguments.time/1000000)&" ms" />
  	</cffunction>
  
  
  	<cfscript>
  
  		function byteFormat( size ) {
  
  			var values = [ [ 1099511627776, 'TB' ], [ 1073741824, 'GB' ], [ 1048576, 'MB' ], [ 1024, 'KB' ] ];
  
  			for ( var i in values ) {
  
  				if ( size >= i[ 1 ] )
  					return numberFormat( size / i[ 1 ], '9.99' ) & i[ 2 ];
  			}
  
  			return size & 'B';
  		}
  	</cfscript>
  
  
negative.code: 
  	<cfscript>
  		fields=array(
  			  group("Execution Time","Execution times for templates, includes, modules, custom tags, and component method calls. Template execution times over this minimum highlight time appear in red.",3)
  			, field("Minimal Execution Time","minimal","0",true,{_appendix:"microseconds",_bottom:"Execution times for templates, includes, modules, custom tags, and component method calls. Outputs only templates taking longer than the time (in microseconds) defined above."},"text40")
  			, field("Highlight","highlight","250000",true,{_appendix:"microseconds",_bottom:"Highlight templates taking longer than the following (in microseconds) in red."},"text50")
  			, group("Custom Debugging Output","Define what is outputted",3)
  			, field("Scope Variables","scopes","Enabled",false,"Enable Scope reporting","checkbox","Enabled")
  			, field("General Debug Information ","general","Enabled",false,
  				"Select this option to show general information about this request. General items are Railo Version, Template, Time Stamp, User Locale, User Agent, User IP, and Host Name. ",
  				"checkbox","Enabled")
  		);
  		
  		string function getLabel(){
  			return "Modern";
  		}
  
  		string function getDescription(){
  			return "The new style debug template";
  		}
  		
  		string function getid(){
  			return "railo-modern";
  		}
  		
  		void function onBeforeUpdate(struct custom){		
  			throwWhenNotNumeric(custom,"minimal");
  			throwWhenNotNumeric(custom,"highlight");
  		}
  		
  		private void function throwWhenEmpty(struct custom, string name){
  			if(!structKeyExists(custom,name) or len(trim(custom[name])) EQ 0)
  			throw "value for ["&name&"] is not defined";
  		}
  
  		private void function throwWhenNotNumeric(struct custom, string name){
  			throwWhenEmpty(custom,name);
  			if(!isNumeric(trim(custom[name])))
  			throw "value for ["&name&"] must be numeric";
  		}
  		
  		private function isColumnEmpty(query qry,string columnName){
  			if(!QueryColumnExists(qry,columnName)) return true;
  			return !len(arrayToList(queryColumnData(qry,columnName),""));
  		}
  
  		private function isSectionOpen( string name ) {
  
  