I compared doesNotUnderstand: vs cannotInterpret: versions of proxies. DNUProxy>>doesNotUnderstand: aMessage lastMessage := aMessage. ^'from DNU proxy' CannotInterpretProxy>>cannotInterpret: aMessage lastMessage := aMessage. ^'from cannot interpret proxy' And DNU proxy works 2 times faster then #cannotInterpret proxy. [proxy someMessage] benchFor: 2 seconds. DNU: "a BenchmarkResult(22,377,669 iterations in 2 seconds. 11,188,835 per second)" CannotInterpet: "a BenchmarkResult(13,148,735 iterations in 2 seconds 2 milliseconds. 6,567,800 per second) Also DNU version is much more easy to explain. So why Ghost uses #cannotInterpret for proxies? (after reading Ghost paper I can't understand this). Naked proxy can be easily done by setting superclass to nil: ProtoObject subclass: #DNUProxy instanceVariableNames: '' classVariableNames: '' package: 'DNUProxy'. DNUProxy superclass: nil