rewrite and make recursive
Release 0.0.2