why does changing the datasource cause 2 calls to the callback?