This paper proposes efficient object-based implementations for Software Transactional Memory (stm). The proposed implementations are based on using multiple versions of the transactional objects to increase the concurrency of stm execution. In this work, we propose 3 algorithms for enhancing concurrency in stm. We also propose a new approach for determining the optimal number of versions to keep. Finally, we present experimental results that show the efficiency of the proposed implementations.