Hi. I made a little investigation.. The changes file condensing works fine. Except that there something wrong with destroying source pointers of not-installed methods. After commenting a following line: " CompiledMethod allInstancesDo: [:e | e isInstalled ifFalse: [e destroySourcePointer]]. " It were able to run to an end, and by running this check: | empty | empty := Set new. Smalltalk allClassesAndTraitsDo: [:classOrTrait | empty addAll: ( classOrTrait methodDict select: [:m | m sourcePointer =0 ]) ]. empty isEmpty -->> prints true which means there is no installed methods with sourcePointer = 0 (and hence with no source code) after condensing the changes. But what makes me really suspicious is following: CompiledMethod allInstances size 55797 (CompiledMethod allInstances reject: #isInstalled) size 12586 it looks like #isInstalled is buggy, or otherwise indicating that there is problem with image, which keeps so many non-installed methods hanging around. I would simply put a following at the beginning of #condenseChanges: (CompiledMethod allInstances reject: #isInstalled) size > 0 ifTrue: [ self error: 'first, get rid of any uninstalled methods' ]. So, then you would not need to use #destroySourcePointer :) Here an alternative version of #destroySourcePointer. But it doesn't makes any big difference. destroySourcePointer "We can't change the trailer of existing method, since it could have completely different format. Therefore we need to generate a copy with new trailer, and then #become it" | copy | copy := self copyWithTrailerBytes: CompiledMethodTrailer empty. self becomeForward: copy. ^ copy P.S. runned it on 1.1-11343-UNSTABLE -- Best regards, Igor Stasenko AKA sig.