diff --git a/app/Controllers/Admin/Episode.php b/app/Controllers/Admin/Episode.php
index 92f9a8ea722934d7af9ca03648b93ec187a8bfcb..0ab9a8e55b12d8d6cca47372c7948f03fcf9a510 100644
--- a/app/Controllers/Admin/Episode.php
+++ b/app/Controllers/Admin/Episode.php
@@ -141,6 +141,7 @@ class Episode extends BaseController
                 : null,
             'type' => $this->request->getPost('type'),
             'is_blocked' => $this->request->getPost('block') == 'yes',
+            'custom_rss_string' => $this->request->getPost('custom_rss'),
             'created_by' => user(),
             'updated_by' => user(),
             'published_at' => $publicationDate
@@ -236,6 +237,9 @@ class Episode extends BaseController
             : null;
         $this->episode->type = $this->request->getPost('type');
         $this->episode->is_blocked = $this->request->getPost('block') == 'yes';
+        $this->episode->custom_rss_string = $this->request->getPost(
+            'custom_rss'
+        );
 
         $publicationDate = $this->request->getPost('publication_date');
         $this->episode->published_at = $publicationDate
diff --git a/app/Controllers/Admin/Podcast.php b/app/Controllers/Admin/Podcast.php
index 342280c5406e26bd2fd713df20489b43193fe498..5e467a3b1b0b50e2dc6ce46161f42ae83ee8db25 100644
--- a/app/Controllers/Admin/Podcast.php
+++ b/app/Controllers/Admin/Podcast.php
@@ -163,6 +163,7 @@ class Podcast extends BaseController
             'copyright' => $this->request->getPost('copyright'),
             'location' => $this->request->getPost('location_name'),
             'payment_pointer' => $this->request->getPost('payment_pointer'),
+            'custom_rss_string' => $this->request->getPost('custom_rss'),
             'is_blocked' => $this->request->getPost('block') === 'yes',
             'is_completed' => $this->request->getPost('complete') === 'yes',
             'is_locked' => $this->request->getPost('lock') === 'yes',
@@ -259,6 +260,9 @@ class Podcast extends BaseController
         $this->podcast->payment_pointer = $this->request->getPost(
             'payment_pointer'
         );
+        $this->podcast->custom_rss_string = $this->request->getPost(
+            'custom_rss'
+        );
         $this->podcast->is_blocked = $this->request->getPost('block') === 'yes';
         $this->podcast->is_completed =
             $this->request->getPost('complete') === 'yes';
diff --git a/app/Database/Migrations/2020-05-30-101500_add_podcasts.php b/app/Database/Migrations/2020-05-30-101500_add_podcasts.php
index 19a816163a55d7ca22a5d50baf48a11b80d9768c..e926d36f623e3a36c02a1d8672135e3de1343766 100644
--- a/app/Database/Migrations/2020-05-30-101500_add_podcasts.php
+++ b/app/Database/Migrations/2020-05-30-101500_add_podcasts.php
@@ -138,6 +138,10 @@ class AddPodcasts extends Migration
                 'constraint' => 12,
                 'null' => true,
             ],
+            'custom_rss' => [
+                'type' => 'JSON',
+                'null' => true,
+            ],
             'created_by' => [
                 'type' => 'INT',
                 'unsigned' => true,
diff --git a/app/Database/Migrations/2020-06-05-170000_add_episodes.php b/app/Database/Migrations/2020-06-05-170000_add_episodes.php
index 7d33d94226c12bef38c35acd81a55c30f77e0dbc..72f7f1994d7e24105d412e0335c57216414a7687 100644
--- a/app/Database/Migrations/2020-06-05-170000_add_episodes.php
+++ b/app/Database/Migrations/2020-06-05-170000_add_episodes.php
@@ -124,6 +124,10 @@ class AddEpisodes extends Migration
                 'constraint' => 12,
                 'null' => true,
             ],
