Hi guys. If I tell you the selector is Dictionary >> #at:ifAbsentPut: what would you expect the second parameter to be? the value. So, one would do: Dictionary new at: #foo ifAbsentPut: 4 But if you see Dictionary >> at: key ifAbsentPut: aBlock "Return the value at the given key. If key is not included in the receiver store the result of evaluating aBlock as new value." ^ self at: key ifAbsent: [self at: key put: aBlock value] so it expects a Block. Ok, we are in Smalltalk, so implementing #value is enough. Well..the previous example works, but only because we have an ugly Object >> value that returns self. If I put instances of subclasses from ProtoObjects (proxies), that do not work anymore. So...my question is we do Dictionary at: #foo put: 4, why #at:ifAbsentPut: expects a block and not directly the value? in which case I need a block instead of the value object directly ? thanks -- Mariano http://marianopeck.wordpress.com