diff -pruN 19.0.1+ds1-2/azure-pipelines.yml 20.2.0+ds1-1/azure-pipelines.yml
--- 19.0.1+ds1-2/azure-pipelines.yml	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/azure-pipelines.yml	2022-01-01 15:23:46.000000000 +0000
@@ -4,7 +4,7 @@ variables:
 trigger:
   branches:
     include:
-    - Matrix
+    - Nexus
     - releases/*
   paths:
     include:
@@ -46,7 +46,7 @@ jobs:
 
     - script: |
         cd ..
-        git clone --branch Matrix --depth=1 https://github.com/xbmc/xbmc.git kodi
+        git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git kodi
         cd $(Build.SourcesDirectory)
         mkdir build
         cd build
diff -pruN 19.0.1+ds1-2/debian/changelog 20.2.0+ds1-1/debian/changelog
--- 19.0.1+ds1-2/debian/changelog	2022-04-21 09:13:40.000000000 +0000
+++ 20.2.0+ds1-1/debian/changelog	2022-08-04 09:54:56.000000000 +0000
@@ -1,3 +1,10 @@
+kodi-pvr-dvblink (20.2.0+ds1-1) unstable; urgency=medium
+
+  * New upstream version 20.2.0+ds1
+  * Prepare for v20 in unstable
+
+ -- Vasyl Gello <vasek.gello@gmail.com>  Thu, 04 Aug 2022 09:54:56 +0000
+
 kodi-pvr-dvblink (19.0.1+ds1-2) unstable; urgency=medium
 
   [ Debian Janitor ]
diff -pruN 19.0.1+ds1-2/debian/control 20.2.0+ds1-1/debian/control
--- 19.0.1+ds1-2/debian/control	2022-04-21 09:13:40.000000000 +0000
+++ 20.2.0+ds1-1/debian/control	2022-08-04 09:54:56.000000000 +0000
@@ -5,9 +5,9 @@ Maintainer: Debian Multimedia Maintainer
 Uploaders: Vasyl Gello <vasek.gello@gmail.com>
 Build-Depends: debhelper-compat (= 13)
 Build-Depends-Arch: cmake,
-               dh-sequence-kodiaddon (>= 2:19~),
+               dh-sequence-kodiaddon (>= 2:20~),
                libtinyxml2-dev
-Standards-Version: 4.6.0
+Standards-Version: 4.6.1
 Rules-Requires-Root: no
 Vcs-Browser: https://salsa.debian.org/multimedia-team/kodi-media-center/kodi-pvr-dvblink
 Vcs-Git: https://salsa.debian.org/multimedia-team/kodi-media-center/kodi-pvr-dvblink.git
diff -pruN 19.0.1+ds1-2/debian/copyright 20.2.0+ds1-1/debian/copyright
--- 19.0.1+ds1-2/debian/copyright	2022-04-21 09:13:40.000000000 +0000
+++ 20.2.0+ds1-1/debian/copyright	2022-08-04 09:54:56.000000000 +0000
@@ -18,7 +18,7 @@ Comment: License retrieved from src/Base
 
 Files: lib/libdvblinkremote/*
 Copyright: 2012 Marcus Efraimsson
- 2013-2021 Team Kodi
+ 2013-2022 Team Kodi
 License: MIT
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
diff -pruN 19.0.1+ds1-2/debian/watch 20.2.0+ds1-1/debian/watch
--- 19.0.1+ds1-2/debian/watch	2021-08-26 10:24:53.000000000 +0000
+++ 20.2.0+ds1-1/debian/watch	2022-08-04 09:54:56.000000000 +0000
@@ -5,4 +5,4 @@ opts="repack, \
       repacksuffix=+ds1, \
       dversionmangle=auto" \
 https://github.com/kodi-pvr/pvr.dvblink/releases \
-/kodi-pvr/pvr.dvblink/archive/refs/tags/?(\d\S*)-Matrix\.tar\.gz
+/kodi-pvr/pvr.dvblink/archive/refs/tags/?(\d\S*)-Nexus\.tar\.gz
diff -pruN 19.0.1+ds1-2/.github/workflows/changelog-and-release.yml 20.2.0+ds1-1/.github/workflows/changelog-and-release.yml
--- 19.0.1+ds1-2/.github/workflows/changelog-and-release.yml	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/.github/workflows/changelog-and-release.yml	2022-01-01 15:23:46.000000000 +0000
@@ -133,7 +133,7 @@ jobs:
         shell: bash
 
       # Create a release at {steps.required-variables.outputs.branch}
-      # - tag and release name format: {steps.required-variables.outputs.version}-{steps.required-variables.outputs.branch} ie. 1.0.0-Matrix
+      # - tag and release name format: {steps.required-variables.outputs.version}-{steps.required-variables.outputs.branch} ie. 20.0.0-Nexus
       # - release body: {steps.required-variables.outputs.changes}
       - name: Create Release
         id: create-release
diff -pruN 19.0.1+ds1-2/.github/workflows/release.yml 20.2.0+ds1-1/.github/workflows/release.yml
--- 19.0.1+ds1-2/.github/workflows/release.yml	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/.github/workflows/release.yml	2022-01-01 15:23:46.000000000 +0000
@@ -50,7 +50,7 @@ jobs:
         working-directory: ${{ github.event.repository.name }}
 
       # Create a release at {steps.required-variables.outputs.branch}
-      # - tag and release name format: {steps.required-variables.outputs.version}-{steps.required-variables.outputs.branch} ie. 1.0.0-Matrix
+      # - tag and release name format: {steps.required-variables.outputs.version}-{steps.required-variables.outputs.branch} ie. 20.0.0-Nexus
       # - release body: {steps.required-variables.outputs.changes}
       - name: Create Release
         id: create-release
diff -pruN 19.0.1+ds1-2/Jenkinsfile 20.2.0+ds1-1/Jenkinsfile
--- 19.0.1+ds1-2/Jenkinsfile	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/Jenkinsfile	2022-01-01 15:23:46.000000000 +0000
@@ -1 +1 @@
-buildPlugin(version: "Matrix")
+buildPlugin(version: "Nexus")
diff -pruN 19.0.1+ds1-2/pvr.dvblink/addon.xml.in 20.2.0+ds1-1/pvr.dvblink/addon.xml.in
--- 19.0.1+ds1-2/pvr.dvblink/addon.xml.in	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/pvr.dvblink/addon.xml.in	2022-01-01 15:23:46.000000000 +0000
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="pvr.dvblink"
-  version="19.0.1"
+  version="20.2.0"
   name="TVMosaic/DVBLink PVR Client"
   provider-name="DVBLogic">
   <requires>@ADDON_DEPENDS@</requires>
diff -pruN 19.0.1+ds1-2/pvr.dvblink/changelog.txt 20.2.0+ds1-1/pvr.dvblink/changelog.txt
--- 19.0.1+ds1-2/pvr.dvblink/changelog.txt	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/pvr.dvblink/changelog.txt	2022-01-01 15:23:46.000000000 +0000
@@ -1,13 +1,19 @@
-v19.0.1
-- Translations updates from Weblate
-	- be_by, da_dk, el_gr, es_mx, is_is, ko_kr, lt_lt, nb_no, nl_nl, pl_pl, si_lk
+v20.2.0
+- Translation updates by Weblate
+- Kodi main API update to version 2.0.0
 
-v19.0.0
+v20.1.0
+- Kodi PVR API to 8.0.0
+  - Add supports recordings delete capability
+  - Enforce EDL limits
+
+v20.0.0
+- Updated dependency TinyXML2 to version 9.0.0
 - Language update
   - To allow also addon.xml content update by Weblate
 - Improved debian packaging
-- Changed test builds to 'Kodi 19 Matrix'
-- Increased version to 19.0.0
+- Changed test builds to 'Kodi 20 Nexus'
+- Increased version to 20.0.0
   - With start of Kodi 20 Nexus, takes addon as major the same version number as Kodi.
     This done to know easier to which Kodi the addon works.
 
diff -pruN 19.0.1+ds1-2/README.md 20.2.0+ds1-1/README.md
--- 19.0.1+ds1-2/README.md	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/README.md	2022-01-01 15:23:46.000000000 +0000
@@ -1,6 +1,6 @@
 [![License: GPL-2.0-or-later](https://img.shields.io/badge/License-GPL%20v2+-blue.svg)](LICENSE.md)
-[![Build Status](https://dev.azure.com/teamkodi/kodi-pvr/_apis/build/status/kodi-pvr.pvr.dvblink?branchName=Matrix)](https://dev.azure.com/teamkodi/kodi-pvr/_build/latest?definitionId=59&branchName=Matrix)
-[![Build Status](https://jenkins.kodi.tv/view/Addons/job/kodi-pvr/job/pvr.dvblink/job/Matrix/badge/icon)](https://jenkins.kodi.tv/blue/organizations/jenkins/kodi-pvr%2Fpvr.dvblink/branches/)
+[![Build Status](https://dev.azure.com/teamkodi/kodi-pvr/_apis/build/status/kodi-pvr.pvr.dvblink?branchName=Nexus)](https://dev.azure.com/teamkodi/kodi-pvr/_build/latest?definitionId=59&branchName=Nexus)
+[![Build Status](https://jenkins.kodi.tv/view/Addons/job/kodi-pvr/job/pvr.dvblink/job/Nexus/badge/icon)](https://jenkins.kodi.tv/blue/organizations/jenkins/kodi-pvr%2Fpvr.dvblink/branches/)
 [![Coverity Scan Build Status](https://scan.coverity.com/projects/5120/badge.svg)](https://scan.coverity.com/projects/5120)
 
 # DVBLink PVR
@@ -10,8 +10,8 @@ DVBLink PVR client addon for [Kodi](http
 
 ### Linux
 
-1. `git clone --branch Matrix https://github.com/xbmc/xbmc.git`
-2. `git clone --branch Matrix https://github.com/kodi-pvr/pvr.dvblink.git`
+1. `git clone --branch master https://github.com/xbmc/xbmc.git`
+2. `git clone https://github.com/kodi-pvr/pvr.dvblink.git`
 3. `cd pvr.dvblink && mkdir build && cd build`
 4. `cmake -DADDONS_TO_BUILD=pvr.dvblink -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/cmake/addons`
 5. `make`
diff -pruN 19.0.1+ds1-2/src/addon.cpp 20.2.0+ds1-1/src/addon.cpp
--- 19.0.1+ds1-2/src/addon.cpp	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/addon.cpp	2022-01-01 15:23:46.000000000 +0000
@@ -12,13 +12,10 @@
 
 #include <chrono>
 
-ADDON_STATUS CDVBLinkAddon::CreateInstance(int instanceType,
-                                           const std::string& instanceID,
-                                           KODI_HANDLE instance,
-                                           const std::string& version,
-                                           KODI_HANDLE& addonInstance)
+ADDON_STATUS CDVBLinkAddon::CreateInstance(const kodi::addon::IInstanceInfo& instance,
+                                           KODI_ADDON_INSTANCE_HDL& hdl)
 {
-  if (instanceType == ADDON_INSTANCE_PVR)
+  if (instance.IsType(ADDON_INSTANCE_PVR))
   {
     m_settings.Load();
 
@@ -29,13 +26,13 @@ ADDON_STATUS CDVBLinkAddon::CreateInstan
               clientname.c_str());
 
     DVBLinkClient* client =
-        new DVBLinkClient(*this, instance, version, clientname, m_settings.Hostname(),
-                          m_settings.Port(), m_settings.ShowInfoMSG(), m_settings.Username(),
-                          m_settings.Password(), m_settings.AddRecEpisode2title(),
-                          m_settings.GroupRecBySeries(), m_settings.NoGroupSingleRec(),
-                          m_settings.DefaultUpdateInterval(), m_settings.DefaultRecShowType());
+        new DVBLinkClient(*this, instance, clientname, m_settings.Hostname(), m_settings.Port(),
+                          m_settings.ShowInfoMSG(), m_settings.Username(), m_settings.Password(),
+                          m_settings.AddRecEpisode2title(), m_settings.GroupRecBySeries(),
+                          m_settings.NoGroupSingleRec(), m_settings.DefaultUpdateInterval(),
+                          m_settings.DefaultRecShowType());
 
-    addonInstance = client;
+    hdl = client;
 
     if (!client->GetStatus())
       return ADDON_STATUS_LOST_CONNECTION;
@@ -47,7 +44,7 @@ ADDON_STATUS CDVBLinkAddon::CreateInstan
 }
 
 ADDON_STATUS CDVBLinkAddon::SetSetting(const std::string& settingName,
-                                       const kodi::CSettingValue& settingValue)
+                                       const kodi::addon::CSettingValue& settingValue)
 {
   return m_settings.SetSetting(settingName, settingValue);
 }
diff -pruN 19.0.1+ds1-2/src/addon.h 20.2.0+ds1-1/src/addon.h
--- 19.0.1+ds1-2/src/addon.h	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/addon.h	2022-01-01 15:23:46.000000000 +0000
@@ -14,19 +14,16 @@
 
 class cPVRClientArgusTV;
 
-class ATTRIBUTE_HIDDEN CDVBLinkAddon : public kodi::addon::CAddonBase
+class ATTR_DLL_LOCAL CDVBLinkAddon : public kodi::addon::CAddonBase
 {
 public:
   CDVBLinkAddon() = default;
 
-  ADDON_STATUS CreateInstance(int instanceType,
-                              const std::string& instanceID,
-                              KODI_HANDLE instance,
-                              const std::string& version,
-                              KODI_HANDLE& addonInstance) override;
+  ADDON_STATUS CreateInstance(const kodi::addon::IInstanceInfo& instance,
+                              KODI_ADDON_INSTANCE_HDL& hdl) override;
 
   ADDON_STATUS SetSetting(const std::string& settingName,
-                          const kodi::CSettingValue& settingValue) override;
+                          const kodi::addon::CSettingValue& settingValue) override;
   const CSettings& GetSettings() const { return m_settings; }
 
 private:
diff -pruN 19.0.1+ds1-2/src/DVBLinkClient.cpp 20.2.0+ds1-1/src/DVBLinkClient.cpp
--- 19.0.1+ds1-2/src/DVBLinkClient.cpp	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/DVBLinkClient.cpp	2022-01-01 15:23:46.000000000 +0000
@@ -110,8 +110,7 @@ void DVBLinkClient::get_server_caps()
 }
 
 DVBLinkClient::DVBLinkClient(const CDVBLinkAddon& base,
-                             KODI_HANDLE instance,
-                             const std::string& kodiVersion,
+                             const kodi::addon::IInstanceInfo& instance,
                              std::string clientname,
                              std::string hostname,
                              int port,
@@ -123,7 +122,7 @@ DVBLinkClient::DVBLinkClient(const CDVBL
                              bool no_group_single_rec,
                              int default_update_interval,
                              int default_rec_show_type)
-  : kodi::addon::CInstancePVRClient(instance, kodiVersion),
+  : kodi::addon::CInstancePVRClient(instance),
     connection_props_(hostname, port, username, password, clientname),
     m_base(base)
 {
@@ -219,9 +218,9 @@ DVBLinkClient::DVBLinkClient(const CDVBL
               connection_props_.address_.c_str());
     if (m_showinfomsg)
     {
-      kodi::QueueFormattedNotification(QUEUE_INFO, kodi::GetLocalizedString(32001).c_str(),
+      kodi::QueueFormattedNotification(QUEUE_INFO, kodi::addon::GetLocalizedString(32001).c_str(),
                                        connection_props_.address_.c_str());
-      kodi::QueueFormattedNotification(QUEUE_INFO, kodi::GetLocalizedString(32002).c_str(),
+      kodi::QueueFormattedNotification(QUEUE_INFO, kodi::addon::GetLocalizedString(32002).c_str(),
                                        m_channels.size());
     }
 
@@ -239,7 +238,7 @@ DVBLinkClient::DVBLinkClient(const CDVBL
   }
   else
   {
-    kodi::QueueFormattedNotification(QUEUE_ERROR, kodi::GetLocalizedString(32003).c_str(),
+    kodi::QueueFormattedNotification(QUEUE_ERROR, kodi::addon::GetLocalizedString(32003).c_str(),
                                      connection_props_.address_.c_str(), (int)status);
     kodi::Log(ADDON_LOG_ERROR,
               "Could not connect to DVBLink Server '%s' on port '%i' with username '%s' (Error "
@@ -282,6 +281,7 @@ PVR_ERROR DVBLinkClient::GetCapabilities
 
   capabilities.SetSupportsEPG(true);
   capabilities.SetSupportsRecordings(server_caps_.recordings_supported_);
+  capabilities.SetSupportsRecordingsDelete(server_caps_.recordings_supported_);
   capabilities.SetSupportsRecordingsUndelete(false);
   capabilities.SetSupportsTimers(server_caps_.recordings_supported_);
   capabilities.SetSupportsTV(true);
@@ -500,23 +500,23 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
   static std::vector<kodi::addon::PVRTypeIntValue> recordingLimitValues;
   if (recordingLimitValues.size() == 0)
   {
-    recordingLimitValues.emplace_back(dcrn_keep_all, kodi::GetLocalizedString(32026));
-    recordingLimitValues.emplace_back(dcrn_keep_1, kodi::GetLocalizedString(32027));
-    recordingLimitValues.emplace_back(dcrn_keep_2, kodi::GetLocalizedString(32028));
-    recordingLimitValues.emplace_back(dcrn_keep_3, kodi::GetLocalizedString(32029));
-    recordingLimitValues.emplace_back(dcrn_keep_4, kodi::GetLocalizedString(32030));
-    recordingLimitValues.emplace_back(dcrn_keep_5, kodi::GetLocalizedString(32031));
-    recordingLimitValues.emplace_back(dcrn_keep_6, kodi::GetLocalizedString(32032));
-    recordingLimitValues.emplace_back(dcrn_keep_7, kodi::GetLocalizedString(32033));
-    recordingLimitValues.emplace_back(dcrn_keep_10, kodi::GetLocalizedString(32034));
+    recordingLimitValues.emplace_back(dcrn_keep_all, kodi::addon::GetLocalizedString(32026));
+    recordingLimitValues.emplace_back(dcrn_keep_1, kodi::addon::GetLocalizedString(32027));
+    recordingLimitValues.emplace_back(dcrn_keep_2, kodi::addon::GetLocalizedString(32028));
+    recordingLimitValues.emplace_back(dcrn_keep_3, kodi::addon::GetLocalizedString(32029));
+    recordingLimitValues.emplace_back(dcrn_keep_4, kodi::addon::GetLocalizedString(32030));
+    recordingLimitValues.emplace_back(dcrn_keep_5, kodi::addon::GetLocalizedString(32031));
+    recordingLimitValues.emplace_back(dcrn_keep_6, kodi::addon::GetLocalizedString(32032));
+    recordingLimitValues.emplace_back(dcrn_keep_7, kodi::addon::GetLocalizedString(32033));
+    recordingLimitValues.emplace_back(dcrn_keep_10, kodi::addon::GetLocalizedString(32034));
   }
 
   /* PVR_Timer.iPreventDuplicateEpisodes values and presentation.*/
   static std::vector<kodi::addon::PVRTypeIntValue> showTypeValues;
   if (showTypeValues.size() == 0)
   {
-    showTypeValues.emplace_back(dcrs_record_all, kodi::GetLocalizedString(32035));
-    showTypeValues.emplace_back(dcrs_record_new_only, kodi::GetLocalizedString(32036));
+    showTypeValues.emplace_back(dcrs_record_all, kodi::addon::GetLocalizedString(32035));
+    showTypeValues.emplace_back(dcrs_record_new_only, kodi::addon::GetLocalizedString(32036));
   }
 
   static std::vector<kodi::addon::PVRTypeIntValue> emptyList;
