Note : ***
Author : Coz
 with help from paradoxxx_zero