// TODO: this might need a 'canceled' state