wrapped implementation, seems to work