anchor.diff:  		var item = getItem( action );
   		var tuple = { };
   
  -		if ( structKeyExists( request, "serviceExecutionComplete" ) ) {
  -			raiseException( type="FW1.serviceExecutionComplete", message="Service '#action#' may not be added at this point.",
  -				detail="The service execution phase is complete. Services may not be added by end*() or after() controller methods." );
  +		if ( structKeyExists( request._fw1, 'serviceExecutionComplete' ) ) {
  +			raiseException( type='FW1.serviceExecutionComplete', message="Service '#action#' may not be added at this point.",
  +				detail='The service execution phase is complete. Services may not be added by end*() or after() controller methods.' );
   		}
   
   		tuple.service = getService(section=section, subsystem=subsystem);
  +        tuple.subsystem = subsystem;
  +        tuple.section = section;
   		tuple.item = item;
   		tuple.key = key;
   		tuple.args = args;
   		tuple.enforceExistence = enforceExistence;
   
  -		if ( structKeyExists( tuple, "service" ) && isObject( tuple.service ) ) {
  -			arrayAppend( request.services, tuple );
  +		if ( structKeyExists( tuple, 'service' ) && isObject( tuple.service ) ) {
  +            frameworkTrace( 'queuing service', subsystem, section, item );
  +			arrayAppend( request._fw1.services, tuple );
   		} else if ( enforceExistence ) {
  -			raiseException( type="FW1.serviceCfcNotFound", message="Service '#action#' does not exist.",
  +			raiseException( type='FW1.serviceCfcNotFound', message="Service '#action#' does not exist.",
   				detail="To have the execution of this service be conditional based upon its existence, pass in a third parameter of 'false'." );
   		}
   	}
  
positive.code: 		var once = { };
  		var n = 0;
  
  		request.controllerExecutionStarted = true;
  		try {
  			if ( structKeyExists( request, 'controllers' ) ) {
  				n = arrayLen( request.controllers );
  				for ( i = 1; i <= n; i = i + 1 ) {
  					tuple = request.controllers[ i ];
  					// run before once per controller:
  					if ( !structKeyExists( once, tuple.key ) ) {
  						once[ tuple.key ] = i;
  						doController( tuple.controller, 'before' );
  						if ( structKeyExists( request._fw1, "abortController" ) ) abortController();
  					}
  					doController( tuple.controller, 'start' & tuple.item );
  					if ( structKeyExists( request._fw1, "abortController" ) ) abortController();
  					doController( tuple.controller, tuple.item );
  					if ( structKeyExists( request._fw1, "abortController" ) ) abortController();
  				}
  			}
  			n = arrayLen( request.services );
  			for ( i = 1; i <= n; i = i + 1 ) {
  				tuple = request.services[i];
  				if ( tuple.key == '' ) {
  					// throw the result away:
  					doService( tuple.service, tuple.item, tuple.args, tuple.enforceExistence );
  					if ( structKeyExists( request._fw1, "abortController" ) ) abortController();
  				} else {
  					_data_fw1 = doService( tuple.service, tuple.item, tuple.args, tuple.enforceExistence );
  					if ( structKeyExists( request._fw1, "abortController" ) ) abortController();
  					if ( isDefined('_data_fw1') ) {
  						request.context[ tuple.key ] = _data_fw1;
  					}
  				}
  			}
  			request.serviceExecutionComplete = true;
  			if ( structKeyExists( request, 'controllers' ) ) {
  				n = arrayLen( request.controllers );
  				for ( i = n; i >= 1; i = i - 1 ) {
  					tuple = request.controllers[ i ];
  					doController( tuple.controller, 'end' & tuple.item );
  					if ( structKeyExists( request._fw1, "abortController" ) ) abortController();
  					if ( once[ tuple.key ] eq i ) {
  						doController( tuple.controller, 'after' );
  						if ( structKeyExists( request._fw1, "abortController" ) ) abortController();
  					}
  				}
  			}
  		} catch ( FW1.AbortControllerException e ) {
  			request.serviceExecutionComplete = true;
  		}
  		request.controllerExecutionComplete = true;
  
  		buildViewAndLayoutQueue();
  
  		setupView();
  
  		if ( structKeyExists(request, 'view') ) {
  			out = internalView( request.view );
  		} else {
  			out = onMissingView( request.context );
  		}
  		for ( i = 1; i <= arrayLen(request.layouts); i = i + 1 ) {
  			if ( structKeyExists(request, 'layout') && !request.layout ) {
  				break;
  			}
  			out = internalLayout( request.layouts[i], out );
  		}
  		writeOutput( out );
  		setupResponseWrapper();
  	}
  
  	/*
  	 * it is better to set up your request configuration in
  
negative.code: 
  	}
  
  	private void function failure( any exception, string event, boolean indirect = false, boolean early = false ) {
  		var h = indirect ? 3 : 1;
  		if ( structKeyExists(exception, 'rootCause') ) {
  			exception = exception.rootCause;
  		}
  		getPageContext().getResponse().setStatus( 500 );
  		if ( arguments.early ) {
  		    writeOutput( '<h1>Exception occured before FW/1 was initialized</h1>');
  		} else {
  			writeOutput( '<h#h#>' & ( indirect ? 'Original exception ' : 'Exception' ) & ' in #event#</h#h#>' );
  			if ( structKeyExists( request, 'failedAction' ) ) {
  				writeOutput( '<p>The action #request.failedAction# failed.</p>' );
  			}
  			writeOutput( '<h#1+h#>#exception.message#</h#1+h#>' );
  		}
  		
  		writeOutput( '<p>#exception.detail# (#exception.type#)</p>' );
  		dumpException(exception);
  
  	}
  