TODO: wrap closures