some little bugs & uncommit changes done by yourself, please ignore the newline-changes