ported to python 3.2