Speculative multithreading (SpMT) aims to achieve speedup of a program written for a single processor by allowing it to use multiple processors. The motivation for the technique is that writing a program that runs on multiple processors is difficult and needs as much automation as possible. SpMT works by automatically dividing up a program while it is running and executing pieces of the program code in the wrong order on free processors. If the speculative computation ends up being correct then execution can jump ahead, otherwise it is simply discarded. There have been many hardware simulation studies showing that SpMT is useful but few software imple- mentations. Our goal is to make SpMT work in software for the Java programming language on existing multiprocessor machines. We first implemented a prototype in a research Java virtual machine developed at McGill. Afterwards, IBM became interested in the pro ject and so we made the core SpMT functionality available in a software library. We are now working to adapt their Java virtual machine to use our library. We describe details of our implementation, initial performance results, and three main directions for future optimization. The first optimization is return value prediction. It attempts to predict the values returned by a function, enabling speculative execution that depends upon prior computation of these values. The second optimization is nested speculation. This allows a speculative computation to create an even more speculative computation. This is fairly straightforward in hardware but difficult in software. The third optimization is to apply heuristics that determine when a speculative computation should be created, as opposed to blindly attempting speculation everywhere.