fix && optimize