correct some mistake and fulfill most of the requirement