+            'custom_rss' => [
+                'type' => 'JSON',
+                'null' => true,
+            ],
             'created_by' => [
                 'type' => 'INT',
                 'unsigned' => true,
diff --git a/app/Entities/Episode.php b/app/Entities/Episode.php
index 99bc4804e790f44b3d6ed1d732676ec8455fd067..f79dfbe08390b6d23842b2f102e59b92a55b2749 100644
--- a/app/Entities/Episode.php
+++ b/app/Entities/Episode.php
@@ -106,6 +106,13 @@ class Episode extends Entity
      */
     protected $publication_status;
 
+    /**
+     * Return custom rss as string
+     *
+     * @var string
+     */
+    protected $custom_rss_string;
+
     protected $dates = [
         'published_at',
         'created_at',
@@ -136,6 +143,7 @@ class Episode extends Entity
         'location_name' => '?string',
         'location_geo' => '?string',
         'location_osmid' => '?string',
+        'custom_rss' => '?json-array',
         'created_by' => 'integer',
         'updated_by' => 'integer',
     ];
@@ -564,4 +572,56 @@ class Episode extends Entity
         }
         return $this;
     }
+
+    /**
+     * Get custom rss tag as XML String
+     *
+     * @return string
+     *
+     */
+    function getCustomRssString()
+    {
+        helper('rss');
+        if (empty($this->attributes['custom_rss'])) {
+            return '';
+        } else {
+            $xmlNode = (new \App\Libraries\SimpleRSSElement(
+                '<?xml version="1.0" encoding="utf-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:podcast="https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"/>'
+            ))
+                ->addChild('channel')
+                ->addChild('item');
+            array_to_rss(
+                [
+                    'elements' => $this->custom_rss,
+                ],
+                $xmlNode
+            );
+            return str_replace(['<item>', '</item>'], '', $xmlNode->asXML());
+        }
+    }
+
+    /**
+     * Saves custom rss tag into json
+     *
+     * @param string $customRssString
+     *
+     */
+    function setCustomRssString($customRssString)
+    {
+        helper('rss');
+        $customRssArray = rss_to_array(
+            simplexml_load_string(
+                '<?xml version="1.0" encoding="utf-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:podcast="https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><item>' .
+                    $customRssString .
+                    '</item></channel></rss>'
+            )
+        )['elements'][0]['elements'][0];
+        if (array_key_exists('elements', $customRssArray)) {
+            $this->attributes['custom_rss'] = json_encode(
+                $customRssArray['elements']
+            );
+        } else {
+            $this->attributes['custom_rss'] = null;
+        }
+    }
 }
diff --git a/app/Entities/Podcast.php b/app/Entities/Podcast.php
index aa4a4afe71a10dc6f92686931403ea2c12870b10..813123f5ff904329174d50d27bfb56ff0c50b363 100644
--- a/app/Entities/Podcast.php
+++ b/app/Entities/Podcast.php
@@ -80,6 +80,13 @@ class Podcast extends Entity
      */
     protected $description;
 
+    /**
+     * Return custom rss as string
+     *
+     * @var string
+     */
+    protected $custom_rss_string;
+
     protected $casts = [
         'id' => 'integer',
         'title' => 'string',
@@ -106,6 +113,7 @@ class Podcast extends Entity
         'location_geo' => '?string',
         'location_osmid' => '?string',
         'payment_pointer' => '?string',
+        'custom_rss' => '?json-array',
         'created_by' => 'integer',
         'updated_by' => 'integer',
     ];
@@ -480,4 +488,58 @@ class Podcast extends Entity
         }
         return $this;
     }
