remove `exec`
more modulized
bug fix