This motivates a design where state changes are achieved by loading a new document. Then the user can undo the change by using the back button, and save all state by placing a bookmark. The page number and magnification level are handled this way.
Scrolling is otherwise difficult to achieve in Java. The magnified view shows that scrolling is possible, but the magnified view also shows off many bugs in the current run-time environments :-).
The current design doesn't take advantage of this, instead preferring to save processed files (parsed DVI pages and decompressed, scaled, colorized PK characters) in global caches. This approach is starting to break down as Java runtime environments stop allowing sharing between applets on different pages, so it may be time to look again at letting the browser handle caching.