I actually think most of this logic would be better in KeepAliveData itself.