fix and optimize again;