+
+    /**
+     * Get custom rss tag as XML String
+     *
+     * @return string
+     *
+     */
+    function getCustomRssString()
+    {
+        helper('rss');
+        if (empty($this->attributes['custom_rss'])) {
+            return '';
+        } else {
+            $xmlNode = (new \App\Libraries\SimpleRSSElement(
+                '<?xml version="1.0" encoding="utf-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:podcast="https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"/>'
+            ))->addChild('channel');
+            array_to_rss(
+                [
+                    'elements' => $this->custom_rss,
+                ],
+                $xmlNode
+            );
+            return str_replace(
+                ['<channel>', '</channel>'],
+                '',
+                $xmlNode->asXML()
+            );
+        }
+    }
+
+    /**
+     * Saves custom rss tag into json
+     *
+     * @param string $customRssString
+     *
+     */
+    function setCustomRssString($customRssString)
+    {
+        helper('rss');
+        $customRssArray = rss_to_array(
+            simplexml_load_string(
+                '<?xml version="1.0" encoding="utf-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:podcast="https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel>' .
+                    $customRssString .
+                    '</channel></rss>'
+            )
+        )['elements'][0];
+        if (array_key_exists('elements', $customRssArray)) {
+            $this->attributes['custom_rss'] = json_encode(
+                $customRssArray['elements']
+            );
+        } else {
+            $this->attributes['custom_rss'] = null;
+        }
+    }
 }
diff --git a/app/Helpers/rss_helper.php b/app/Helpers/rss_helper.php
index 69a08539087f31593bdba637bd498c9212062912..debb495df0f89b08d4be511e22cd1fbf44d7540d 100644
--- a/app/Helpers/rss_helper.php
+++ b/app/Helpers/rss_helper.php
@@ -242,6 +242,15 @@ function get_rss_feed($podcast, $serviceSlug = '')
     $image->addChild('title', $podcast->title);
     $image->addChild('link', $podcast->link);
 
+    if (!empty($podcast->custom_rss)) {
+        array_to_rss(
+            [
+                'elements' => $podcast->custom_rss,
+            ],
+            $channel
+        );
+    }
+
     foreach ($episodes as $episode) {
         $item = $channel->addChild('item');
         $item->addChild('title', $episode->title);
@@ -393,6 +402,15 @@ function get_rss_feed($podcast, $serviceSlug = '')
 
         $episode->is_blocked &&
             $item->addChild('block', 'Yes', $itunes_namespace);
+
+        if (!empty($episode->custom_rss)) {
+            array_to_rss(
+                [
+                    'elements' => $episode->custom_rss,
+                ],
+                $item
+            );
+        }
     }
 
     return $rss->asXML();
@@ -429,3 +447,71 @@ function add_category_tag($node, $category)
     }
     $node->addChild('category', $category->apple_category);
 }
