anchor.diff:  		}
   		return partialBean.bean;
   	}
  -	
  -	
  +
  +
   	private struct function resolveBeanCreate( string beanName, struct accumulator ) {
   		var bean = 0;
   		if ( structKeyExists( variables.beanInfo, beanName ) ) {
   			var info = variables.beanInfo[ beanName ];
   			if ( structKeyExists( info, 'cfc' ) ) {
   				var metaBean = cachable( beanName );
  +                var overrides = structKeyExists( info, 'overrides' ) ? info.overrides : { };
   				bean = metaBean.bean;
   				if ( metaBean.newObject ) {
   				    if ( structKeyExists( info.metadata, 'constructor' ) ) {
   					    var args = { };
   						for ( var arg in info.metadata.constructor ) {
  -							var argBean = resolveBeanCreate( arg, accumulator );
  -							// this throws a non-intuitive exception unless we step in...
  -							if ( structKeyExists( argBean, 'bean' ) ) {
  -							    args[ arg ] = argBean.bean;
  -                            } else if ( info.metadata.constructor[ arg ] ) {
  -								throw 'bean not found: #arg#; while resolving constructor arguments for #beanName#';
  -							}
  +                            var argBean = { };
  +                            // handle known required arguments
  +                            if ( info.metadata.constructor[ arg ] ) {
  +                                var beanMissing = true;
  +                                if ( structKeyExists( overrides, arg ) ) {
  +                                    args[ arg ] = overrides[ arg ];
  +                                    beanMissing = false;
  +                                } else if ( containsBean( arg ) ) {
  +                                    argBean = resolveBeanCreate( arg, accumulator );
  +                                    if ( structKeyExists( argBean, 'bean' ) ) {
  +                                        args[ arg ] = argBean.bean;
  +                                        beanMissing = false;
  +                                    }
  +                                }
  +                                if ( beanMissing ) {
  +								    throw 'bean not found: #arg#; while resolving constructor arguments for #beanName#';
  +                                }
  +                            } else {
  +                                if ( structKeyExists( overrides, arg ) ) {
  +                                    args[ arg ] = overrides[ arg ];
  +                                } else if ( containsBean( arg ) ) {
  +                                    // optional but present
  +							        argBean = resolveBeanCreate( arg, accumulator );
  +							        if ( structKeyExists( argBean, 'bean' ) ) {
  +							            args[ arg ] = argBean.bean;
  +							        }
  +                                } else {
  +                                    // optional but not present
  +                                }
  +                            }
   						}
   						var __ioc_newBean = evaluate( 'bean.init( argumentCollection = args )' );
   						// if the constructor returns anything, it becomes the bean
  
positive.code: ﻿/*
  	Copyright (c) 2010-2012, Sean Corfield
  
  	Licensed under the Apache License, Version 2.0 (the "License");
  	you may not use this file except in compliance with the License.
  
negative.code: 			sys.out.println( 'bean not found: #beanName#' );
  		}
  	}
  
  
  	private void function missingBean( string beanName, string resolvingBeanName = '' ) {
  		if ( variables.config.strict ) {
  			if ( len( resolvingBeanName ) ) {
  