diff --git a/discord/client.py b/discord/client.py
index a0683c25e..b892d29d3 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -113,7 +113,6 @@ class Client:
             max_messages = 5000
 
         self.connection = ConnectionState(self.dispatch, max_messages)
-        self.session = aiohttp.ClientSession(loop=self.loop)
 
         # Blame React for this
         user_agent = 'DiscordBot (https://github.com/Rapptz/discord.py {0}) Python/{1[0]}.{1[1]} aiohttp/{2}'
@@ -131,10 +130,6 @@ class Client:
         self._voice_data_found = asyncio.Event(loop=self.loop)
         self._session_id_found = asyncio.Event(loop=self.loop)
 
-    def __del__(self):
-        if hasattr(self, 'session'):
-            self.session.close()
-
     # internals
 
     def _get_cache_filename(self, email):
@@ -214,7 +209,7 @@ class Client:
 
     @asyncio.coroutine
     def _get_gateway(self):
-        resp = yield from self.session.get(endpoints.GATEWAY, headers=self.headers)
+        resp = yield from aiohttp.get(endpoints.GATEWAY, headers=self.headers, loop=self.loop)
         if resp.status != 200:
             raise GatewayNotFound()
         data = yield from resp.json()
@@ -531,7 +526,7 @@ class Client:
                     self.token = f.read()
                     self.headers['authorization'] = self.token
 
-                check = yield from self.session.get(endpoints.ME, headers=self.headers)
+                check = yield from aiohttp.get(endpoints.ME, headers=self.headers, loop=self.loop)
                 if check.status == 200:
                     log.info('login cache token check succeeded')
                     yield from check.release()
@@ -551,7 +546,7 @@ class Client:
         }
 
         data = utils.to_json(payload)
-        resp = yield from self.session.post(endpoints.LOGIN, data=data, headers=self.headers)
+        resp = yield from aiohttp.post(endpoints.LOGIN, data=data, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='POST', response=resp))
         if resp.status == 400:
             raise LoginFailure('Improper credentials have been passed.')
@@ -583,7 +578,7 @@ class Client:
         """|coro|
 
         Logs out of Discord and closes all connections."""
-        response = yield from self.session.post(endpoints.LOGOUT, headers=self.headers)
+        response = yield from aiohttp.post(endpoints.LOGOUT, headers=self.headers, loop=self.loop)
         yield from response.release()
         yield from self.close()
         self._is_logged_in = False
@@ -732,7 +727,7 @@ class Client:
         }
 
         url = '{}/channels'.format(endpoints.ME)
-        r = yield from self.session.post(url, data=utils.to_json(payload), headers=self.headers)
+        r = yield from aiohttp.post(url, data=utils.to_json(payload), headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='POST', response=r))
         yield from utils._verify_successful_response(r)
         data = yield from r.json()
@@ -741,7 +736,7 @@ class Client:
 
     @asyncio.coroutine
     def _rate_limit_helper(self, name, method, url, data):
-        resp = yield from self.session.request(method, url, data=data, headers=self.headers)
+        resp = yield from aiohttp.request(method, url, data=data, headers=self.headers, loop=self.loop)
         tmp = request_logging_format.format(method=method, response=resp)
         log_fmt = 'In {}, {}'.format(name, tmp)
         log.debug(log_fmt)
@@ -848,7 +843,7 @@ class Client:
 
         url = '{base}/{id}/typing'.format(base=endpoints.CHANNELS, id=channel_id)
 
