add DPPO macro
remove side effect