anchor.diff:  		var section = request.section;
   		var item = request.item;
   		var subsystembase = '';
  -		
  +
   		// has view been overridden?
   		if ( structKeyExists( request._fw1, 'overrideViewAction' ) ) {
   			subsystem = getSubsystem( request._fw1.overrideViewAction );
  
positive.code: 		return customizeViewOrLayoutPath( pathInfo, type, '#pathInfo.base##type#s/#pathInfo.path#.cfm' );
  
  	}
  	
  	private struct function processRouteMatch( string route, string target, string path ) {
  		// TODO: could cache preprocessed versions of route / target / etc
  		var routeMatch = { matched = false, redirect = false, method = '' };
  		// if target has numeric prefix, strip it and set redirect:
  		var prefix = listFirst( target, ':' );
  		if ( isNumeric( prefix ) ) {
  			routeMatch.redirect = true;
  			routeMatch.statusCode = prefix;
  			target = listRest( target, ':' );
  		}
  		// special routes begin with $METHOD, * is also a wildcard
  		var routeLen = len( route );
  		if ( routeLen ) {
  			if ( left( route, 1 ) == '$' ) {
  				// check HTTP method
  				routeMatch.method = listFirst( route, '*/' );
  				var methodLen = len( routeMatch.method );
  				if ( routeLen == methodLen ) {
  					route = '*';
  				} else {
  					route = right( route, routeLen - methodLen );
  				}
  			}
  			if ( route == '*' ) {
  				route = '/';
  			} else if ( right( route, 1 ) != '/' && right( route, 1 ) != '$' ) {
  				// only add the closing backslash if last position is not already a "/" or a "$" to respect regex end of string
  				route &= '/';
  			}
  		} else {
  			route = '/';
  		}
  		if ( !len( target ) || right( target, 1) != '/' ) target &= '/';
  		// walk for self defined (regex) and :var -  replace :var with ([^/]*) in route and back reference in target:
  		var n = 1;
  		var placeholders = rematch( '(:[^/]+)|(\([^\)]+)', route );
  		for ( var placeholder in placeholders ) {
  			if ( left( placeholder, 1 ) == ':') {
  				route = replace( route, placeholder, '([^/]*)' );
  				target = replace( target, placeholder, chr(92) & n );
  			}
  			++n;
  		}
  		// add trailing match/back reference: if last character is not "$" to respect regex end of string
  		if (right( route, 1 ) != '$')
  			route &= '(.*)';
  		target &= chr(92) & n;
  		// end of preprocessing section
  		if ( !len( path ) || right( path, 1) != '/' ) path &= '/';
  		var matched = len( routeMatch.method ) ? ( '$' & request._fw1.cgiRequestMethod == routeMatch.method ) : true;
  		if ( matched && reFind( route, path ) ) {
  			routeMatch.matched = true;
  			routeMatch.pattern = route;
  			routeMatch.target = target;
  			routeMatch.path = path;
  		}
  		return routeMatch;
  	}
  
  	private string function processRoutes( string path ) {
  		for ( var routePack in variables.framework.routes ) {
  			for ( var route in routePack ) {
  				if ( route != 'hint' ) {
  					var routeMatch = processRouteMatch( route, routePack[ route ], path );
  					if ( routeMatch.matched ) {
  						path = rereplace( routeMatch.path, routeMatch.pattern, routeMatch.target );
  						if ( routeMatch.redirect ) {
  							location( path, false, routeMatch.statusCode ); 
  						} else {
  							request._fw1.route = route;
  							return path;
  						}
  					}
  				}
  			}
  		}
  		return path;
  	}
  
  	private void function raiseException( string type, string message, string detail ) {
  		throw( type = type, message = message, detail = detail );
  	}
  	
  	private void function restoreFlashContext() {
  		if ( variables.framework.maxNumContextsPreserved > 1 ) {
  			if ( !structKeyExists( URL, variables.framework.preserveKeyURLKey ) ) {
  
negative.code: 		} else {
  			baseQueryString = queryString;
  		}
  
  		var targetURL = buildURL( action, path, baseQueryString );
  		if ( preserveKey != '' && variables.framework.maxNumContextsPreserved > 1 ) {
  			if ( find( '?', targetURL ) ) {
  