requires python 2.6+