WIP: initial import

because I wanted to be able to pass `self` as the callback.