There is an impedance mismatch between message-passing concurrency and virtual machines, such as the JVM. VMs usually map
their threads to heavyweight OS processes. Without a lightweight process abstraction, users are often forced to write parts
of concurrent applications in an event-driven style which obscures control flow, and increases the burden on the programmer.
In this paper we show how thread-based and event-based programming can be unified under a single actor abstraction. Using
advanced abstraction mechanisms of the Scala programming language, we implemented our approach on unmodified JVMs. Our programming
model integrates well with the threading model of the underlying VM.