good catch. We could wrap all Throwable with ClientException and change the callback interface to to onException(ClientException). The drawback is client may have always do getCause() to see the root cause. Any thoughts?