This can be accomplished by flipping the biased coin two times. The concept is that the probability of obtaining two consecutive heads or two consecutive tails should be the same, whether the coin is manipulated or fair. You only need to ignore the other two outcomes, which are Head, Tail and Tail, Head . In Python: def unbiased_coin ( biased_coin ) : while True : flip1 , flip2 = biased_coin ( ) , biased_coin ( ) if flip1 != flip2 : return flip1 In this Python function, biased_coin is designed to return either Head or Tail , and it is called twice to produce two consecutive results. If the outcomes are not the same, namely 'Head, Tail' or 'Tail, Head', one of them is returned. If they are equal, the process continues until an unequal pair is achieved.