new V2.0.0 start. rewrite using OOP Python