Split story updates into another function, added caching (#30)