+
+/**
+ * Converts XML to array
+ *
+ * @param \SimpleRSSElement $xmlNode
+ *
+ * @return array
+ */
+function rss_to_array($xmlNode)
+{
+    $nameSpaces = [
+        '',
+        'http://www.itunes.com/dtds/podcast-1.0.dtd',
+        'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md',
+    ];
+    $arrayNode = [];
+    $arrayNode['name'] = $xmlNode->getName();
+    $arrayNode['namespace'] = $xmlNode->getNamespaces(false);
+    if (count($xmlNode->attributes()) > 0) {
+        foreach ($xmlNode->attributes() as $key => $value) {
+            $arrayNode['attributes'][$key] = (string) $value;
+        }
+    }
+    $textcontent = trim((string) $xmlNode);
+    if (strlen($textcontent) > 0) {
+        $arrayNode['content'] = $textcontent;
+    }
+    foreach ($nameSpaces as $currentNameSpace) {
+        foreach ($xmlNode->children($currentNameSpace) as $childXmlNode) {
+            $arrayNode['elements'][] = rss_to_array($childXmlNode);
+        }
+    }
+    return $arrayNode;
+}
+
+/**
+ * Inserts array (converted to XML node) in XML node
+ *
+ * @param array $arrayNode
+ * @param \SimpleRSSElement $xmlNode The XML parent node where this arrayNode should be attached
+ *
+ */
+function array_to_rss($arrayNode, &$xmlNode)
+{
+    if (array_key_exists('elements', $arrayNode)) {
+        foreach ($arrayNode['elements'] as $childArrayNode) {
+            $childXmlNode = $xmlNode->addChild(
+                $childArrayNode['name'],
+                array_key_exists('content', $childArrayNode)
+                    ? $childArrayNode['content']
+                    : null,
+                empty($childArrayNode['namespace'])
+                    ? null
+                    : current($childArrayNode['namespace'])
+            );
+            if (array_key_exists('attributes', $childArrayNode)) {
+                foreach (
+                    $childArrayNode['attributes']
+                    as $attributeKey => $attributeValue
+                ) {
+                    $childXmlNode->addAttribute($attributeKey, $attributeValue);
+                }
+            }
+            array_to_rss($childArrayNode, $childXmlNode);
+        }
+    }
+    return $xmlNode;
+}
diff --git a/app/Language/en/Episode.php b/app/Language/en/Episode.php
index 18df1b40f447732545d440ffd5a6fa6058c5554b..27f448e193db26983d39b9529d77cb6e558c5692 100644
--- a/app/Language/en/Episode.php
+++ b/app/Language/en/Episode.php
@@ -87,6 +87,11 @@ return [
         'location_section_subtitle' => 'What place is this episode about?',
         'location_name' => 'Location name or address',
         'location_name_hint' => 'This can be a real place or fictional',
+        'advanced_section_title' => 'Advanced Parameters',
+        'advanced_section_subtitle' =>
+            'If you need RSS tags that Castopod does not handle, set them here.',
+        'custom_rss' => 'Custom RSS tags for the episode',
+        'custom_rss_hint' => 'This will be injected within the ❬item❭ tag.',
         'submit_create' => 'Create episode',
         'submit_edit' => 'Save episode',
     ],
