use requires cache, externalize some utils
0.3.0