semantics updated but need to refined more