add caching and opower_ functions