diff --git a/tests/__data__/expected/_readme.md b/tests/__data__/expected/_readme.md
index 036ca66d..d16e056c 100644
--- a/tests/__data__/expected/_readme.md
+++ b/tests/__data__/expected/_readme.md
@@ -10,48 +10,18 @@ To load a program guide, all you need to do is copy the link to one or more of t
## Guides
-### Grouped by country
-
-
-Expand
-
-
- Country | Channels | EPG |
+ Site | Channels | EPG | Status |
- 🇨🇦 Canada | 2 | https://iptv-org.github.io/epg/guides/ca_en.xml |
- 5 | https://iptv-org.github.io/epg/guides/ca_fr.xml |
- 🇩🇰 Denmark | 1 | https://iptv-org.github.io/epg/guides/dk_da.xml |
+ allente.se | 1 | https://iptv-org.github.io/epg/guides/allente.se.xml |  |
+ sky.com | 1 | https://iptv-org.github.io/epg/guides/sky.com.xml |  |
+ virginmedia.com | 1 | https://iptv-org.github.io/epg/guides/virginmedia.com.xml |  |
-
-
-### Grouped by source
-
-
-Expand
-
-
-
-
-
- Site | Channels | EPG |
-
-
- allente.se | 1 | https://iptv-org.github.io/epg/guides/allente.se/en.xml |
- 1 | https://iptv-org.github.io/epg/guides/allente.se/da.xml |
- sky.com | 1 | https://iptv-org.github.io/epg/guides/sky.com/en.xml |
- virginmedia.com | 1 | https://iptv-org.github.io/epg/guides/virginmedia.com/en.xml |
-
-
-
-
-
-
All guides also have a compressed and JSON version. To download them, simply change the extension from `.xml` to `.xml.gz` or `.json` respectively.
## Contribution
diff --git a/tests/__data__/expected/_status.md b/tests/__data__/expected/_status.md
deleted file mode 100644
index 25e8e613..00000000
--- a/tests/__data__/expected/_status.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Status
-
-
-
-
- Site | Status |
-
-
- example.com |  |
-
-
diff --git a/tests/__data__/expected/api/guides.json b/tests/__data__/expected/api/guides.json
index 35c8273d..a25bcba9 100644
--- a/tests/__data__/expected/api/guides.json
+++ b/tests/__data__/expected/api/guides.json
@@ -1 +1 @@
-[{"channel":"6eren.dk","site":"allente.se","lang":"da","url":"https://iptv-org.github.io/epg/guides/dk_da.xml"},{"channel":"6eren.dk","site":"allente.se","lang":"en","url":"https://iptv-org.github.io/epg/guides/allente.se/en.xml"},{"channel":"6eren.dk","site":"allente.se","lang":"da","url":"https://iptv-org.github.io/epg/guides/allente.se/da.xml"},{"channel":"ABCSpark.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"},{"channel":"BBCEarthCanada.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"},{"channel":"BBCNews.uk","site":"virginmedia.com","lang":"en","url":"https://iptv-org.github.io/epg/guides/virginmedia.com/en.xml"},{"channel":"BBCNews.uk","site":"sky.com","lang":"en","url":"https://iptv-org.github.io/epg/guides/sky.com/en.xml"},{"channel":"CFMTDT.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"},{"channel":"CFMTDT.ca","site":"tvhebdo.com","lang":"en","url":"https://iptv-org.github.io/epg/guides/ca_en.xml"},{"channel":"CanalVie.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"},{"channel":"CanalVie.ca","site":"tvhebdo.com","lang":"en","url":"https://iptv-org.github.io/epg/guides/ca_en.xml"},{"channel":"beINSportsCanada.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"}]
\ No newline at end of file
+[{"channel":"6eren.dk","site":"allente.se","lang":"en","url":"https://iptv-org.github.io/epg/guides/allente.se.xml"},{"channel":"6eren.dk","site":"allente.se","lang":"da","url":"https://iptv-org.github.io/epg/guides/allente.se.xml"},{"channel":"BBCNews.uk","site":"virginmedia.com","lang":"en","url":"https://iptv-org.github.io/epg/guides/virginmedia.com.xml"},{"channel":"BBCNews.uk","site":"sky.com","lang":"en","url":"https://iptv-org.github.io/epg/guides/sky.com.xml"},{"channel":"BBCNews.uk","site":"sky.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/sky.com.xml"}]
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/allente.se/da.json b/tests/__data__/expected/guides/allente.se.json
similarity index 100%
rename from tests/__data__/expected/guides/allente.se/da.json
rename to tests/__data__/expected/guides/allente.se.json
diff --git a/tests/__data__/expected/guides/allente.se/da.xml b/tests/__data__/expected/guides/allente.se.xml
similarity index 100%
rename from tests/__data__/expected/guides/allente.se/da.xml
rename to tests/__data__/expected/guides/allente.se.xml
diff --git a/tests/__data__/expected/guides/allente.se/da.xml.gz b/tests/__data__/expected/guides/allente.se.xml.gz
similarity index 100%
rename from tests/__data__/expected/guides/allente.se/da.xml.gz
rename to tests/__data__/expected/guides/allente.se.xml.gz
diff --git a/tests/__data__/expected/guides/dk.json b/tests/__data__/expected/guides/dk.json
deleted file mode 100644
index 37dcb8ba..00000000
--- a/tests/__data__/expected/guides/dk.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[{"id":"6eren.dk","name":"6'eren","site":"allente.se","lang":"da","logo":"https://upload.wikimedia.org/wikipedia/commons/6/64/6%27eren_2015.png","url":"https://allente.se"}],"programs":[{"site":"allente.se","channel":"6eren.dk","titles":[{"value":"Diners, Drive-Ins and Dives","lang":"da"}],"sub_titles":[],"descriptions":[{"value":"Underholdning","lang":"da"}],"icon":{"src":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/487/2022-10-24/se.cs.6eren.event.B_0254194276971024040000.jpg?size=2560x1440"},"episodeNumbers":[{"system":"xmltv_ns","value":"23.5.0/1"},{"system":"onscreen","value":"S24E06"}],"date":null,"start":1666584000000,"stop":1666585500000,"urls":[],"ratings":[],"categories":[{"value":"series","lang":"da"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/dk.xml b/tests/__data__/expected/guides/dk.xml
deleted file mode 100644
index 40e099ac..00000000
--- a/tests/__data__/expected/guides/dk.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-6'erenhttps://allente.se
-Diners, Drive-Ins and DivesUnderholdningseries23.5.0/1S24E06
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/dk.xml.gz b/tests/__data__/expected/guides/dk.xml.gz
deleted file mode 100644
index fe964bfa..00000000
Binary files a/tests/__data__/expected/guides/dk.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/guides/sky.com.json b/tests/__data__/expected/guides/sky.com.json
new file mode 100644
index 00000000..6aba8984
--- /dev/null
+++ b/tests/__data__/expected/guides/sky.com.json
@@ -0,0 +1 @@
+{"channels":[{"id":"BBCNews.uk","name":"BBC News","site":"sky.com","lang":"en","logo":"https://i.imgur.com/rPzH88J.png","url":"https://sky.com"},{"id":"CNN.us","name":"CNN","site":"sky.com","lang":"fr","logo":"https://www.directv.com/images/logos/channels/dark/large/579.png","url":"https://sky.com"}],"programs":[{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"},{"value":"BBC News at One","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news from the BBC. [S,SL]","lang":"en"},{"value":"Les dernières nouvelles nationales et internationales de la BBC. [S,SL]","lang":"fr"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]},{"site":"sky.com","channel":"CNN.us","titles":[{"value":"French title","lang":"fr"}],"sub_titles":[],"descriptions":[],"icon":{"src":""},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/sky.com.xml b/tests/__data__/expected/guides/sky.com.xml
new file mode 100644
index 00000000..454db214
--- /dev/null
+++ b/tests/__data__/expected/guides/sky.com.xml
@@ -0,0 +1,6 @@
+
+BBC Newshttps://sky.com
+CNNhttps://sky.com
+BBC News at OneBBC News at OneThe latest national and international news from the BBC. [S,SL]Les dernières nouvelles nationales et internationales de la BBC. [S,SL]
+French title
+
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/sky.com.xml.gz b/tests/__data__/expected/guides/sky.com.xml.gz
new file mode 100644
index 00000000..d2255843
Binary files /dev/null and b/tests/__data__/expected/guides/sky.com.xml.gz differ
diff --git a/tests/__data__/expected/guides/sky.com/en.json b/tests/__data__/expected/guides/sky.com/en.json
deleted file mode 100644
index 03f35c39..00000000
--- a/tests/__data__/expected/guides/sky.com/en.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[{"id":"BBCNews.uk","name":"BBC News","site":"sky.com","lang":"en","logo":"https://i.imgur.com/rPzH88J.png","url":"https://sky.com"}],"programs":[{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news from the BBC. [S,SL]","lang":"en"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/sky.com/en.xml b/tests/__data__/expected/guides/sky.com/en.xml
deleted file mode 100644
index 1eeac223..00000000
--- a/tests/__data__/expected/guides/sky.com/en.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-BBC Newshttps://sky.com
-BBC News at OneThe latest national and international news from the BBC. [S,SL]
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/sky.com/en.xml.gz b/tests/__data__/expected/guides/sky.com/en.xml.gz
deleted file mode 100644
index c3f1f279..00000000
Binary files a/tests/__data__/expected/guides/sky.com/en.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/guides/uk.json b/tests/__data__/expected/guides/virginmedia.com.json
similarity index 100%
rename from tests/__data__/expected/guides/uk.json
rename to tests/__data__/expected/guides/virginmedia.com.json
diff --git a/tests/__data__/expected/guides/uk.xml b/tests/__data__/expected/guides/virginmedia.com.xml
similarity index 100%
rename from tests/__data__/expected/guides/uk.xml
rename to tests/__data__/expected/guides/virginmedia.com.xml
diff --git a/tests/__data__/expected/guides/uk.xml.gz b/tests/__data__/expected/guides/virginmedia.com.xml.gz
similarity index 100%
rename from tests/__data__/expected/guides/uk.xml.gz
rename to tests/__data__/expected/guides/virginmedia.com.xml.gz
diff --git a/tests/__data__/expected/guides/virginmedia.com/en.json b/tests/__data__/expected/guides/virginmedia.com/en.json
deleted file mode 100644
index 5ff6b490..00000000
--- a/tests/__data__/expected/guides/virginmedia.com/en.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[{"id":"BBCNews.uk","name":"BBC News","site":"virginmedia.com","lang":"en","logo":"https://i.imgur.com/rPzH88J.png","url":"https://virginmedia.com"}],"programs":[{"site":"virginmedia.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news, followed by weather.","lang":"en"}],"icon":{"src":""},"episodeNumbers":[{"system":"xmltv_ns","value":"96839999.145799123.0/1"},{"system":"onscreen","value":"S96840000E145799124"}],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[{"value":"News","lang":"en"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/virginmedia.com/en.xml b/tests/__data__/expected/guides/virginmedia.com/en.xml
deleted file mode 100644
index 667c2f07..00000000
--- a/tests/__data__/expected/guides/virginmedia.com/en.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-BBC Newshttps://virginmedia.com
-BBC News at OneThe latest national and international news, followed by weather.News96839999.145799123.0/1S96840000E145799124
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/virginmedia.com/en.xml.gz b/tests/__data__/expected/guides/virginmedia.com/en.xml.gz
deleted file mode 100644
index c41ccf96..00000000
Binary files a/tests/__data__/expected/guides/virginmedia.com/en.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/logs/guides/update.log b/tests/__data__/expected/logs/guides/update.log
index abebf1c4..a1fd872d 100644
--- a/tests/__data__/expected/logs/guides/update.log
+++ b/tests/__data__/expected/logs/guides/update.log
@@ -1,6 +1,5 @@
-{"groupedBy":"country","country":"DK","lang":"da","site":"allente.se","channel":"6eren.dk","filename":"dk"}
-{"groupedBy":"country","country":"UK","lang":"en","site":"virginmedia.com","channel":"BBCNews.uk","filename":"uk"}
-{"groupedBy":"site+lang","lang":"da","site":"allente.se","channel":"6eren.dk","filename":"allente.se/da"}
-{"groupedBy":"site+lang","lang":"en","site":"virginmedia.com","channel":"BBCNews.uk","filename":"virginmedia.com/en"}
-{"groupedBy":"site+lang","lang":"fr","site":"sky.com","channel":"CNN.us","filename":"sky.com/fr"}
-{"groupedBy":"site+lang","lang":"en","site":"sky.com","channel":"BBCNews.uk","filename":"sky.com/en"}
\ No newline at end of file
+{"lang":"da","site":"allente.se","channel":"6eren.dk","filename":"allente.se"}
+{"lang":"en","site":"virginmedia.com","channel":"BBCNews.uk","filename":"virginmedia.com"}
+{"lang":"en","site":"sky.com","channel":"BBCNews.uk","filename":"sky.com"}
+{"lang":"fr","site":"sky.com","channel":"BBCNews.uk","filename":"sky.com"}
+{"lang":"fr","site":"sky.com","channel":"CNN.us","filename":"sky.com"}
\ No newline at end of file
diff --git a/tests/__data__/input/database/update-guides/programs.db b/tests/__data__/input/database/update-guides/programs.db
index e72a3252..0bedb48e 100644
--- a/tests/__data__/input/database/update-guides/programs.db
+++ b/tests/__data__/input/database/update-guides/programs.db
@@ -2,4 +2,5 @@
{"site":"allente.se","channel":"6eren.dk","titles":[{"value":"Diners, Drive-Ins and Dives","lang":"da"}],"sub_titles":[],"descriptions":[{"value":"Underholdning","lang":"da"}],"icon":{"src":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/487/2022-10-24/se.cs.6eren.event.B_0254194276971024040000.jpg?size=2560x1440"},"episodeNumbers":[{"system":"xmltv_ns","value":"23.5.0/1"},{"system":"onscreen","value":"S24E06"}],"date":null,"start":1666584000000,"stop":1666585500000,"urls":[],"ratings":[],"categories":[{"value":"series","lang":"da"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"f6cxTM73LfZ8TdYz","_id":"HxsrBRTFj1z05TAK"}
{"site":"virginmedia.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news, followed by weather.","lang":"en"}],"icon":{"src":""},"episodeNumbers":[{"system":"xmltv_ns","value":"96839999.145799123.0/1"},{"system":"onscreen","value":"S96840000E145799124"}],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[{"value":"News","lang":"en"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"lNXh3lBnb4n1DBzs","_id":"quKCInjZV98xFUAf"}
{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news from the BBC. [S,SL]","lang":"en"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"36duI92slofEXlSa","_id":"ryzed0Bqda1QtE7i"}
+{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"Les dernières nouvelles nationales et internationales de la BBC. [S,SL]","lang":"fr"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"32duI92slofEXlSa","_id":"r5zed0Bqda1QtE7i"}
{"site":"sky.com","channel":"CNN.us","titles":[{"value":"French title","lang":"fr"}],"sub_titles":[],"descriptions":[],"icon":{},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"37duI92slofEXlSa","_id":"rxzed0Bqda1QtE7i"}
\ No newline at end of file
diff --git a/tests/__data__/input/logs/guides/update.log b/tests/__data__/input/logs/guides/update.log
index cde0637c..1e9a9cc3 100644
--- a/tests/__data__/input/logs/guides/update.log
+++ b/tests/__data__/input/logs/guides/update.log
@@ -1,12 +1,5 @@
-{"groupedBy":"country","country":"DK","lang":"da","site":"allente.se","channel":"6eren.dk","filename":"dk_da"}
-{"groupedBy":"country","country":"CA","lang":"fr","site":"tvhebdo.com","channel":"ABCSpark.ca","filename":"ca_fr"}
-{"groupedBy":"country","country":"CA","lang":"fr","site":"tvhebdo.com","channel":"BBCEarthCanada.ca","filename":"ca_fr"}
-{"groupedBy":"country","country":"CA","lang":"fr","site":"tvhebdo.com","channel":"beINSportsCanada.ca","filename":"ca_fr"}
-{"groupedBy":"country","country":"CA","lang":"fr","site":"tvhebdo.com","channel":"CanalVie.ca","filename":"ca_fr"}
-{"groupedBy":"country","country":"CA","lang":"fr","site":"tvhebdo.com","channel":"CFMTDT.ca","filename":"ca_fr"}
-{"groupedBy":"country","country":"CA","lang":"en","site":"tvhebdo.com","channel":"CanalVie.ca","filename":"ca_en"}
-{"groupedBy":"country","country":"CA","lang":"en","site":"tvhebdo.com","channel":"CFMTDT.ca","filename":"ca_en"}
-{"groupedBy":"site+lang","lang":"en","site":"allente.se","channel":"6eren.dk","filename":"allente.se/en"}
-{"groupedBy":"site+lang","lang":"da","site":"allente.se","channel":"6eren.dk","filename":"allente.se/da"}
-{"groupedBy":"site+lang","lang":"en","site":"virginmedia.com","channel":"BBCNews.uk","filename":"virginmedia.com/en"}
-{"groupedBy":"site+lang","lang":"en","site":"sky.com","channel":"BBCNews.uk","filename":"sky.com/en"}
+{"lang":"en","site":"allente.se","channel":"6eren.dk","filename":"allente.se"}
+{"lang":"da","site":"allente.se","channel":"6eren.dk","filename":"allente.se"}
+{"lang":"en","site":"virginmedia.com","channel":"BBCNews.uk","filename":"virginmedia.com"}
+{"lang":"en","site":"sky.com","channel":"BBCNews.uk","filename":"sky.com"}
+{"lang":"fr","site":"sky.com","channel":"BBCNews.uk","filename":"sky.com"}