hydrate() should call recalcSeen*
comment