base on smalvl, make it better and impl include