For #5 add try_wrap(fn) - not sure it's useful though.