add cache and some commont