Updated to support both Python 2.7 and 3.x