TODO, Refine, test case, commit back to ASM