add cache
add refresh button