Introduced future, does some adjustments to support both python 2 and 3