diff --git a/mautrix_facebook/portal.py b/mautrix_facebook/portal.py
index 8d2310cfa5066f5c4335bb8ee56ac89bad77c5e5..76579cd125dc33edc462e26a09889874bb6040a5 100644
--- a/mautrix_facebook/portal.py
+++ b/mautrix_facebook/portal.py
@@ -241,21 +241,21 @@ class Portal(BasePortal):
         return path[path.rfind("/") + 1:]
 
     @staticmethod
-    async def _reupload_fb_file(url: str, intent: IntentAPI, filename: Optional[str] = None,
-                                convert: Optional[Callable[[bytes], Awaitable[bytes]]] = None,
-                                encrypt: bool = False
+    async def _reupload_fb_file(url: str, source: fbchat.Client, intent: IntentAPI, *,
+                                filename: Optional[str] = None, encrypt: bool = False,
+                                convert: Optional[Callable[[bytes], Awaitable[bytes]]] = None
                                 ) -> Tuple[ContentURI, str, int, Optional[EncryptedFile]]:
         if not url:
             raise ValueError('URL not provided')
-        async with aiohttp.ClientSession() as session:
+        session = source.session._session
+        resp = await session.get(url)
+        try:
+            url = resp.headers["Refresh"].split(";", 1)[1].split("=", 1)[1]
+        except (KeyError, IndexError):
+            pass
+        else:
             resp = await session.get(url)
-            try:
-                url = resp.headers["Refresh"].split(";", 1)[1].split("=", 1)[1]
-            except (KeyError, IndexError):
-                pass
-            else:
-                resp = await session.get(url)
-            data = await resp.read()
+        data = await resp.read()
         if convert:
             data = await convert(data)
         mime = magic.from_buffer(data, mime=True)
@@ -715,7 +715,7 @@ class Portal(BasePortal):
         event_ids = []
         if message.sticker:
             event_ids = [await self._handle_facebook_sticker(
-                intent, message.sticker, message.reply_to_id, message.created_at)]
+                source.client, intent, message.sticker, message.reply_to_id, message.created_at)]
         elif len(message.attachments) > 0:
             attach_ids = await asyncio.gather(
                 *[self._handle_facebook_attachment(source.client, intent, attachment,
@@ -769,8 +769,9 @@ class Portal(BasePortal):
         await self._add_facebook_reply(content, message.reply_to_id)
         return await self._send_message(intent, content, timestamp=message.created_at)
 
-    async def _handle_facebook_sticker(self, intent: IntentAPI, sticker: fbchat.Sticker,
-                                       reply_to: str, timestamp: datetime) -> EventID:
+    async def _handle_facebook_sticker(self, source: fbchat.Client, intent: IntentAPI,
+                                       sticker: fbchat.Sticker, reply_to: str, timestamp: datetime
+                                       ) -> EventID:
         width, height = sticker.image.width, sticker.image.height
         if sticker.is_animated and Image and convert_cmd:
             async def convert(data: bytes) -> bytes:
@@ -780,10 +781,11 @@ class Portal(BasePortal):
                 return data
 
             mxc, mime, size, decryption_info = await self._reupload_fb_file(
-                sticker.large_sprite_image, intent, encrypt=self.encrypted, convert=convert)
+                sticker.large_sprite_image, source, intent,
+                encrypt=self.encrypted, convert=convert)
         else:
             mxc, mime, size, decryption_info = await self._reupload_fb_file(
-                sticker.image.url, intent, encrypt=self.encrypted)
+                sticker.image.url, source, intent, encrypt=self.encrypted)
         return await self._send_message(intent, event_type=EventType.STICKER,
                                         content=MediaMessageEventContent(
                                             url=mxc, file=decryption_info,
@@ -823,7 +825,7 @@ class Portal(BasePortal):
             info = VideoInfo(width=attachment.width, height=attachment.height,
                              duration=attachment.duration.seconds)
         elif isinstance(attachment, fbchat.LocationAttachment):
-            return await self._convert_facebook_location(intent, attachment)
+            return await self._convert_facebook_location(source, intent, attachment)
         else:
             msg = f"Unsupported attachment type {type(attachment)}"
             self.log.warning(msg)
@@ -836,14 +838,14 @@ class Portal(BasePortal):
         else:
             url = attachment.url
         mxc, info.mimetype, info.size, decryption_info = await self._reupload_fb_file(
-            url, intent, filename, encrypt=self.encrypted)
+            url, source, intent, filename=filename, encrypt=self.encrypted)
         if isinstance(attachment, fbchat.VideoAttachment):
             filename = f"video{guess_extension(info.mimetype)}"
         return MediaMessageEventContent(url=mxc, file=decryption_info, msgtype=msgtype,
                                         body=filename, info=info)
 
     async def _convert_facebook_location(
-        self, intent: IntentAPI, location: fbchat.LocationAttachment
+        self, source: fbchat.Client, intent: IntentAPI, location: fbchat.LocationAttachment
     ) -> Union[LocationMessageEventContent, TextMessageEventContent]:
         long, lat = location.longitude, location.latitude
         if not long or not lat:
@@ -864,7 +866,7 @@ class Portal(BasePortal):
 
         if location.image and location.image.url:
             thumbnail_url, mime, size, decryption_info = await self._reupload_fb_file(
-                location.image.url, intent, encrypt=True)
+                location.image.url, source, intent, encrypt=True)
             thumbnail_info = ThumbnailInfo(mimetype=mime, width=location.image.width,
                                            height=location.image.height, size=size)
             info = LocationInfo(thumbnail_url=thumbnail_url, thumbnail_file=decryption_info,
@@ -920,7 +922,7 @@ class Portal(BasePortal):
         if self.photo_id == photo_id:
             return
         self.photo_id = photo_id
-        self.avatar_url, *_ = await self._reupload_fb_file(photo_url, sender.intent)
+        self.avatar_url, *_ = await self._reupload_fb_file(photo_url, source.client, sender.intent)
         try:
             event_id = await sender.intent.set_room_avatar(self.mxid, self.avatar_url)
         except IntentError: