In case it helps anyone in the future, here is the "poor man's" browser I hacked together to find all Magritte changes that needed to be rescued from an image where those changes got out-of-sync so I couldn't use Iceberg: nodes := EpFileLogNode fromAllLogsIn: EpMonitor current sessionStore baseLocator. relevantNodes := nodes reject: [ :n | (n globalName endsWith: 'g3') or: [ n globalName endsWith: 'ng' ] ]. relevantNodes do: [ :node | node populateReferencedNodesWith: relevantNodes ]. entries := relevantNodes flatCollect: [ :n | n log entries ]. filter := EpAndFilter withAll: { EpImpactCodeChangeFilter new environment: self class environment; yourself. EpPluggableFilter new condition: [ :e | e content isCodeChange and: [ e content affectedPackageName beginsWith: 'Magritte' ] ]. EpPluggableFilter noTriggerFilter }. filteredEntries := entries select: [ :e | filter accepts: e ]. filteredEntries sort: [ :a :b | (a tagAt: #time) > (b tagAt: #time) ]. groups := filteredEntries groupedBy: [ :e | (e content respondsTo: #methodAffected) ifFalse: [ '?' ] ifTrue: [ e content methodAffected ] ]. events := groups collect: [ :col | col first content ] as: OrderedCollection. events collect: [ :e | "{ e." DiffModel new showOptions: true; leftText: (e accept: EpOldStateVisitor new); rightText: (e accept: EpNewStateVisitor new); contextClass: e class; buildWithSpec "}" ]. ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html