maintained python 2 and python 3 compatibility