anchor.diff:  	* correspond (via name) to properties in the entity.  See convenience function 'populate()'
   	*
   	**/
  -	public any function load( required any ID, boolean lazy = false ){
  +	public any function load( required any ID, boolean lazy = false, string parentTable = getParentTable() ){
   		var LOCAL = {};
   		var props = variables.meta.properties;
  +
  +		if( isSimpleValue( ID ) ){
  +			var cachedObject = cacheGet( '#getTable()#-#ID#' );
  +			writeLog('loading #getTable()#-#ID#, do we already have it? #yesNoFormat(!isNull( cachedObject ))#');
  +			if( !isNull( cachedObject ) ){
  +				// writeDump(cachedObject);abort;
  +				// this = cachedObject ;
  +				// return this;
  +				// this = cachedObject;
  +				for( prop in cachedObject ){
  +					variables[ prop ] = this[ prop ] = cachedObject[ prop ];
  +				}
  +				return this;
  +			}
  +		}
   
   		if ( isStruct( arguments.ID ) || isArray( arguments.ID ) ){
   			// If the ID field was part of the struct, load the record first. This allows updating vs inserting
  
positive.code: 		}else{
  			setTable( arguments.table );
  		}
  		// For development use only, will drop and recreate the table in the database
  		// to give you a clean slate.
  		if( variables.dropcreate ){
  
negative.code: 					LOCAL.columnName = structCount( LOCAL.columnName ) && structKeyExists( LOCAL.columnName.owner, 'column' ) ? LOCAL.columnName.owner.column : queryArguments[ i ];
  
  					recordSQL &= " AND #LOCAL.columnName# = #getDao().queryParam(value="#arguments.missingMethodArguments[ i ]#")#";
  
  					//Setup defaults
  					LOCAL.functionName = "set" & queryArguments[ i ];
  
  