In this proposal I review the development of TM systems, focusing on pure-software runtimes, and describe the contributions I have made thus far in order to characterize the costs of executing software transactions. These contributions include the development of two pure-software TM libraries (one is obstruction-free, the other uses locks), a lightweight heuristic for speeding any software TM, hardware extensions for accelerating a software TM, and an exploration of the runtime support necessary to enable concurrent transactional and nontransactional operation on shared data. Lastly, I propose new research directions that will aid in understanding the tradeoffs in software TM design, specifically focusing on algorithms for reducing the overheads of software TM, programming models that speed TM and increase its generality, the role of contention management, interaction with locks, and hardware and operating-system support.