diff --git a/app/Language/en/Podcast.php b/app/Language/en/Podcast.php
index f7c87572990259d40466396c91cf0711fdc3ac97..5afb4554337000019c72b64aab45de5e7724d8e7 100644
--- a/app/Language/en/Podcast.php
+++ b/app/Language/en/Podcast.php
@@ -72,6 +72,11 @@ return [
         'payment_pointer' => 'Payment Pointer for Web Monetization',
         'payment_pointer_hint' =>
             'This is your where you will receive money thanks to Web Monetization',
+        'advanced_section_title' => 'Advanced Parameters',
+        'advanced_section_subtitle' =>
+            'If you need RSS tags that Castopod does not handle, set them here.',
+        'custom_rss' => 'Custom RSS tags for the podcast',
+        'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.',
         'status_section_title' => 'Status',
         'status_section_subtitle' => 'Dead or alive?',
         'block' => 'Podcast should be hidden from all platforms',
diff --git a/app/Language/fr/Episode.php b/app/Language/fr/Episode.php
index 78f94404c6bffa816e3aa1019085b444190a3bb6..70f233af72b7206f35eccaf600c51c50d73caa3b 100644
--- a/app/Language/fr/Episode.php
+++ b/app/Language/fr/Episode.php
@@ -88,6 +88,11 @@ return [
         'location_section_subtitle' => 'De quel lieu cet épisode parle-t-il ?',
         'location_name' => 'Nom ou adresse du lieu',
         'location_name_hint' => 'Ce lieu peut être réel ou fictif',
+        'advanced_section_title' => 'Paramètres avancés',
+        'advanced_section_subtitle' =>
+            'Si vous avez besoin d’une balise que nous n’avons pas couverte, définissez-la ici.',
+        'custom_rss' => 'Balises RSS personnalisées pour l’épisode',
+        'custom_rss_hint' => 'Ceci sera injecté dans la balise ❬item❭.',
         'submit_create' => 'Créer l’épisode',
         'submit_edit' => 'Enregistrer l’épisode',
     ],
diff --git a/app/Language/fr/Podcast.php b/app/Language/fr/Podcast.php
index 20672a4cddd1ee5810aadd130076abe96e493a77..02d3cfb9a82c84e314e9c6fa7ce4fbc82a8e3085 100644
--- a/app/Language/fr/Podcast.php
+++ b/app/Language/fr/Podcast.php
@@ -74,6 +74,11 @@ return [
             'Adresse de paiement (Payment Pointer) pour Web Monetization',
         'payment_pointer_hint' =>
             'L’adresse où vous recevrez de l’argent grâce à Web Monetization',
+        'advanced_section_title' => 'Paramètres avancés',
+        'advanced_section_subtitle' =>
+            'Si vous avez besoin d’une balise que nous n’avons pas couverte, définissez-la ici.',
+        'custom_rss' => 'Balises RSS personnalisées pour le podcast',
+        'custom_rss_hint' => 'Ceci sera injecté dans la balise ❬channel❭.',
         'status_section_title' => 'Statut',
         'status_section_subtitle' => 'Vivant ou mort ?',
         'block' => 'Le podcast doit être masqué sur toutes les plateformes',
diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php
index 3237daafa1b532b741690e45f5784c553ce2e375..6a071434d4b6d0a3fe5057224d8cfc1ce4626ea4 100644
--- a/app/Models/EpisodeModel.php
+++ b/app/Models/EpisodeModel.php
@@ -38,6 +38,7 @@ class EpisodeModel extends Model
         'location_name',
         'location_geo',
         'location_osmid',
+        'custom_rss',
         'published_at',
         'created_by',
         'updated_by',
diff --git a/app/Models/PodcastModel.php b/app/Models/PodcastModel.php
index fc23d5dd02a1d312cde6feba11407ad627d18b6b..6f0e360cd8ceb717d21f530b39d2624c321018e7 100644
--- a/app/Models/PodcastModel.php
+++ b/app/Models/PodcastModel.php
@@ -41,6 +41,7 @@ class PodcastModel extends Model
         'location_geo',
         'location_osmid',
         'payment_pointer',
+        'custom_rss',
         'created_by',
         'updated_by',
     ];
diff --git a/app/Views/admin/episode/create.php b/app/Views/admin/episode/create.php
index 35f6fc0d57a4240a325de22256becaf16a5eb4bc..2c5dffda5d16df0d3162d7df82b9da537cb84040 100644
--- a/app/Views/admin/episode/create.php
+++ b/app/Views/admin/episode/create.php
@@ -324,6 +324,25 @@
 ]) ?>
 <?= form_section_close() ?>
 
+<?= form_section(
+    lang('Episode.form.advanced_section_title'),
+    lang('Episode.form.advanced_section_subtitle')
+) ?>
+<?= form_label(
+    lang('Episode.form.custom_rss'),
+    'custom_rss',
+    [],
+    lang('Episode.form.custom_rss_hint'),
+    true
+) ?>
+<?= form_textarea([
+    'id' => 'custom_rss',
+    'name' => 'custom_rss',
+    'class' => 'form-textarea',
+    'value' => old('custom_rss'),
+]) ?>
+<?= form_section_close() ?>
+
 <?= button(
     lang('Episode.form.submit_create'),
     null,
diff --git a/app/Views/admin/episode/edit.php b/app/Views/admin/episode/edit.php
index 9783ce5b64643a97d6dab379e9a63f7145f79d9a..710cda7eab43a3f72da2c6372bfeea899455a41a 100644
--- a/app/Views/admin/episode/edit.php
+++ b/app/Views/admin/episode/edit.php
@@ -388,6 +388,25 @@
 </div>
 <?= form_section_close() ?>
 
+<?= form_section(
+    lang('Episode.form.advanced_section_title'),
+    lang('Episode.form.advanced_section_subtitle')
+) ?>
+<?= form_label(
+    lang('Episode.form.custom_rss'),
+    'custom_rss',
+    [],
+    lang('Episode.form.custom_rss_hint'),
+    true
+) ?>
+<?= form_textarea([
+    'id' => 'custom_rss',
+    'name' => 'custom_rss',
+    'class' => 'form-textarea',
+    'value' => old('custom_rss', $episode->custom_rss_string),
+]) ?>
+<?= form_section_close() ?>
+
 <?= button(
     lang('Episode.form.submit_edit'),
     null,
diff --git a/app/Views/admin/podcast/create.php b/app/Views/admin/podcast/create.php
index 0989f6398e244fe91494cfb5490e9c70b48effba..33d6d3e8df48af8be6bed5b33054365a59c27444 100644
--- a/app/Views/admin/podcast/create.php
+++ b/app/Views/admin/podcast/create.php
@@ -27,7 +27,6 @@
     'id' => 'image',
     'name' => 'image',
     'class' => 'form-input',
-
     'required' => 'required',
     'type' => 'file',
     'accept' => '.jpg,.jpeg,.png',
@@ -59,27 +58,21 @@
     'required' => 'required',
 ]) ?>
 
