I wrote cull: anArg "Execute the receiver with one or zero argument. [ 1 + 2 ] cull: 5 returns 3 [ :x | 1+ 2 + x] cull: 5 returns 8 " ^numArgs = 0 ifTrue: [self value] ifFalse: [self value: anArg] cull: firstArg cull: secondArg "Execute the receiver with two or less arguments. [ 1 + 2 ] cull: 5 cull: 6 returns 3 [ :x | 1+ 2 + x] cull: 5 returns 8 [ :x | 1+ 2 + x] cull: 5 cull: 3 returns 8 [ :x : y | 1+ y + x] cull: 5 cull: 2 returns 8 " ^numArgs < 2 ifTrue: [self cull: firstArg] ifFalse: [self value: firstArg value: secondArg] cull: firstArg cull: secondArg cull: thirdArg "Execute the receiver with three or less arguments. Check cull:cull: for examples" ^numArgs < 3 ifTrue: [self cull: firstArg cull: secondArg] ifFalse: [self value: firstArg value: secondArg value: thirdArg] cull: firstArg cull: secondArg cull: thirdArg cull: fourthArg "Execute the receiver with four or less arguments. Check cull:cull: for examples" ^numArgs < 4 ifTrue: [self cull: firstArg cull: secondArg cull: thirdArg] ifFalse: [self value: firstArg value: secondArg value: thirdArg value: fourthArg] Will add a bug entry Stef