refactor
alpha v1
refacor to public
is alpha v2
is ok