diff --git a/gcloud_requests/credentials_watcher.py b/gcloud_requests/credentials_watcher.py
index <HASH>..<HASH> 100644
--- a/gcloud_requests/credentials_watcher.py
+++ b/gcloud_requests/credentials_watcher.py
@@ -62,3 +62,8 @@ class CredentialsWatcher(Thread):
         with self.watch_list_updated:
             self.watch_list.append(credentials)
             self.watch_list_updated.notify()
+
+    def unwatch(self, credentials):
+        with self.watch_list_updated:
+            self.watch_list.remove(credentials)
+            self.watch_list_updated.notify()
diff --git a/gcloud_requests/proxy.py b/gcloud_requests/proxy.py
index <HASH>..<HASH> 100644
--- a/gcloud_requests/proxy.py
+++ b/gcloud_requests/proxy.py
@@ -71,6 +71,9 @@ class RequestsProxy(object):
         self.credentials = credentials
         _credentials_watcher.watch(credentials)
 
+    def __del__(self):
+        _credentials_watcher.unwatch(self.credentials)
+
     def request(self, uri, method="GET", body=None, headers=None, redirections=5, connection_type=None, retries=0, refresh_attempts=0):   # noqa
         session = self._get_session()
         headers = headers.copy() if headers is not None else {}
unwatch credentials once proxies get gc'd