(for next PR): won't this result in a double call to cb() if cb() itslef throws an exception?
probably should be a try / catch (store error) / finally cb(stored error) construct