this should also catch Throwable?