The one-sided communication model supported by MPI-2 can be more convenient to use than the regular two-sided communication model and has potential to provide better performance. The MPI-2 standard gives flexibility about when RMA operations can be issued and completed. The current MPICH2 implementation employs a lazy approach, in which operations are queued up and issued in the later synchronization phase. This has certain benefits for small data transfers because of reduced network operations, but for large data transfers, issuing operations in an eager fashion could achieve better performance. In this paper we describe our design and implementation of an adaptive strategy for one-sided operations and synchronization mechanisms (fence, post-start-complete-wait, lock-unlock) supported by MPI-2, which combines benefits from both lazy and eager approaches. Our performance results demonstrate that our approach performs as well as the lazy approach for small data transfers and achieves similar performance as the eager approach for large data transfers. In addition, it achieves good overlap of communication with computation.