@@ -562,7 +562,7 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
             /* Attributes. */
             TIMER_MANUAL_ATTRIBS,
             /* Description. */
-            kodi::GetLocalizedString(32037),
+            kodi::addon::GetLocalizedString(32037),
             /* Values definitions for attributes. */
             recordingLimitValues, default_rec_limit_, showTypeValues, default_rec_show_type_)));
 
@@ -574,7 +574,7 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
             /* Attributes. */
             TIMER_EPG_ATTRIBS,
             /* Description. */
-            kodi::GetLocalizedString(32038),
+            kodi::addon::GetLocalizedString(32038),
             /* Values definitions for attributes. */
             recordingLimitValues, default_rec_limit_, showTypeValues, default_rec_show_type_)));
 
@@ -586,7 +586,7 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
             /* Attributes. */
             TIMER_MANUAL_CHILD_ATTRIBUTES,
             /* Description. */
-            kodi::GetLocalizedString(32039),
+            kodi::addon::GetLocalizedString(32039),
             /* Values definitions for attributes. */
             recordingLimitValues, default_rec_limit_, showTypeValues, default_rec_show_type_)));
 
@@ -598,7 +598,7 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
             /* Attributes. */
             TIMER_EPG_CHILD_ATTRIBUTES,
             /* Description. */
