Updated to work in both Python 2 and 3