In object-oriented programs, the possibility of having an alias to an object's mutable state is a known source of bugs making programs difficult to test and maintain. We propose an access mode system for limiting the effects of aliasing by associating, with each reference, an access right to the object to which the reference refer. Mutator methods may not be invoked on read references, and only read references to the state can be obtained via any method invoked on a read reference. This enables exporting read references to objects without risking the objects being modified. The system realises access modes by annotations on variables, methods, method returns and parameters to methods. It is completely statically checkable without any need for run-time representation of modes and does not impose any run-time overhead.