leave it to custom implementation