Oberon-2 is a refined version of Oberon developed at ETH. It introduces type-bound procedures,
read-only export of data, and open array variables. The For statement is reintroduced. This paper
concentrates on type-bound procedures which make Oberon-2 an object-oriented language with
dynamically-bound messages and strong type checking at compile time. Messages can also be sent as data
packets (extensible records) that are passed to a handler procedure and are interpreted at run time. This is
as flexible as the Smalltalk message dispatching mechanism. Objects carry type information at run time
which allows dynamic binding of messages, run time type tests, and the implementation of persistent
objects. Oberon-2 is available on various machines.