Ported by Katrina#9999 and Mysath#6666