a lot change and fix