use explicit dispatch instead of implicit dispatch