add onTargetTerminated()
add diff
add mode getter & setter