add a better abstract