Requires Python 2.7+