diff --git a/app/Controllers/EpisodeAudioController.php b/app/Controllers/EpisodeAudioController.php
index fbf66d76205062b6cf29db58b2b0247e5a7679b8..c1bdbcd8f29d5ad0686c8d40008cc64c356d5e28 100644
--- a/app/Controllers/EpisodeAudioController.php
+++ b/app/Controllers/EpisodeAudioController.php
@@ -20,6 +20,7 @@ use CodeIgniter\HTTP\IncomingRequest;
 use CodeIgniter\HTTP\RedirectResponse;
 use CodeIgniter\HTTP\RequestInterface;
 use CodeIgniter\HTTP\ResponseInterface;
+use CodeIgniter\HTTP\URI;
 use Config\Services;
 use Modules\Analytics\Config\Analytics;
 use Modules\PremiumPodcasts\Entities\Subscription;
@@ -166,6 +167,18 @@ class EpisodeAudioController extends Controller
             $subscription instanceof Subscription ? $subscription->id : null
         );
 
-        return redirect()->to($this->analyticsConfig->getAudioUrl($this->episode, $this->request->getGet()));
+        $audioFileURI = new URI(service('file_manager')->getUrl($this->episode->audio->file_key));
+
+        $queryParams = [];
+        foreach ($this->request->getGet() as $key => $value) {
+            // do not include token in query params
+            if ($key !== 'token') {
+                $queryParams[$key] = $value;
+            }
+        }
+
+        $audioFileURI->setQueryArray($queryParams);
+
+        return redirect()->to((string) $audioFileURI);
     }
 }
diff --git a/app/Entities/Episode.php b/app/Entities/Episode.php
index 3fc08e5fee91287b4cdd6f4f3b0c850d6e7f0247..357b4748802787c45c5fbf093b70951bee15526f 100644
--- a/app/Entities/Episode.php
+++ b/app/Entities/Episode.php
@@ -21,6 +21,7 @@ use App\Models\PostModel;
 use CodeIgniter\Entity\Entity;
 use CodeIgniter\Files\File;
 use CodeIgniter\HTTP\Files\UploadedFile;
+use CodeIgniter\HTTP\URI;
 use CodeIgniter\I18n\Time;
 use Config\Images;
 use Exception;
@@ -30,6 +31,7 @@ use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
 use League\CommonMark\Extension\DisallowedRawHtml\DisallowedRawHtmlExtension;
 use League\CommonMark\Extension\SmartPunct\SmartPunctExtension;
 use League\CommonMark\MarkdownConverter;
+use Modules\Analytics\OP3;
 use Modules\Media\Entities\Audio;
 use Modules\Media\Entities\Chapters;
 use Modules\Media\Entities\Image;
@@ -344,7 +346,26 @@ class Episode extends Entity
 
     public function getAudioUrl(): string
     {
-        return url_to('episode-audio', $this->getPodcast()->handle, $this->slug, $this->getAudio()->file_extension);
+        $audioURL = url_to(
+            'episode-audio',
+            $this->getPodcast()
+->handle,
+            $this->slug,
+            $this->getAudio()
+->file_extension
+        );
+
+        // Wrap episode url with OP3 if episode is public and OP3 is enabled on this podcast
+        if (! $this->is_premium && service('settings')->get(
+            'Analytics.enableOP3',
+            'podcast:' . $this->podcast_id
+        )) {
+            $op3 = new OP3(config('Analytics')->OP3);
+
+            return $op3->wrap($audioURL, $this);
+        }
+
+        return $audioURL;
     }
 
     public function getAudioWebUrl(): string
diff --git a/modules/Analytics/Config/Analytics.php b/modules/Analytics/Config/Analytics.php
index 85adf7ffb6e1c18ef0496e11441148dbe76a4d4a..8eca95d399e55ebaef5791f93329a54675fc88c3 100644
--- a/modules/Analytics/Config/Analytics.php
+++ b/modules/Analytics/Config/Analytics.php
@@ -4,10 +4,7 @@ declare(strict_types=1);
 
 namespace Modules\Analytics\Config;
 
-use App\Entities\Episode;
 use CodeIgniter\Config\BaseConfig;
-use CodeIgniter\HTTP\URI;
-use Modules\Analytics\OP3;
 
 class Analytics extends BaseConfig
 {
@@ -53,24 +50,4 @@ class Analytics extends BaseConfig
     ];
 
     public bool $enableOP3 = false;
-
-    /**
-     * get the full audio file url
-     */
-    public function getAudioUrl(Episode $episode, array $params): string
-    {
-        $audioFileURI = new URI(service('file_manager')->getUrl($episode->audio->file_key));
-        $audioFileURI->setQueryArray($params);
-
-        // Wrap episode url with OP3 if episode is public and OP3 is enabled on this podcast
-        if (! $episode->is_premium && service('settings')->get(
-            'Analytics.enableOP3',
-            'podcast:' . $episode->podcast_id
-        )) {
-            $op3 = new OP3($this->OP3);
-            $audioFileURI = new URI($op3->wrap($audioFileURI, $episode));
-        }
-
-        return (string) $audioFileURI;
-    }
 }
diff --git a/modules/Analytics/OP3.php b/modules/Analytics/OP3.php
index e3082e2ca273bb30a5c59ed97f49ae1720a47a5f..76eaa6e0e388e394ceb5b8b5b847d28ca4cdab95 100644
--- a/modules/Analytics/OP3.php
+++ b/modules/Analytics/OP3.php
@@ -11,7 +11,6 @@ declare(strict_types=1);
 namespace Modules\Analytics;
 
 use App\Entities\Episode;
-use CodeIgniter\HTTP\URI;
 
 class OP3
 {
@@ -25,11 +24,11 @@ class OP3
         $this->host = rtrim($config['host'], '/');
     }
 
-    public function wrap(URI $audioURI, Episode $episode): string
+    public function wrap(string $audioURL, Episode $episode): string
     {
-        // remove scheme from audioURI
-        $audioURI->setScheme('');
+        // remove scheme from audioURI if https
+        $audioURIWithoutHTTPS = preg_replace('(^https://)', '', $audioURL);
 
-        return $this->host . '/e,pg=' . $episode->podcast->guid . '/' . $audioURI;
+        return $this->host . '/e,pg=' . $episode->podcast->guid . '/' . $audioURIWithoutHTTPS;
     }
 }