Thread migration is established as a mechanism for achieving dynamic load sharing and data locality. However, migration has not been used with fine-grained parallelism on workstation clusters due to the relatively high overheads associated with thread and messaging packages. This paper describes a portable, high performance thread migration system, implemented with user level threads and active messages. The thread system supports an extensible event mechanism which permits an efficient interface between the thread and active message system. Migration is supported by user level primitives; applications may implement different migration policies on top of the migration interface provided. The system runs on a cluster of SMPs and the performance obtained is orders of magnitude better than other reported measurements.