Added some features and applied many changes