-        response = yield from self.session.post(url, headers=self.headers)
+        response = yield from aiohttp.post(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='POST', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -909,10 +904,10 @@ class Client:
             # attempt to open the file and send the request
             with open(fp, 'rb') as f:
                 files.add_field('file', f, filename=filename)
-                response = yield from self.session.post(url, data=files, headers=headers)
+                response = yield from aiohttp.post(url, data=files, headers=headers, loop=self.loop)
         except TypeError:
             files.add_field('file', fp, filename=filename)
-            response = yield from self.session.post(url, data=files, headers=headers)
+            response = yield from aiohttp.post(url, data=files, headers=headers, loop=self.loop)
 
         log.debug(request_logging_format.format(method='POST', response=response))
         yield from utils._verify_successful_response(response)
@@ -946,7 +941,7 @@ class Client:
         """
 
         url = '{}/{}/messages/{}'.format(endpoints.CHANNELS, message.channel.id, message.id)
-        response = yield from self.session.delete(url, headers=self.headers)
+        response = yield from aiohttp.delete(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='DELETE', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1007,7 +1002,7 @@ class Client:
         if after:
             params['after'] = after.id
 
-        response = yield from self.session.get(url, params=params, headers=self.headers)
+        response = yield from aiohttp.get(url, params=params, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='GET', response=response))
         yield from utils._verify_successful_response(response)
         messages = yield from response.json()
@@ -1098,7 +1093,7 @@ class Client:
         """
 
         url = '{0}/{1.server.id}/members/{1.id}'.format(endpoints.SERVERS, member)
-        response = yield from self.session.delete(url, headers=self.headers)
+        response = yield from aiohttp.delete(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='DELETE', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1129,7 +1124,7 @@ class Client:
         """
 
         url = '{0}/{1.server.id}/bans/{1.id}'.format(endpoints.SERVERS, member)
-        response = yield from self.session.put(url, headers=self.headers)
+        response = yield from aiohttp.put(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='PUT', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1160,7 +1155,7 @@ class Client:
         """
 
         url = '{0}/{1.server.id}/bans/{1.id}'.format(endpoints.SERVERS, member)
-        response = yield from self.session.delete(url, headers=self.headers)
+        response = yield from aiohttp.delete(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='DELETE', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1200,7 +1195,7 @@ class Client:
             'deaf': deafen
         }
 
-        response = yield from self.session.patch(url, headers=self.headers, data=utils.to_json(payload))
+        response = yield from aiohttp.patch(url, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
         log.debug(request_logging_format.format(method='PATCH', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1264,7 +1259,7 @@ class Client:
             'avatar': avatar
         }
 
-        r = yield from self.session.patch(endpoints.ME, headers=self.headers, data=utils.to_json(payload))
+        r = yield from aiohttp.patch(endpoints.ME, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
         log.debug(request_logging_format.format(method='PATCH', response=r))
         yield from utils._verify_successful_response(r)
 
@@ -1359,7 +1354,7 @@ class Client:
             'position': options.get('position', channel.position)
         }
 
-        r = yield from self.session.patch(url, headers=self.headers, data=utils.to_json(payload))
+        r = yield from aiohttp.patch(url, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
         log.debug(request_logging_format.format(method='PATCH', response=r))
         yield from utils._verify_successful_response(r)
 
@@ -1408,7 +1403,7 @@ class Client:
         }
 
         url = '{0}/{1.id}/channels'.format(endpoints.SERVERS, server)
-        response = yield from self.session.post(url, headers=self.headers, data=utils.to_json(payload))
+        response = yield from aiohttp.post(url, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
         log.debug(request_logging_format.format(method='POST', response=response))
         yield from utils._verify_successful_response(response)
 
@@ -1442,7 +1437,7 @@ class Client:
         """
 
         url = '{}/{}'.format(endpoints.CHANNELS, channel.id)
-        response = yield from self.session.delete(url, headers=self.headers)
+        response = yield from aiohttp.delete(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='DELETE', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1471,7 +1466,7 @@ class Client:
         """
 
         url = '{0}/{1.id}'.format(endpoints.SERVERS, server)
-        response = yield from self.session.delete(url, headers=self.headers)
+        response = yield from aiohttp.delete(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='DELETE', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1509,7 +1504,7 @@ class Client:
         if icon is not None:
             icon = utils._bytes_to_base64_data(icon)
 
-        r = yield from self.session.post(endpoints.SERVERS, headers=self.headers)
+        r = yield from aiohttp.post(endpoints.SERVERS, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='POST', response=r))
         yield from utils._verify_successful_response(r)
         data = yield from r.json()
@@ -1579,7 +1574,7 @@ class Client:
         payload['afk_channel'] = getattr(afk_channel, 'id', None)
 
         url = '{0}/{1.id}'.format(endpoints.SERVERS, server)
-        r = yield from self.session.patch(url, headers=self.headers, data=utils.to_json(payload))
+        r = yield from aiohttp.patch(url, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
         log.debug(request_logging_format.format(method='PATCH', response=r))
         yield from utils._verify_successful_response(r)
         yield from r.release()
@@ -1628,7 +1623,7 @@ class Client:
         }
 
         url = '{0}/{1.id}/invites'.format(endpoints.CHANNELS, destination)
-        response = yield from self.session.post(url, headers=self.headers, data=utils.to_json(payload))
+        response = yield from aiohttp.post(url, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
         log.debug(request_logging_format.format(method='POST', response=response))
 
         yield from utils._verify_successful_response(response)
@@ -1672,7 +1667,7 @@ class Client:
 
         destination = self._resolve_invite(url)
         rurl = '{0}/invite/{1}'.format(endpoints.API_BASE, destination)
-        response = yield from self.session.get(rurl, headers=self.headers)
+        response = yield from aiohttp.get(rurl, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='GET', response=response))
         yield from utils._verify_successful_response(response)
         data = yield from response.json()
@@ -1714,7 +1709,7 @@ class Client:
 
         destination = self._resolve_invite(invite)
         url = '{0}/invite/{1}'.format(endpoints.API_BASE, destination)
-        response = yield from self.session.post(url, headers=self.headers)
+        response = yield from aiohttp.post(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='POST', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1745,7 +1740,7 @@ class Client:
 
         destination = self._resolve_invite(invite)
         url = '{0}/invite/{1}'.format(endpoints.API_BASE, destination)
-        response = yield from self.session.delete(url, headers=self.headers)
+        response = yield from aiohttp.delete(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='DELETE', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1807,7 +1802,7 @@ class Client:
             'hoist': fields.get('hoist', role.hoist)
         }
 
-        r = yield from self.session.patch(url, data=utils.to_json(payload), headers=self.headers)
+        r = yield from aiohttp.patch(url, data=utils.to_json(payload), headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='PATCH', response=r))
         yield from utils._verify_successful_response(r)
 
@@ -1838,7 +1833,7 @@ class Client:
         """
 
         url = '{0}/{1.id}/roles/{2.id}'.format(endpoints.SERVERS, server, role)
-        response = yield from self.session.delete(url, headers=self.headers)
+        response = yield from aiohttp.delete(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='DELETE', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()
@@ -1936,7 +1931,7 @@ class Client:
             'roles': [role.id for role in roles]
         }
 
-        r = yield from self.session.patch(url, headers=self.headers, data=utils.to_json(payload))
+        r = yield from aiohttp.patch(url, headers=self.headers, data=utils.to_json(payload), loop=self.loop)
         log.debug(request_logging_format.format(method='PATCH', response=r))
         yield from utils._verify_successful_response(r)
         yield from r.release()
@@ -1958,7 +1953,7 @@ class Client:
         """
 
         url = '{0}/{1.id}/roles'.format(endpoints.SERVERS, server)
-        r = yield from self.session.post(url, headers=self.headers)
+        r = yield from aiohttp.post(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='POST', response=r))
         yield from utils._verify_successful_response(r)
 
@@ -2042,7 +2037,7 @@ class Client:
         else:
             raise InvalidArgument('target parameter must be either discord.Member or discord.Role')
 
-        r = yield from self.session.put(url, data=utils.to_json(payload), headers=self.headers)
+        r = yield from aiohttp.put(url, data=utils.to_json(payload), headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='PUT', response=r))
         yield from utils._verify_successful_response(r)
         yield from r.release()
@@ -2076,7 +2071,7 @@ class Client:
         """
 
         url = '{0}/{1.id}/permissions/{2.id}'.format(endpoints.CHANNELS, channel, target)
-        response = yield from self.session.delete(url, headers=self.headers)
+        response = yield from aiohttp.delete(url, headers=self.headers, loop=self.loop)
         log.debug(request_logging_format.format(method='DELETE', response=response))
         yield from utils._verify_successful_response(response)
         yield from response.release()