When implementing a CachingStateRepository I noticed the JSF integration didn't seem to be caching properly. When using the "features" managed bean, a Feature is represented by a NamedFeature. Since NamedFeature doesn't override hashcode() or equals(), it isn't suitable for a key in the cache map.