-<?= form_fieldset('', ['class' => 'mb-4']) ?>
+<?= form_fieldset('', [
+    'class' => 'mb-4',
+]) ?>
     <legend>
     <?= lang('Podcast.form.type.label') .
         hint_tooltip(lang('Podcast.form.type.hint'), 'ml-1') ?>
     </legend>
     <?= form_radio(
-        [
-            'id' => 'episodic',
-            'name' => 'type',
-            'class' => 'form-radio-btn',
-        ],
+        ['id' => 'episodic', 'name' => 'type', 'class' => 'form-radio-btn'],
         'episodic',
         old('type') ? old('type') == 'episodic' : true
     ) ?>
     <label for="episodic"><?= lang('Podcast.form.type.episodic') ?></label>
     <?= form_radio(
-        [
-            'id' => 'serial',
-            'name' => 'type',
-            'class' => 'form-radio-btn',
-        ],
+        ['id' => 'serial', 'name' => 'type', 'class' => 'form-radio-btn'],
         'serial',
         old('type') ? old('type') == 'serial' : false
     ) ?>
@@ -288,6 +281,25 @@
 ]) ?>
 <?= form_section_close() ?>
 
+<?= form_section(
+    lang('Podcast.form.advanced_section_title'),
+    lang('Podcast.form.advanced_section_subtitle')
+) ?>
+<?= form_label(
+    lang('Podcast.form.custom_rss'),
+    'custom_rss',
+    [],
+    lang('Podcast.form.custom_rss_hint'),
+    true
+) ?>
+<?= form_textarea([
+    'id' => 'custom_rss',
+    'name' => 'custom_rss',
+    'class' => 'form-textarea',
+    'value' => old('custom_rss'),
+]) ?>
+<?= form_section_close() ?>
+
 <?= form_section(
     lang('Podcast.form.status_section_title'),
     lang('Podcast.form.status_section_subtitle')
diff --git a/app/Views/admin/podcast/edit.php b/app/Views/admin/podcast/edit.php
index 0150c65a9db3c5f6d1cf111ccb5e1cbcb2f38b3d..79b30f357b2c03c65b7f15db19f5b62fc4c313eb 100644
--- a/app/Views/admin/podcast/edit.php
+++ b/app/Views/admin/podcast/edit.php
@@ -291,6 +291,25 @@
 ]) ?>
 <?= form_section_close() ?>
 
+<?= form_section(
+    lang('Podcast.form.advanced_section_title'),
+    lang('Podcast.form.advanced_section_subtitle')
+) ?>
+<?= form_label(
+    lang('Podcast.form.custom_rss'),
+    'custom_rss',
+    [],
+    lang('Podcast.form.custom_rss_hint'),
+    true
+) ?>
+<?= form_textarea([
+    'id' => 'custom_rss',
+    'name' => 'custom_rss',
+    'class' => 'form-textarea',
+    'value' => old('custom_rss', $podcast->custom_rss_string),
+]) ?>
+<?= form_section_close() ?>
+
 <?= form_section(
     lang('Podcast.form.status_section_title'),
     lang('Podcast.form.status_section_subtitle')