Release 2.0 introduces full source-level debugging of optimised code, adaptive optimisation to shorten compile pauses, lightweight threads within Self, support for dynamically linking foreign functions, changing programs within Self and the ability to run the experimental Self graphical browser under OpenWindows. Designed for expressive power and malleability, Self combines a pure, prototype-based object model with uniform access to state and behaviour. Unlike other languages, Self allows objects to inherit state and to change their patterns of inheritance dynamically. Self's customising compiler can generate very efficient code compared to other dynamically-typed object-oriented languages.