-            kodi::GetLocalizedString(32040),
+            kodi::addon::GetLocalizedString(32040),
             /* Values definitions for attributes. */
             recordingLimitValues, default_rec_limit_, showTypeValues, default_rec_show_type_)));
 
@@ -610,7 +610,7 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
             /* Attributes. */
             TIMER_KEYWORD_CHILD_ATTRIBUTES,
             /* Description. */
-            kodi::GetLocalizedString(32041),
+            kodi::addon::GetLocalizedString(32041),
             /* Values definitions for attributes. */
             recordingLimitValues, default_rec_limit_, showTypeValues, default_rec_show_type_)));
 
@@ -622,7 +622,7 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
             /* Attributes. */
             TIMER_MANUAL_ATTRIBS | TIMER_REPEATING_MANUAL_ATTRIBS,
             /* Description. */
-            kodi::GetLocalizedString(32042),
+            kodi::addon::GetLocalizedString(32042),
             /* Values definitions for attributes. */
             recordingLimitValues, default_rec_limit_, showTypeValues, default_rec_show_type_)));
 
@@ -639,7 +639,7 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
             /* Attributes. */
             repeating_epg_attrs,
             /* Description. */
-            kodi::GetLocalizedString(32043),
+            kodi::addon::GetLocalizedString(32043),
             /* Values definitions for attributes. */
             recordingLimitValues, default_rec_limit_, showTypeValues, default_rec_show_type_)));
 
