The API for the MemoryService is rather misleading. There is a containsKey method that determines if some key has ever been stuck in the cache. However, the fact that an item was once placed in the cache doesn't necessarily mean that it is still present. If it is not, .containsKey() will return true but .get() will return the item as null. This subtlety was not appreciated everywhere the MemoryService cache was used, leading to nullpointers and other issues.
Worse yet, these issues will of course be intermittent, because the ejection of data from the cache can happen in different ways at different times.
I will shortly be adding a branch to address this.