fix TODO
fix bugs.
add invalid_args!