improved Python 3 compatibility