@@ -651,7 +651,7 @@ PVR_ERROR DVBLinkClient::GetTimerTypes(s
             /* Attributes. */
             TIMER_REPEATING_KEYWORD_ATTRIBS,
             /* Description. */
-            kodi::GetLocalizedString(32044),
+            kodi::addon::GetLocalizedString(32044),
             /* Values definitions for attributes. */
             recordingLimitValues, default_rec_limit_, showTypeValues, default_rec_show_type_)));
   }
@@ -785,7 +785,7 @@ int DVBLinkClient::GetSchedules(kodi::ad
 
   if (m_showinfomsg)
   {
-    kodi::QueueFormattedNotification(QUEUE_INFO, kodi::GetLocalizedString(32007).c_str(),
+    kodi::QueueFormattedNotification(QUEUE_INFO, kodi::addon::GetLocalizedString(32007).c_str(),
                                      schedule_num);
   }
 
@@ -967,7 +967,7 @@ PVR_ERROR DVBLinkClient::GetTimers(kodi:
 
   if (m_showinfomsg)
   {
-    kodi::QueueFormattedNotification(QUEUE_INFO, kodi::GetLocalizedString(32007).c_str(),
+    kodi::QueueFormattedNotification(QUEUE_INFO, kodi::addon::GetLocalizedString(32007).c_str(),
                                      recordings.size());
   }
 
@@ -1488,7 +1488,7 @@ PVR_ERROR DVBLinkClient::GetRecordings(b
   {
     kodi::Log(ADDON_LOG_ERROR, "Could not get recordings (Error code : %d Description : %s)",
               (int)status, error.c_str());
-    //kodi::QueueFormattedNotification(QUEUE_ERROR, kodi::GetLocalizedString(32004).c_str(), (int)status);
+    //kodi::QueueFormattedNotification(QUEUE_ERROR, kodi::addon::GetLocalizedString(32004).c_str(), (int)status);
     return result;
   }
 
@@ -1497,7 +1497,7 @@ PVR_ERROR DVBLinkClient::GetRecordings(b
 
   if (m_showinfomsg)
   {
-    kodi::QueueFormattedNotification(QUEUE_INFO, kodi::GetLocalizedString(32009).c_str(),
+    kodi::QueueFormattedNotification(QUEUE_INFO, kodi::addon::GetLocalizedString(32009).c_str(),
                                      getPlaybackObjectResponse.GetPlaybackItems().size());
   }
 
@@ -1627,7 +1627,7 @@ bool DVBLinkClient::GetRecordingURL(cons
   if ((use_transcoder && !server_caps_.transcoding_supported_) ||
       (use_transcoder && !server_caps_.transcoding_recordings_supported_))
   {
-    kodi::QueueNotification(QUEUE_ERROR, "", kodi::GetLocalizedString(32024));
+    kodi::QueueNotification(QUEUE_ERROR, "", kodi::addon::GetLocalizedString(32024));
     return false;
   }
 
@@ -1691,7 +1691,7 @@ bool DVBLinkClient::OpenLiveStream(const
   //if transcoding is requested and no transcoder is supported return false
   if (use_transcoder && !server_caps_.transcoding_supported_)
   {
-    kodi::QueueNotification(QUEUE_ERROR, "", kodi::GetLocalizedString(32024));
+    kodi::QueueNotification(QUEUE_ERROR, "", kodi::addon::GetLocalizedString(32024));
     return false;
   }
 
diff -pruN 19.0.1+ds1-2/src/DVBLinkClient.h 20.2.0+ds1-1/src/DVBLinkClient.h
--- 19.0.1+ds1-2/src/DVBLinkClient.h	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/DVBLinkClient.h	2022-01-01 15:23:46.000000000 +0000
@@ -74,7 +74,7 @@ const int UPDATE_INTERVAL_2400_SEC = 240
 const int UPDATE_INTERVAL_3000_SEC = 3000;
 const int UPDATE_INTERVAL_3600_SEC = 3600;
 
-struct ATTRIBUTE_HIDDEN schedule_desc
+struct ATTR_DLL_LOCAL schedule_desc
 {
   schedule_desc(unsigned int idx, int type, int margin_before, int margin_after)
   {
@@ -98,7 +98,7 @@ struct ATTRIBUTE_HIDDEN schedule_desc
   int schedule_margin_after;
 };
 
-struct ATTRIBUTE_HIDDEN dvblink_server_caps
+struct ATTR_DLL_LOCAL dvblink_server_caps
 {
   dvblink_server_caps()
     : setting_margins_supported_(false),
@@ -128,12 +128,11 @@ struct ATTRIBUTE_HIDDEN dvblink_server_c
   bool start_any_time_supported_;
 };
 
-class ATTRIBUTE_HIDDEN DVBLinkClient : public kodi::addon::CInstancePVRClient
+class ATTR_DLL_LOCAL DVBLinkClient : public kodi::addon::CInstancePVRClient
 {
 public:
   DVBLinkClient(const CDVBLinkAddon& base,
-                KODI_HANDLE instance,
-                const std::string& kodiVersion,
+                const kodi::addon::IInstanceInfo& instance,
                 std::string clientname,
                 std::string hostname,
                 int port,
diff -pruN 19.0.1+ds1-2/src/dvblink_connection.h 20.2.0+ds1-1/src/dvblink_connection.h
--- 19.0.1+ds1-2/src/dvblink_connection.h	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/dvblink_connection.h	2022-01-01 15:23:46.000000000 +0000
@@ -22,7 +22,7 @@ template<typename T> void SafeDelete(T*&
   }
 }
 
-struct ATTRIBUTE_HIDDEN server_connection_properties
+struct ATTR_DLL_LOCAL server_connection_properties
 {
   server_connection_properties(const std::string& address,
                                long port,
@@ -44,7 +44,7 @@ struct ATTRIBUTE_HIDDEN server_connectio
   std::string client_id_;
 };
 
-class ATTRIBUTE_HIDDEN dvblink_server_connection : public dvblinkremote::DVBLinkRemoteLocker
+class ATTR_DLL_LOCAL dvblink_server_connection : public dvblinkremote::DVBLinkRemoteLocker
 {
 public:
   dvblink_server_connection(const server_connection_properties& connection_props)
diff -pruN 19.0.1+ds1-2/src/HttpPostClient.h 20.2.0+ds1-1/src/HttpPostClient.h
--- 19.0.1+ds1-2/src/HttpPostClient.h	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/HttpPostClient.h	2022-01-01 15:23:46.000000000 +0000
@@ -13,7 +13,7 @@
 
 #include <kodi/AddonBase.h>
 
-class ATTRIBUTE_HIDDEN HttpPostClient : public dvblinkremotehttp::HttpClient
+class ATTR_DLL_LOCAL HttpPostClient : public dvblinkremotehttp::HttpClient
 {
 public:
   bool SendRequest(dvblinkremotehttp::HttpWebRequest& request);
diff -pruN 19.0.1+ds1-2/src/RecordingStreamer.h 20.2.0+ds1-1/src/RecordingStreamer.h
--- 19.0.1+ds1-2/src/RecordingStreamer.h	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/RecordingStreamer.h	2022-01-01 15:23:46.000000000 +0000
@@ -15,7 +15,7 @@
 #include <kodi/addon-instance/PVR.h>
 #include <mutex>
 
-class ATTRIBUTE_HIDDEN RecordingStreamer : public dvblinkremote::DVBLinkRemoteLocker
+class ATTR_DLL_LOCAL RecordingStreamer : public dvblinkremote::DVBLinkRemoteLocker
 {
 public:
   RecordingStreamer(const std::string& client_id,
diff -pruN 19.0.1+ds1-2/src/Settings.cpp 20.2.0+ds1-1/src/Settings.cpp
--- 19.0.1+ds1-2/src/Settings.cpp	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/Settings.cpp	2022-01-01 15:23:46.000000000 +0000
@@ -9,7 +9,7 @@
 
 bool CSettings::Load()
 {
-  if (!kodi::CheckSettingString("host", m_szHostname))
+  if (!kodi::addon::CheckSettingString("host", m_szHostname))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'host' setting, falling back to '%s' as default",
@@ -18,7 +18,7 @@ bool CSettings::Load()
   }
 
   /* read setting "username" from settings.xml */
-  if (!kodi::CheckSettingString("username", m_szUsername))
+  if (!kodi::addon::CheckSettingString("username", m_szUsername))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'username' setting, falling back to default");
@@ -26,7 +26,7 @@ bool CSettings::Load()
   }
 
   /* read setting "password" from settings.xml */
-  if (!kodi::CheckSettingString("password", m_szPassword))
+  if (!kodi::addon::CheckSettingString("password", m_szPassword))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'password' setting, leaved empty");
@@ -34,7 +34,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "enable_transcoding" from settings.xml */
-  if (!kodi::CheckSettingBoolean("enable_transcoding", m_bUseTranscoding))
+  if (!kodi::addon::CheckSettingBoolean("enable_transcoding", m_bUseTranscoding))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR,
@@ -44,7 +44,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "port" from settings.xml */
-  if (!kodi::CheckSettingInt("port", m_iPort))
+  if (!kodi::addon::CheckSettingInt("port", m_iPort))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'port' setting, falling back to '%i' as default",
@@ -53,7 +53,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "timeshift" from settings.xml */
-  if (!kodi::CheckSettingBoolean("timeshift", m_bUseTimeshift))
+  if (!kodi::addon::CheckSettingBoolean("timeshift", m_bUseTimeshift))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'timeshift' setting, falling back to '%s' as default",
@@ -62,7 +62,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "showinfomsg" from settings.xml */
-  if (!kodi::CheckSettingBoolean("showinfomsg", m_bShowInfoMSG))
+  if (!kodi::addon::CheckSettingBoolean("showinfomsg", m_bShowInfoMSG))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR,
@@ -72,7 +72,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "add_rec_episode_info" from settings.xml */
-  if (!kodi::CheckSettingBoolean("add_rec_episode_info", m_bAddRecEpisode2title))
+  if (!kodi::addon::CheckSettingBoolean("add_rec_episode_info", m_bAddRecEpisode2title))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR,
@@ -82,7 +82,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "group_recordings_by_series" from settings.xml */
-  if (!kodi::CheckSettingBoolean("group_recordings_by_series", m_bGroupRecBySeries))
+  if (!kodi::addon::CheckSettingBoolean("group_recordings_by_series", m_bGroupRecBySeries))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR,
@@ -92,7 +92,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "no_group_for_single_record" from settings.xml */
-  if (!kodi::CheckSettingBoolean("no_group_for_single_record", m_bNoGroupSingleRec))
+  if (!kodi::addon::CheckSettingBoolean("no_group_for_single_record", m_bNoGroupSingleRec))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR,
@@ -102,7 +102,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "height" from settings.xml */
-  if (!kodi::CheckSettingInt("height", m_iHeight))
+  if (!kodi::addon::CheckSettingInt("height", m_iHeight))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'height' setting, falling back to '%i' as default",
@@ -111,7 +111,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "width" from settings.xml */
-  if (!kodi::CheckSettingInt("width", m_iWidth))
+  if (!kodi::addon::CheckSettingInt("width", m_iWidth))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'width' setting, falling back to '%i' as default",
@@ -120,7 +120,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "bitrate" from settings.xml */
-  if (!kodi::CheckSettingInt("bitrate", m_iBitrate))
+  if (!kodi::addon::CheckSettingInt("bitrate", m_iBitrate))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'bitrate' setting, falling back to '%i' as default",
@@ -129,7 +129,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "audiotrack" from settings.xml */
-  if (!kodi::CheckSettingString("audiotrack", m_szAudiotrack))
+  if (!kodi::addon::CheckSettingString("audiotrack", m_szAudiotrack))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR, "Couldn't get 'audiotrack' setting, falling back to '%s' as default",
@@ -138,7 +138,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "default_update_interval" from settings.xml */
-  if (!kodi::CheckSettingInt("default_update_interval", m_iDefaultUpdateInterval))
+  if (!kodi::addon::CheckSettingInt("default_update_interval", m_iDefaultUpdateInterval))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR,
@@ -148,7 +148,7 @@ bool CSettings::Load()
   }
 
   /* Read setting "bitrate" from settings.xml */
-  if (!kodi::CheckSettingInt("default_record_show_type", m_iDefaultRecShowType))
+  if (!kodi::addon::CheckSettingInt("default_record_show_type", m_iDefaultRecShowType))
   {
     /* If setting is unknown fallback to defaults */
     kodi::Log(ADDON_LOG_ERROR,
@@ -165,7 +165,7 @@ bool CSettings::Load()
 }
 
 ADDON_STATUS CSettings::SetSetting(const std::string& settingName,
-                                   const kodi::CSettingValue& settingValue)
+                                   const kodi::addon::CSettingValue& settingValue)
 {
   if (settingName == "host")
   {
diff -pruN 19.0.1+ds1-2/src/Settings.h 20.2.0+ds1-1/src/Settings.h
--- 19.0.1+ds1-2/src/Settings.h	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/Settings.h	2022-01-01 15:23:46.000000000 +0000
@@ -27,13 +27,14 @@
 #define DEFAULT_UPDATE_INTERVAL 4
 #define DEFAULT_RECORD_SHOW_TYPE 1
 
-class ATTRIBUTE_HIDDEN CSettings
+class ATTR_DLL_LOCAL CSettings
 {
 public:
   CSettings() = default;
 
   bool Load();
-  ADDON_STATUS SetSetting(const std::string& settingName, const kodi::CSettingValue& settingValue);
+  ADDON_STATUS SetSetting(const std::string& settingName,
+                          const kodi::addon::CSettingValue& settingValue);
 
   const std::string& Hostname() const { return m_szHostname; }
   int Port() const { return m_iPort; }
diff -pruN 19.0.1+ds1-2/src/TimeShiftBuffer.cpp 20.2.0+ds1-1/src/TimeShiftBuffer.cpp
--- 19.0.1+ds1-2/src/TimeShiftBuffer.cpp	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/TimeShiftBuffer.cpp	2022-01-01 15:23:46.000000000 +0000
@@ -63,7 +63,7 @@ bool LiveStreamerBase::Start(Channel* ch
       kodi::Log(ADDON_LOG_ERROR, "Could not start streaming for channel %s (Error code : %d Description : %s)",
                 channel->GetDvbLinkID().c_str(), (int)status, error.c_str());
       if (status == DVBLINK_REMOTE_STATUS_INVALID_DATA)
-        kodi::QueueNotification(QUEUE_ERROR, "", kodi::GetLocalizedString(30007));
+        kodi::QueueNotification(QUEUE_ERROR, "", kodi::addon::GetLocalizedString(30007));
     }
 
     SafeDelete(sr);
diff -pruN 19.0.1+ds1-2/src/TimeShiftBuffer.h 20.2.0+ds1-1/src/TimeShiftBuffer.h
--- 19.0.1+ds1-2/src/TimeShiftBuffer.h	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/src/TimeShiftBuffer.h	2022-01-01 15:23:46.000000000 +0000
@@ -13,7 +13,7 @@
 #include <kodi/Filesystem.h>
 #include <kodi/addon-instance/pvr/Stream.h>
 
-class ATTRIBUTE_HIDDEN LiveStreamerBase
+class ATTR_DLL_LOCAL LiveStreamerBase
 {
 public:
   LiveStreamerBase(const server_connection_properties& connection_props);
@@ -60,7 +60,7 @@ protected:
   time_t stream_start_;
 };
 
-class ATTRIBUTE_HIDDEN LiveTVStreamer : public LiveStreamerBase
+class ATTR_DLL_LOCAL LiveTVStreamer : public LiveStreamerBase
 {
 public:
   LiveTVStreamer(const server_connection_properties& connection_props);
@@ -74,7 +74,7 @@ protected:
                                                          std::string audiotrack);
 };
 
-class ATTRIBUTE_HIDDEN TimeShiftBuffer : public LiveStreamerBase
+class ATTR_DLL_LOCAL TimeShiftBuffer : public LiveStreamerBase
 {
   struct buffer_params_t
   {
diff -pruN 19.0.1+ds1-2/.travis.yml 20.2.0+ds1-1/.travis.yml
--- 19.0.1+ds1-2/.travis.yml	2021-12-27 19:26:47.000000000 +0000
+++ 20.2.0+ds1-1/.travis.yml	2022-01-01 15:23:46.000000000 +0000
@@ -31,7 +31,7 @@ matrix:
       osx_image: xcode10.2
 
 before_install:
-  - if [[ $DEBIAN_BUILD == true ]]; then sudo add-apt-repository -y ppa:team-xbmc/ppa; fi
+  - if [[ $DEBIAN_BUILD == true ]]; then sudo add-apt-repository -y ppa:team-xbmc/xbmc-nightly; fi
   - if [[ $DEBIAN_BUILD == true ]]; then sudo apt-get install fakeroot; fi
 
 #
@@ -40,12 +40,12 @@ before_install:
 #
 before_script:
   - if [[ $DEBIAN_BUILD != true ]]; then cd $TRAVIS_BUILD_DIR/..; fi
-  - if [[ $DEBIAN_BUILD != true ]]; then git clone --branch Matrix --depth=1 https://github.com/xbmc/xbmc.git; fi
+  - if [[ $DEBIAN_BUILD != true ]]; then git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git; fi
   - if [[ $DEBIAN_BUILD != true ]]; then cd ${app_id} && mkdir build && cd build; fi
   - if [[ $DEBIAN_BUILD != true ]]; then mkdir -p definition/${app_id}; fi
   - if [[ $DEBIAN_BUILD != true ]]; then echo ${app_id} $TRAVIS_BUILD_DIR $TRAVIS_COMMIT > definition/${app_id}/${app_id}.txt; fi
   - if [[ $DEBIAN_BUILD != true ]]; then cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DADDONS_DEFINITION_DIR=$TRAVIS_BUILD_DIR/build/definition -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons; fi
-  - if [[ $DEBIAN_BUILD == true ]]; then wget https://raw.githubusercontent.com/xbmc/xbmc/Matrix/xbmc/addons/kodi-dev-kit/tools/debian-addon-package-test.sh && chmod +x ./debian-addon-package-test.sh; fi
+  - if [[ $DEBIAN_BUILD == true ]]; then wget https://raw.githubusercontent.com/xbmc/xbmc/master/xbmc/addons/kodi-dev-kit/tools/debian-addon-package-test.sh && chmod +x ./debian-addon-package-test.sh; fi
   - if [[ $DEBIAN_BUILD == true ]]; then sudo apt-get build-dep $TRAVIS_BUILD_DIR; fi
 
 script:
