ported to python 3.3