Ported for python 2 and 3