3rd time... Rewrite the whole function in another way... QAQ