v0.4.0 refactor begin