This paper determines necessary and sufficient conditions to implement wait-free and non-blocking contention managers in a shared memory system. The necessary conditions hold even when universal objects (like compare-and-swap) or random oracles are available, whereas the sufficient ones assume only registers. We show that failure detector P is the weakest to convert any obstruction-free algorithm into a wait-free one, and , a new failure detector which we introduce in this paper, and which is strictly weaker than P but strictly stronger than , is the weakest to convert any obstruction-free algorithm into a non-blocking one.