def read(aSource,&aBlock)
			default_values.each do |k,v|
				done = false
				if block_given? && ((newv = yield(k,v,aSource && aSource[k])) != nil)
					self[k] = newv
					done = true
				end
				copy_item(aSource,k) if !done && aSource && !aSource[k].nil?
			end
			self
		end
def read(aSource,&aBlock)
			default_values.each do |k,v|
				done = false
				if block_given? && ((newv = yield(k,v,aSource && aSource[k])) != nil)
					self[k] = newv
					done = true
				end
				copy_item(aSource,k) if !done && aSource && !aSource[k].nil?
			end
			self
		end
aBlock allows values to be filtered based on key,default and new values