Changes made by ภาณุพงศ์ ปรึกษา (panupong_pruk@hotmail.com).
big refactor