refactor / python 3 compatibility