ah those code looks so messy, someday I'll fix em all