finish errors, code is more stable