Fix for Python 3.x, Refactor, and small changes