New Upstream Release - kodi-pvr-vuplus

Ready changes

Summary

Merged new upstream version: 20.5.1+ds (was: 20.4.1+ds).

Resulting package

Built on 2023-07-25T12:09 (took 6m38s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases kodi-pvr-vuplus-dbgsymapt install -t fresh-releases kodi-pvr-vuplus

Lintian Result

Diff

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..ffcbe2f
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,61 @@
+name: Build and run tests
+on: [push, pull_request]
+env:
+  app_id: pvr.vuplus
+
+jobs:
+  build:
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+        - name: "Debian package test"
+          os: ubuntu-18.04
+          CC: gcc
+          CXX: g++
+          DEBIAN_BUILD: true
+        #- os: ubuntu-18.04
+          #CC: gcc
+          #CXX: g++
+        #- os: ubuntu-18.04
+          #CC: clang
+          #CXX: clang++
+        #- os: macos-10.15
+    steps:
+    - name: Install needed ubuntu depends
+      env:
+        DEBIAN_BUILD: ${{ matrix.DEBIAN_BUILD }}
+      run: |
+        if [[ $DEBIAN_BUILD == true ]]; then sudo add-apt-repository -y ppa:team-xbmc/xbmc-nightly; fi
+        if [[ $DEBIAN_BUILD == true ]]; then sudo apt-get update; fi
+        if [[ $DEBIAN_BUILD == true ]]; then sudo apt-get install fakeroot; fi
+    - name: Checkout Kodi repo
+      uses: actions/checkout@v2
+      with:
+        repository: xbmc/xbmc
+        ref: master
+        path: xbmc
+    - name: Checkout pvr.vuplus repo
+      uses: actions/checkout@v2
+      with:
+        path: ${{ env.app_id }}
+    - name: Configure
+      env:
+        CC: ${{ matrix.CC }}
+        CXX: ${{ matrix.CXX }}
+        DEBIAN_BUILD: ${{ matrix.DEBIAN_BUILD }}
+      run: |
+        if [[ $DEBIAN_BUILD != true ]]; then cd ${app_id} && mkdir -p build && cd build; fi
+        if [[ $DEBIAN_BUILD != true ]]; then cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=${{ github.workspace }} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/xbmc/addons -DPACKAGE_ZIP=1 ${{ github.workspace }}/xbmc/cmake/addons; 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 ${{ github.workspace }}/${app_id}; fi
+    - name: Build
+      env:
+        CC: ${{ matrix.CC }}
+        CXX: ${{ matrix.CXX }}
+        DEBIAN_BUILD: ${{ matrix.DEBIAN_BUILD }}
+      run: |
+        if [[ $DEBIAN_BUILD != true ]]; then cd ${app_id}/build; fi
+        if [[ $DEBIAN_BUILD != true ]]; then make; fi
+        if [[ $DEBIAN_BUILD == true ]]; then ./debian-addon-package-test.sh ${{ github.workspace }}/${app_id}; fi
diff --git a/.github/workflows/changelog-and-release.yml b/.github/workflows/changelog-and-release.yml
new file mode 100644
index 0000000..c952b58
--- /dev/null
+++ b/.github/workflows/changelog-and-release.yml
@@ -0,0 +1,149 @@
+name: Changelog and Release
+# Update the changelog and news(optionally), bump the version, and create a release
+#
+# The release is created on the given branch, release and tag name format will be <version>-<branch> and
+# the body of the release will be created from the changelog.txt or news element in the addon.xml.in
+#
+# options:
+# - version_type: 'minor' / 'micro' # whether to do a minor or micro version bump
+# - changelog_text: string to add to the changelog and news
+# - update_news: 'true' / 'false' # whether to update the news in the addon.xml.in
+# - add_date: 'true' / 'false' # Add date to version number in changelog and news. ie. v1.0.1 (2021-7-17)
+
+on:
+  workflow_dispatch:
+    inputs:
+      version_type:
+        description: 'Create a ''minor'' or ''micro'' release?'
+        required: true
+        default: 'minor'
+      changelog_text:
+        description: 'Input the changes you''d like to add to the changelogs. Your text should be encapsulated in "''s with line feeds represented by literal \n''s. ie. "This is the first change\nThis is the second change"'
+        required: true
+        default: ''
+      update_news:
+        description: 'Update news in addon.xml.in? [true|false]'
+        required: true
+        default: 'true'
+      add_date:
+        description: 'Add date to version number in changelog and news. ie. "v1.0.1 (2021-7-17)" [true|false]'
+        required: true
+        default: 'false'
+
+jobs:
+  default:
+    runs-on: ubuntu-latest
+    name: Changelog and Release
+
+    steps:
+
+      # Checkout the current repository into a directory (repositories name)
+      - name: Checkout Repository
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+          path: ${{ github.event.repository.name }}
+
+      # Checkout the required scripts from kodi-pvr/pvr-scripts into the 'scripts' directory
+      - name: Checkout Scripts
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+          repository: kodi-pvr/pvr-scripts
+          path: scripts
+
+      # Install all dependencies required by the following steps
+      # - libxml2-utils, xmlstarlet: reading news and version from addon.xml.in
+      - name: Install dependencies
+        run: |
+          sudo apt-get install libxml2-utils xmlstarlet
+
+      # Setup python version 3.9
+      - name: Set up Python
+        uses: actions/setup-python@v2
+        with:
+          python-version: '3.9'
+
+      # Run the python script to increment the version, changelog and news
+      - name: Increment version and update changelogs
+        run: |
+          arguments=
+          if [[ ${{ github.event.inputs.update_news }} == true ]] ;
+          then
+            arguments=$(echo $arguments && echo --update-news)
+          fi
+          if [[ ${{ github.event.inputs.add_date }} == true ]] ;
+          then
+            arguments=$(echo $arguments && echo --add-date)
+          fi
+          python3 ../scripts/changelog_and_release.py ${{ github.event.inputs.version_type }} ${{ github.event.inputs.changelog_text }} $arguments
+        working-directory: ${{ github.event.repository.name }}
+
+      # Create the variables required by the following steps
+      # - steps.required-variables.outputs.changes: latest entry in the changelog.txt (if exists), or addon.xml.in news element
+      # - steps.required-variables.outputs.version: version element from addon.xml.in
+      # - steps.required-variables.outputs.branch: branch of the triggering ref
+      # - steps.required-variables.outputs.today: today's date in format '%Y-%m-%d'
+      - name: Get required variables
+        id: required-variables
+        run: |
+          changes=$(cat "$(find . -name changelog.txt)" | awk -v RS= 'NR==1')
+          if [ -z "$changes" ] ;
+          then
+            changes=$(xmlstarlet fo -R "$(find . -name addon.xml.in)" | xmlstarlet sel -t -v 'string(/addon/extension/news)' | awk -v RS= 'NR==1')
+          fi
+          changes="${changes//'%'/'%25'}"
+          changes="${changes//$'\n'/'%0A'}"
+          changes="${changes//$'\r'/'%0D'}"
+          changes="${changes//$'\\n'/'%0A'}"
+          changes="${changes//$'\\r'/'%0D'}"
+          echo ::set-output name=changes::$changes
+          version=$(xmlstarlet fo -R "$(find . -name addon.xml.in)" | xmlstarlet sel -t -v 'string(/addon/@version)')
+          echo ::set-output name=version::$version
+          branch=$(echo ${GITHUB_REF#refs/heads/})
+          echo ::set-output name=branch::$branch
+          echo ::set-output name=today::$(date +'%Y-%m-%d')
+        working-directory: ${{ github.event.repository.name }}
+
+      # Create a commit of the incremented version and changelog, news changes
+      # Commit message (add_date=false): changelog and version v{steps.required-variables.outputs.version}
+      # Commit message (add_date=true): changelog and version v{steps.required-variables.outputs.version} ({steps.required-variables.outputs.today})
+      - name: Commit changes
+        run: |
+          git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
+          git config --local user.name "github-actions[bot]"
+          commit_message="changelog and version v${{ steps.required-variables.outputs.version }}"
+          if [[ ${{ github.event.inputs.add_date }} == true ]] ;
+          then
+            commit_message="$commit_message (${{ steps.required-variables.outputs.today }})"
+          fi
+          git commit -m "$commit_message" -a
+        working-directory: ${{ github.event.repository.name }}
+
+      # Push the commit(s) created above to the triggering branch
+      - name: Push changes
+        uses: ad-m/github-push-action@master
+        with:
+          branch: ${{ github.ref }}
+          directory: ${{ github.event.repository.name }}
+
+      # Sleep for 60 seconds to allow for any delays in the push
+      - name: Sleep for 60 seconds
+        run: sleep 60s
+        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. 20.0.0-Nexus
+      # - release body: {steps.required-variables.outputs.changes}
+      - name: Create Release
+        id: create-release
+        uses: actions/create-release@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          tag_name: ${{ steps.required-variables.outputs.version }}-${{ steps.required-variables.outputs.branch }}
+          release_name: ${{ steps.required-variables.outputs.version }}-${{ steps.required-variables.outputs.branch }}
+          body: ${{ steps.required-variables.outputs.changes }}
+          draft: false
+          prerelease: false
+          commitish: ${{ steps.required-variables.outputs.branch }}
diff --git a/.github/workflows/increment-version.yml b/.github/workflows/increment-version.yml
new file mode 100644
index 0000000..f95d541
--- /dev/null
+++ b/.github/workflows/increment-version.yml
@@ -0,0 +1,62 @@
+name: Increment version when languages are updated
+
+on:
+  push:
+    branches: [ Matrix, Nexus ]
+    paths:
+      - '**resource.language.**strings.po'
+
+jobs:
+  default:
+    if: github.repository == 'kodi-pvr/pvr.vuplus'
+    runs-on: ubuntu-latest
+    name: Increment add-on version when languages are updated
+
+    steps:
+
+      - name: Checkout Repository
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+          path: ${{ github.event.repository.name }}
+
+      - name: Checkout Scripts
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+          repository: xbmc/weblate-supplementary-scripts
+          path: scripts
+
+      - name: Set up Python
+        uses: actions/setup-python@v2
+        with:
+          python-version: '3.9'
+
+      - name: Get changed files
+        uses: trilom/file-changes-action@v1.2.4
+
+      - name: Increment add-on version
+        run: |
+          python3 ../scripts/binary/increment_version.py $HOME/files.json -c -n
+        working-directory: ${{ github.event.repository.name }}
+
+      - name: Install dependencies
+        run: |
+          sudo apt-get install libxml2-utils xmlstarlet
+
+      - name: Get required variables
+        id: required-variables
+        run: |
+          version=$(xmlstarlet fo -R "$(find . -name addon.xml.in)" | xmlstarlet sel -t -v 'string(/addon/@version)')
+          echo ::set-output name=version::$version
+        working-directory: ${{ github.event.repository.name }}
+
+      - name: Create PR for incrementing add-on versions
+        uses: peter-evans/create-pull-request@v3.10.0
+        with:
+          commit-message: Add-on version incremented to ${{ steps.required-variables.outputs.version }} from Weblate
+          title: Add-on version incremented to ${{ steps.required-variables.outputs.version }} from Weblate
+          body: Add-on version incremented triggered by ${{ github.sha }}
+          branch: inc-ver
+          delete-branch: true
+          path: ./${{ github.event.repository.name }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..0e12688
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,66 @@
+name: Make Release
+# Create a release on the given branch
+# Release and tag name format will be <version>-<branch>
+# The body of the release will be created from the changelog.txt or news element in the addon.xml.in
+
+on: workflow_dispatch
+
+jobs:
+  default:
+    runs-on: ubuntu-latest
+    name: Make Release
+
+    steps:
+
+      # Checkout the current repository into a directory (repositories name)
+      - name: Checkout Repository
+        uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+          path: ${{ github.event.repository.name }}
+
+      # Install all dependencies required by the following steps
+      # - libxml2-utils, xmlstarlet: reading news and version from addon.xml.in
+      - name: Install dependencies
+        run: |
+          sudo apt-get install libxml2-utils xmlstarlet
+
+      # Create the variables required by the following steps
+      # - steps.required-variables.outputs.changes: latest entry in the changelog.txt (if exists), or addon.xml.in news element
+      # - steps.required-variables.outputs.version: version element from addon.xml.in
+      # - steps.required-variables.outputs.branch: branch of the triggering ref
+      - name: Get required variables
+        id: required-variables
+        run: |
+          changes=$(cat "$(find . -name changelog.txt)" | awk -v RS= 'NR==1')
+          if [ -z "$changes" ] ;
+          then
+            changes=$(xmlstarlet fo -R "$(find . -name addon.xml.in)" | xmlstarlet sel -t -v 'string(/addon/extension/news)' | awk -v RS= 'NR==1')
+          fi
+          changes="${changes//'%'/'%25'}"
+          changes="${changes//$'\n'/'%0A'}"
+          changes="${changes//$'\r'/'%0D'}"
+          changes="${changes//$'\\n'/'%0A'}"
+          changes="${changes//$'\\r'/'%0D'}"
+          echo ::set-output name=changes::$changes
+          version=$(xmlstarlet fo -R "$(find . -name addon.xml.in)" | xmlstarlet sel -t -v 'string(/addon/@version)')
+          echo ::set-output name=version::$version
+          branch=$(echo ${GITHUB_REF#refs/heads/})
+          echo ::set-output name=branch::$branch
+        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. 20.0.0-Nexus
+      # - release body: {steps.required-variables.outputs.changes}
+      - name: Create Release
+        id: create-release
+        uses: actions/create-release@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          tag_name: ${{ steps.required-variables.outputs.version }}-${{ steps.required-variables.outputs.branch }}
+          release_name: ${{ steps.required-variables.outputs.version }}-${{ steps.required-variables.outputs.branch }}
+          body: ${{ steps.required-variables.outputs.changes }}
+          draft: false
+          prerelease: false
+          commitish: ${{ steps.required-variables.outputs.branch }}
diff --git a/.github/workflows/sync-addon-metadata-translations.yml b/.github/workflows/sync-addon-metadata-translations.yml
new file mode 100644
index 0000000..7dc1e0c
--- /dev/null
+++ b/.github/workflows/sync-addon-metadata-translations.yml
@@ -0,0 +1,57 @@
+name: Sync addon metadata translations
+
+on:
+  push:
+    branches: [ Matrix, Nexus ]
+    paths:
+      - '**addon.xml.in'
+      - '**resource.language.**strings.po'
+
+jobs:
+  default:
+    if: github.repository == 'kodi-pvr/pvr.vuplus'
+    runs-on: ubuntu-latest
+
+    strategy:
+
+      fail-fast: false
+      matrix:
+        python-version: [ 3.9 ]
+
+    steps:
+
+      - name: Checkout repository
+        uses: actions/checkout@v2
+        with:
+          path: project
+
+      - name: Checkout sync_addon_metadata_translations repository
+        uses: actions/checkout@v2
+        with:
+          repository: xbmc/sync_addon_metadata_translations
+          path: sync_addon_metadata_translations
+
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v2
+        with:
+          python-version: ${{ matrix.python-version }}
+
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          python -m pip install sync_addon_metadata_translations/
+
+      - name: Run sync-addon-metadata-translations
+        run: |
+          sync-addon-metadata-translations
+        working-directory: ./project
+
+      - name: Create PR for sync-addon-metadata-translations changes
+        uses: peter-evans/create-pull-request@v3.10.0
+        with:
+          commit-message: Sync of addon metadata translations
+          title: Sync of addon metadata translations
+          body: Sync of addon metadata translations triggered by ${{ github.sha }}
+          branch: amt-sync
+          delete-branch: true
+          path: ./project
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b8b8fd2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,50 @@
+# build artifacts
+build/
+pvr.*/addon.xml
+
+# Debian build files
+debian/changelog
+debian/files
+debian/*.log
+debian/*.substvars
+debian/.debhelper/
+debian/tmp/
+debian/kodi-pvr-*/
+obj-x86_64-linux-gnu/
+
+# commonly used editors
+# vim
+*.swp
+
+# Eclipse
+*.project
+*.cproject
+.classpath
+*.sublime-*
+.settings/
+
+# KDevelop 4
+*.kdev4
+
+# gedit
+*~
+
+# CLion
+/.idea
+
+# clion
+.idea/
+
+# to prevent add after a "git format-patch VALUE" and "git add ." call
+/*.patch
+
+# Visual Studio Code
+.vscode
+
+# to prevent add if project code opened by Visual Studio over CMake file
+.vs/
+
+# General MacOS
+.DS_Store
+.AppleDouble
+.LSOverride
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 021de0f..119a399 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,15 +13,16 @@ include_directories(${NLOHMANNJSON_INCLUDE_DIRS}
 
 set(VUPLUS_SOURCES src/addon.cpp
                    src/Enigma2.cpp
+                   src/enigma2/AddonSettings.cpp
                    src/enigma2/Admin.cpp
                    src/enigma2/Channels.cpp
                    src/enigma2/ChannelGroups.cpp
                    src/enigma2/ConnectionManager.cpp
                    src/enigma2/Epg.cpp
+                   src/enigma2/InstanceSettings.cpp
                    src/enigma2/Providers.cpp
                    src/enigma2/RecordingReader.cpp
                    src/enigma2/Recordings.cpp
-                   src/enigma2/Settings.cpp
                    src/enigma2/StreamReader.cpp
                    src/enigma2/Timers.cpp
                    src/enigma2/TimeshiftBuffer.cpp
@@ -40,22 +41,24 @@ set(VUPLUS_SOURCES src/addon.cpp
                    src/enigma2/utilities/CurlFile.cpp
                    src/enigma2/utilities/FileUtils.cpp
                    src/enigma2/utilities/Logger.cpp
+                   src/enigma2/utilities/SettingsMigration.cpp
                    src/enigma2/utilities/StreamUtils.cpp
                    src/enigma2/utilities/WebUtils.cpp)
 
 set(VUPLUS_HEADERS src/addon.h
                    src/Enigma2.h
+                   src/enigma2/AddonSettings.h
                    src/enigma2/Admin.h
                    src/enigma2/Channels.h
                    src/enigma2/ChannelGroups.h
                    src/enigma2/ConnectionManager.h
                    src/enigma2/Epg.h
                    src/enigma2/IConnectionListener.h
+                   src/enigma2/InstanceSettings.h
                    src/enigma2/IStreamReader.h
                    src/enigma2/Providers.h
                    src/enigma2/RecordingReader.h
                    src/enigma2/Recordings.h
-                   src/enigma2/Settings.h
                    src/enigma2/StreamReader.h
                    src/enigma2/Timers.h
                    src/enigma2/TimeshiftBuffer.h
@@ -82,6 +85,7 @@ set(VUPLUS_HEADERS src/addon.h
                    src/enigma2/utilities/UpdateState.h
                    src/enigma2/utilities/FileUtils.h
                    src/enigma2/utilities/Logger.h
+                   src/enigma2/utilities/SettingsMigration.h
                    src/enigma2/utilities/SignalStatus.h
                    src/enigma2/utilities/StreamStatus.h
                    src/enigma2/utilities/StreamUtils.h
diff --git a/debian/changelog b/debian/changelog
index 58c8da2..ef2076e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+kodi-pvr-vuplus (20.5.1+ds-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Tue, 25 Jul 2023 12:03:11 -0000
+
 kodi-pvr-vuplus (20.4.1+ds-1) unstable; urgency=medium
 
   * New upstream version 20.4.1+ds
diff --git a/pvr.vuplus/addon.xml.in b/pvr.vuplus/addon.xml.in
index 1cb2bae..a0c0333 100644
--- a/pvr.vuplus/addon.xml.in
+++ b/pvr.vuplus/addon.xml.in
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="pvr.vuplus"
-  version="20.4.1"
+  version="20.5.1"
   name="Enigma2 Client"
   provider-name="Joerg Dembski and Ross Nicholson">
   <requires>@ADDON_DEPENDS@
@@ -26,17 +26,17 @@
     <summary lang="cs_CZ">Rozhraní Kodi pro přijímače založené na Enigma2</summary>
     <summary lang="cy_GB">Blaen Kodi ar gyfer blychau teledu VU+ / Enigma2</summary>
     <summary lang="da_DK">Kodis frontend til VU+/Enigma2 baseret på settopbokse</summary>
-    <summary lang="de_DE">Kodi Oberfläche für VU+ / Enigma2-basierte Settop-Boxen</summary>
+    <summary lang="de_DE">Kodi-Oberfläche für VU+ / Enigma2-basierte Settop-Boxen</summary>
     <summary lang="el_GR">Frontend του Kodi για αποκωδικοποιητές (settop box) τύπου VU+ / Enigma2</summary>
     <summary lang="en_AU">Kodi&apos;s frontend for VU+ / Enigma2 based settop boxes</summary>
     <summary lang="en_GB">Kodi&apos;s frontend for Enigma2 based set-top boxes</summary>
     <summary lang="en_NZ">Kodi&apos;s frontend for VU+ / Enigma2 based settop boxes</summary>
     <summary lang="en_US">Kodi&apos;s frontend for VU+ / Enigma2 based settop boxes</summary>
     <summary lang="es_AR">Kodi frontend para decodificadores equipados con VU+/Enigma2</summary>
-    <summary lang="es_ES">Frontend Kodi para decodificadores basados en VU+/Enigma2</summary>
+    <summary lang="es_ES">Interfaz de Kodi para decodificadores basados en Enigma2</summary>
     <summary lang="es_MX">Kodi frontend para cajas fijas basadas en VU + / Enigma2</summary>
     <summary lang="et_EE">Kodi liides Enigma2 põhistele digiboksidele</summary>
-    <summary lang="fi_FI">Kodin VU+/ Enigma2-asiakasohjelma</summary>
+    <summary lang="fi_FI">Enigma2-pohjaisten vastaanottimien käyttöliittymä Kodille</summary>
     <summary lang="fr_CA">Frontale Kodi pour les boîtiers décodeurs fondés sur Enigma2</summary>
     <summary lang="fr_FR">Interface logicielle pour les enregistreurs VU+/Enigma2</summary>
     <summary lang="gl_ES">Interface de Kodi para decodificadores equipados con VU+/Enigma2</summary>
@@ -45,7 +45,7 @@
     <summary lang="hu_HU">Kodi előtét a VU+ és Enigma2 settop boxokhoz</summary>
     <summary lang="id_ID">Frontend Kodi untuk settop boxes berbasis VU+ / Enigma2</summary>
     <summary lang="is_IS">XBMS framendi fyrir tengibox byggð á VU+ / Enigma2</summary>
-    <summary lang="it_IT">Frontend con Kodi per i settop box basati su VU+ / Enigma2</summary>
+    <summary lang="it_IT">Frontend Kodi per ricevitori basati su Enigma2</summary>
     <summary lang="ja_JP">VU+ / Enigma2 ベースのセットトップボックス用 Kodi フロントエンド</summary>
     <summary lang="ko_KR">VU+ / Enigma2 베이스 셋탑박스를 위한 Kodi 프론트엔드</summary>
     <summary lang="lt_LT">Kodi sąsaja(-os) VU + / Enigma2 rinkinių priedų pagrindu</summary>
@@ -57,7 +57,7 @@
     <summary lang="pl_PL">Klient telewizji dla dekoderów VU+ / Enigma2 </summary>
     <summary lang="pt_BR">Interface Kodi para descodificadores baseadas em VU+ / Enigma2</summary>
     <summary lang="pt_PT">Interface Kodi para descodificadores baseadas em VU+ / Enigma2</summary>
-    <summary lang="ro_RO">Interfața Kodi pentru decodoare VU+ / Enigma2 </summary>
+    <summary lang="ro_RO">Interfața Kodi pentru decodoare VU+ / Enigma2</summary>
     <summary lang="ru_RU">Фронтэнд Kodi для тюнеров, основанных на VU+ /Enigma2</summary>
     <summary lang="sk_SK">Rozhranie Kodi pre prijímače založené na platforme Enigma2</summary>
     <summary lang="sl_SI">Kodijev vmesnik za sprejemnike VU+ / Enigma2</summary>
@@ -74,30 +74,30 @@
     <description lang="af_ZA">VU+ voorprogram; ondersteun stroom van Lewendige TV &amp; Opnames, EPG, Tydhouers.</description>
     <description lang="be_BY">VU+ frontend; supporting streaming of Live TV &amp; Recordings, EPG, Timers.</description>
     <description lang="bg_BG">Клиент за „VU+“. Поддържа телевизия на живо и записване, електронен програмен справочник и броячи.</description>
-    <description lang="ca_ES">Frontal de VU+; és compatible amb les transmissions en línia de TV en directe i enregistraments, guia electrònica de programació (EPG) i temporitzadors.</description>
-    <description lang="cs_CZ">Rozhraní Enigma2 – podporuje streamování živého vysílání a nahrávání, televizní program, časovače, automatické časovače.[CR][CR]Pro dokumentaci navštivte: https://github.com/kodi-pvr/pvr.vuplus/blob/master/README.md</description>
+    <description lang="ca_ES">Frontal de VU+; és compatible amb les transmissions en línia de TV en directe i enregistraments, guia electrònica de programació (EPG) i temporitzadors;    </description>
+    <description lang="cs_CZ">Rozhraní Enigma2 – podporuje streamování živého vysílání a nahrávání, televizní program, časovače, automatické časovače.[CR][CR]Pro dokumentaci navštivte: https://github.com/kodi-pvr/pvr.vuplus/blob/master/README.md    </description>
     <description lang="cy_GB">Blaen VU+; cynnal ffrydio Teledu Byw, Recordio, Amserlenni, Amseryddion</description>
-    <description lang="da_DK">Enigma2 frontend - understøttende streaming af direkte tv &amp; optagelser, EPG, timeroptagelser, automatiske timeroptagelser.[CR]   [CR]Se dokumentationen: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    </description>
-    <description lang="de_DE">VU+ -Oberfläche; Unterstützt Live TV &amp; Aufnahmen, EPG und Timer.    </description>
+    <description lang="da_DK">Enigma2 frontend understøtter streaming af direkte tv og optagelser, EPG, timeroptagelser og automatiske timeroptagelser.[CR][CR]Se dokumentationen: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md    </description>
+    <description lang="de_DE">VU+/Enigma2-Oberfläche. Unterstützt TV, Aufnahmen, EPG und Timer.    </description>
     <description lang="el_GR">Frontend για το VU+. Υποστηρίζει ροές Live TV &amp; Εγγραφές, EPG, Χρονοδιακόπτες.</description>
     <description lang="en_AU">VU+ frontend; supporting streaming of Live TV &amp; Recordings, EPG, Timers.</description>
     <description lang="en_GB">Enigma2 frontend - supporting streaming of Live TV &amp; Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    </description>
     <description lang="en_NZ">VU+ frontend; supporting streaming of Live TV &amp; Recordings, EPG, Timers.</description>
     <description lang="en_US">VU+ frontend; supporting streaming of Live TV &amp; Recordings, EPG, Timers.</description>
     <description lang="es_AR">VU+ frontend; soporta TV en vivo, grabaciones, guía de programación (GEP) y temporizadores.</description>
-    <description lang="es_ES">Frontend VU+; soporta TV en vivo, grabaciones, guía de programación (EPG) y temporizadores.</description>
+    <description lang="es_ES">Interfaz Enigma2 - soporta transmisión de TV en directo y grabaciones, EPG, temporizadores, temporizadores automáticos.[CR] [CR]Para documentación visite: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    </description>
     <description lang="es_MX">VU+ frontend; Soportando transmisión de TV en directo y grabaciones, EPG, Temporizadores.</description>
     <description lang="et_EE">Enigma2 liides. Toetab telekanalite striimimist ja salvestamist ning elektroonilist saatekava.;    [CR] Dokumentatsiooni leiab aadressilt https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    </description>
-    <description lang="fi_FI">VU+-asiakasohjelma. Tukee suorien tv-lähetysten ja tallennusten katsomista, ohjelmaopasta ja ohjelmien ajastamista.</description>
+    <description lang="fi_FI">Enigma2-käyttöliittymä, joka tukee televisiolähetysten ja tallenteiden suoratoistoa, ohjelmaopasta ja ajastuksia. Ohjeita löydät osoitteesta: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.    </description>
     <description lang="fr_CA">Frontale Enigma2 qui prend en charge la diffusion en continu des télés en direct et des enregistrements, le GÉP et les minuteries[CR][CR]    [CR]Pour consulter la documentation, visitez https://github.com/kodi-pvr/pvr.vuplus/blob/master/README.md (page en anglais)</description>
-    <description lang="fr_FR">Interface logicielle pour enregistreur VU+. Gère la diffusion et les enregistrements de la TV en direct, le guide électronique des programmes TV et les programmations.</description>
+    <description lang="fr_FR">Interface Enigma2 - prenant en charge la diffusion en continu de la télévision en direct et des enregistrements, EPG, Timers, Autotimers.[CR]     [CR]Pour la documentation, visiter : https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md [CR]    </description>
     <description lang="gl_ES">Interface VU+; soporta TV en directo, gravacións, Guía de programación e temporizadores.</description>
     <description lang="he_IL">לקוח טלוויזיה חיה של VU+. תומך בהזרמת שידורים חיים והקלטות, הצגת לוח שידורים ותזמון הקלטות.</description>
-    <description lang="hr_HR">VU+ sučelje; podržava stremanje i snimanje TV programa, elektronski programski vodič (EPG)  i vremeski zadano snimanje.</description>
+    <description lang="hr_HR">Enigma2 sučelje; podržava strujanje i snimanje TV programa, elektronski programski vodič (EPG) i vremenski zadano snimanje.CR]    [CR]Za dokumentaciju posjetite: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    </description>
     <description lang="hu_HU">VU+ előtét. Élő adások és felvételek támogatása EPG-vel és időzítéssel.</description>
     <description lang="id_ID">Frontend VU+. Mendukung pengaliran TV dan Rekaman langsung, EPG dan Timer.</description>
     <description lang="is_IS">VU+ framendi; styður streymingu á beinum útsendingum og upptökum, rafrænum dagskrárvísum (EPG) og tímatöku.</description>
-    <description lang="it_IT">Frontend VU+; supporta EPG, i timer e lo streaming della TV dal vivo e delle registrazioni.</description>
+    <description lang="it_IT">Frontend Enigma2: supporta lo stream e la registrazione di Live TV, EPG, timer, timer automatici. Per la documentazione visita: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md    </description>
     <description lang="ja_JP">VU+ フロントエンド。ライブテレビのストリーミングや録画、EPG、タイマーをサポート。</description>
     <description lang="ko_KR">Enigma2 프론트엔드 - 라이브 TV &amp; 녹음, EPG, 타이머, 자동 타이머.[CR]    [CR]문서를 보려면 https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md를 방문하세요[CR]    </description>
     <description lang="lt_LT">TPB + sąsaja, remti transliacijos Live TV &amp; įrašai, EPG, Laikmačiai.</description>
@@ -111,7 +111,7 @@
     <description lang="pt_PT">Interface VU+ ; suporta transmissão e gravação de TV em direto, EPG e temporizadores.</description>
     <description lang="ro_RO">Interfața VU+; suportă streaming programe TV și înregistrare, program electronic, cronometre - înregistrare programată</description>
     <description lang="ru_RU">VU+ фронтэнд; поддерживает потоковое TV, запись, ЕПГ, таймеры.</description>
-    <description lang="sk_SK">VU+ rozhranie; je podporované streamovanie živého televízneho vysielania a nahrávok, EPG, časovačov.</description>
+    <description lang="sk_SK">Rozhranie Enigma2 – podporuje streamovanie živého vysielania a nahrávanie, televízny program EPG, časovače, automatické časovače.[CR][CR]Pre dokumentáciu navštívte: https://github.com/kodi-pvr/pvr.vuplus/blob/master/README.md    </description>
     <description lang="sl_SI">Vmesnik za VU+; podpira pretakanje televizije v živo in posnetkov, EPG, časovnike.</description>
     <description lang="sq_AL">VU+ frontend, përkrahën transmetimin e Live TV&apos;s &amp; Regjistrime, EPG, timer.</description>
     <description lang="sr_RS">VU+ интерфејс; подржава стримовање ТВ Уживо &amp; Снимака, EPG, Тајмере</description>
@@ -137,7 +137,7 @@
     <disclaimer lang="en_NZ">This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects..</disclaimer>
     <disclaimer lang="en_US">This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects..</disclaimer>
     <disclaimer lang="es_AR">¡Este software es inestable! Los autores no se responsabilizan por grabaciones fallidas, temporizadores incorrectos, horas perdidas, o cualquier otro efecto no deseado..</disclaimer>
-    <disclaimer lang="es_ES">¡Este es un software inestable! Los autores no son de ninguna manera responsables de las grabaciones fallidas o incorrectas, las temporizadores perdidas, ni otros efectos no deseables..</disclaimer>
+    <disclaimer lang="es_ES">¡Este software es inestable! Los autores no se hacen responsables de grabaciones fallidas, temporizadores incorrectos, horas perdidas o cualquier otro efecto no deseado...</disclaimer>
     <disclaimer lang="es_MX">¡Esto es software inestable! Los autores no son de ninguna manera responsables por grabaciones fallidas, temporizadores incorrectos, horas perdidas o cualquier otro efecto no deseado...</disclaimer>
     <disclaimer lang="et_EE">See on ebastabiilne tarkvara! Autorid ei ole kuidagi moodi vastutavad nurjunud salvestiste, ebatäpsete taimerite, raisatud tundide ega muude soovimatute asjade eest.</disclaimer>
     <disclaimer lang="eu_ES">Software hau ezegonkorra da! Egilea ez da arduratzen grabazio-erroreetaz, kronometro-erroreetaz, ordu galduetaz edo beste edozein ondorio ezerosoetaz.</disclaimer>
@@ -146,12 +146,12 @@
     <disclaimer lang="fr_FR">Logiciel en cours d&apos;élaboration ! Les auteurs ne sont en aucun cas responsables de l&apos;échec des enregistrements, programmations défectueuses, temps perdu ou autres effets indésirables.</disclaimer>
     <disclaimer lang="gl_ES">Software non estable, os autores non se fan responsábeis dos erros na gravacións, temporizadores incorrectos, e outros efectos non desexados.</disclaimer>
     <disclaimer lang="he_IL">זוהי איננה הרחבה יציבה! המפתחים אינם אחראים על כשלון בניגון, זמנים שגויים במדריך השידורים, שעות מבוזבזות או כל תופעה לא רצויה אחרת.</disclaimer>
-    <disclaimer lang="hr_HR">Ovo je nestabilan softver! Autori nisu ni na koji način odgovorni za neuspjelo snimanje, netočna vremena snimanja, izgubljene sate, ili bilo koje druge nepoželjne učinke...</disclaimer>
+    <disclaimer lang="hr_HR">Ovo je nestabilan softver! Autori nisu ni na koji način odgovorni za neuspjelo snimanje, netočna vremena snimanja, izgubljene sate, ili bilo koje druge nepoželjne učinke.</disclaimer>
     <disclaimer lang="hu_HU">Ez nem stabil szoftver! A készítők nem vállalnak felelősséget, a hibás felvételért, rossz időzítésért, elvesztegetett időért...</disclaimer>
     <disclaimer lang="hy_AM">Սա անկայուն ծրագրային ապահովում է: Հեղինակները պատասխանատու չեն վատ ձայնագրումների, սխալ ժամանակացույցերի, կորած ժամանակի կամ այլ ոչ ցանկալի երևույթների համար:</disclaimer>
     <disclaimer lang="id_ID">Ini merupakan software yang tidak stabil! Penulis tidak bertanggung jawab untuk rekaman gagal, timer salah, waktu terbuang, atau efek tak diinginkan lainnya...</disclaimer>
     <disclaimer lang="is_IS">Þetta er óstöðugur hugbúnaður! Höfundarnir eru á engan hátt ábyrgir fyrir misheppnuðum upptökum, röngum upptökutímum, klukkustundum sem að fóru í súginn eða nokkrum öðrum óæskilegum áhrifum.</disclaimer>
-    <disclaimer lang="it_IT">Questo software è instabile! Gli autori non sono in alcun modo responsabile per le fallite registrazioni, timer non corretti, ore perse o qualsiasi altro effetto non desiderato...</disclaimer>
+    <disclaimer lang="it_IT">Questo è un software instabile! Gli autori non sono in alcun modo responsabili per registrazioni fallite, timer errati, ore sprecate o qualsiasi altro effetto indesiderato.</disclaimer>
     <disclaimer lang="ja_JP">これは不安定なソフトウェアです!本プログラムの作者は、録画の失敗、正確に作動しなかったタイマー、無駄にした時間、その他あらゆる好ましくない結果について責任を負わないものとします。</disclaimer>
     <disclaimer lang="ko_KR">이 소프트웨어는 불안정합니다! 제작자는 녹화 실패, 부정확한 타이머, 시간 낭비 및 기타 예상하지 못한 결과에 대해 책임지지 않습니다..</disclaimer>
     <disclaimer lang="lt_LT">Tai yra nestabili programinė įranga! Autorius jokiu būdu neatsakingas už nepavykusius įrašus, neteisingus laikmačius, iššvaistytas valandas, ar nutikus kitiems nepageidaujamiems poveikiams ...[COLOR=red](Kodi.lt rekomenduoja/siūlo testuojant šį priedą persijungti į Anglų [orinali] kalbą)[/COLOR]</disclaimer>
@@ -179,7 +179,7 @@
     <disclaimer lang="tg_TJ">Ин нармафзори ноустувор аст! Муаллифон барои вайрониҳои сабт, вақтсанҷҳои нодуруст, соатҳои бефоида ва дигар таъсирҳои номатлуб ҷавобгар намебошанд.</disclaimer>
     <disclaimer lang="th_TH">นี่คือโปรแกรมที่ยังไม่เสถียร! ผู้เขียนไม่อยู่ในทางที่จะรับผิดชอบในการบันทึกที่ล้มเหลว, การตั้งเวลาที่ไม่ถูกต้อง, การเสียเวลา, หรือผลกระทบที่ไม่พึงประสงค์อื่น ๆ..</disclaimer>
     <disclaimer lang="tr_TR">Bu kararsız bir yazılımdır! Yapımcılar hatalı kayıtlardan, bozuk sürelerden, harcanan vakitten veya herhangi bir olumsuz etkiden dolayı sorumlu tutulamaz.</disclaimer>
-    <disclaimer lang="uk_UA">Це нестабільна програма! Автори не несуть відповідальності за попсуті записи, неправильні таймери, втрачений час та інші небажані ефекти.</disclaimer>
+    <disclaimer lang="uk_UA">Це нестабільна програма! Автори не несуть жодної відповідальності за зіпсуті записи, неправильні таймери, витрачений час та будь-які інші небажані ефекти..</disclaimer>
     <disclaimer lang="vi_VN">Đây là phần mềm không ổn định! Các tác giả không chịu trách nhiệm đối với bản ghi chương trình thất bại, hẹn giờ không chính xác, giờ lãng phí, hoặc bất kỳ tác dụng không mong muốn khác..</disclaimer>
     <disclaimer lang="zh_CN">这是不稳定版的软件!作者不对录像失败、错误定时造成时间浪费或其它不良影响负责。</disclaimer>
     <disclaimer lang="zh_TW">這是測試版軟體!其原創作者並無法對於以下情況負責,包含:錄影失敗,不正確的定時設定,多餘時數,或任何產生的其它不良影響...</disclaimer>
diff --git a/pvr.vuplus/changelog.txt b/pvr.vuplus/changelog.txt
index 34a3fcc..e6bad56 100644
--- a/pvr.vuplus/changelog.txt
+++ b/pvr.vuplus/changelog.txt
@@ -1,3 +1,12 @@
+v20.5.1
+- Set default settings correctly and update settings migration
+
+v20.5.0
+- Support Multiple Enigma2 Backends
+
+v20.4.2
+- Support Kodi filesystem API 1.1.8, which fixes a buffer overrun (https://github.com/xbmc/xbmc/pull/22593)
+
 v20.4.1
 - Always match auto timers from start then when not doing a full text search. Then episodes like finals etc. will still be caught by the autotimer.
 
diff --git a/pvr.vuplus/resources/instance-settings.xml b/pvr.vuplus/resources/instance-settings.xml
new file mode 100644
index 0000000..dc2373d
--- /dev/null
+++ b/pvr.vuplus/resources/instance-settings.xml
@@ -0,0 +1,1024 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settings version="1">
+  <section id="addon" help="-1">
+
+    <!-- Connection -->
+    <category id="connection" label="30005" help="30600">
+      <group id="1" label="30038">
+        <setting id="host" type="string" label="30000" help="30601">
+          <level>0</level>
+          <default>127.0.0.1</default>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="webport" type="integer" label="30012" help="30602">
+          <level>0</level>
+          <default>80</default>
+          <constraints>
+            <minimum>1</minimum>
+            <step>1</step>
+            <maximum>65535</maximum>
+          </constraints>
+          <control type="edit" format="integer" />
+        </setting>
+        <setting id="use_secure" type="boolean" label="30028" help="30603">
+          <level>1</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+      </group>
+      <group id="2" label="30051">
+        <setting id="user" type="string" label="30003" help="30604">
+          <level>1</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="pass" type="string" label="30004" help="30605">
+          <level>1</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <control type="edit" format="string">
+            <hidden>true</hidden>
+          </control>
+        </setting>
+      </group>
+      <group id="3" label="30039">
+        <setting id="autoconfig" type="boolean" label="30029" help="30606">
+          <level>2</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="streamport" type="integer" label="30002" help="30607">
+          <level>2</level>
+          <default>8001</default>
+          <constraints>
+            <minimum>1</minimum>
+            <step>1</step>
+            <maximum>65535</maximum>
+          </constraints>
+          <dependencies>
+            <dependency type="enable" setting="autoconfig">false</dependency>
+          </dependencies>
+          <control type="edit" format="integer" />
+        </setting>
+        <setting id="use_secure_stream" type="boolean" label="30066" help="30608">
+          <level>2</level>
+          <default>false</default>
+          <dependencies>
+            <dependency type="enable" setting="autoconfig">false</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+        <setting id="use_login_stream" type="boolean" label="30067" help="30609">
+          <level>2</level>
+          <default>false</default>
+          <dependencies>
+            <dependency type="enable" setting="autoconfig">false</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+      </group>
+      <group id="4" label="30020">
+        <setting id="connectionchecktimeout" type="integer" label="30121" help="30610">
+          <level>3</level>
+          <default>30</default>
+          <constraints>
+            <minimum>10</minimum>
+            <step>10</step>
+            <maximum>60</maximum>
+          </constraints>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14045</formatlabel>
+          </control>
+        </setting>
+        <setting id="connectioncheckinterval" type="integer" label="30122" help="30611">
+          <level>3</level>
+          <default>10</default>
+          <constraints>
+            <minimum>1</minimum>
+            <step>1</step>
+            <maximum>60</maximum>
+          </constraints>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14045</formatlabel>
+          </control>
+        </setting>
+      </group>
+    </category>
+
+    <!-- General -->
+    <category id="general" label="30018" help="30620">
+      <group id="1" label="30007">
+        <setting id="setprogramid" type="boolean" label="30014" help="30629">
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+      </group>
+
+      <group id="2" label="30006">
+        <setting id="onlinepicons" type="boolean" label="30027" help="30621">
+          <level>0</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="useopenwebifpiconpath" type="boolean" parent="onlinepicons" label="30103" help="30622">
+          <level>1</level>
+          <default>false</default>
+          <dependencies>
+            <dependency type="enable" setting="onlinepicons">true</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+        <setting id="usepiconseuformat" type="boolean" label="30035" help="30623">
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="iconpath" type="path" label="30008" help="30624">
+          <level>1</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+            <writable>true</writable>
+          </constraints>
+          <dependencies>
+            <dependency type="enable" setting="onlinepicons">false</dependency>
+          </dependencies>
+          <control type="button" format="path">
+            <heading>657</heading>
+          </control>
+        </setting>
+      </group>
+
+      <group id="3" label="30009">
+        <setting id="updateint" type="integer" label="30015" help="30625">
+          <level>1</level>
+          <default>2</default>
+          <constraints>
+            <minimum>1</minimum>
+            <step>1</step>
+            <maximum>1440</maximum>
+          </constraints>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14044</formatlabel>
+          </control>
+        </setting>
+        <setting id="updatemode" type="integer" label="30100" help="30626">
+          <level>1</level>
+          <default>0</default>
+          <constraints>
+            <options>
+              <option label="30101">0</option> <!-- TIMERS_AND_RECORDINGS -->
+              <option label="30102">1</option> <!-- TIMERS_ONLY -->
+            </options>
+          </constraints>
+          <control type="list" format="integer" />
+        </setting>
+        <setting id="channelandgroupupdatemode" type="integer" label="30116" help="30627">
+          <level>2</level>
+          <default>2</default>
+          <constraints>
+            <options>
+              <option label="30117">0</option> <!-- DISABLED -->
+              <option label="30118">1</option> <!-- NOTIFY_AND_LOG -->
+              <option label="30119">2</option> <!-- RELOAD_CHANNELS_AND_GROUPS -->
+            </options>
+          </constraints>
+          <control type="list" format="integer" />
+        </setting>
+        <setting id="channelandgroupupdatehour" type="integer" label="30120" help="30628">
+          <level>2</level>
+          <default>4</default>
+          <constraints>
+            <minimum>0</minimum>
+            <step>1</step>
+            <maximum>23</maximum>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <or>
+                <condition setting="channelandgroupupdatemode" operator="is">1</condition>
+                <condition setting="channelandgroupupdatemode" operator="is">2</condition>
+              </or>
+            </dependency>
+          </dependencies>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>17998</formatlabel>
+          </control>
+        </setting>
+      </group>
+    </category>
+
+    <!-- Channels -->
+    <category id="channels" label="30019" help="30640">
+      <group id="1" label="30018">
+        <setting id="zap" type="boolean" label="30013" help="30642">
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="usegroupspecificnumbers" type="boolean" label="30016" help="30655">
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="usestandardserviceref" type="boolean" label="30126" help="30641">
+          <level>3</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+      </group>
+      <group id="2" label="30161">
+        <setting id="defaultprovidername" type="string" label="30160" help="30658">
+          <level>2</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="providermapfile" type="path" label="30159" help="30657">
+          <level>2</level>
+          <default>special://userdata/addon_data/pvr.vuplus/providers/providerMappings.xml</default>
+          <constraints>
+            <allowempty>false</allowempty>
+            <writable>false</writable>
+          </constraints>
+          <control type="button" format="file">
+            <heading>1033</heading>
+          </control>
+        </setting>
+        <setting id="retrieveprovidername" type="boolean" label="30152" help="30656">
+          <level>3</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+      </group>
+      <group id="3" label="30056">
+        <setting id="tvgroupmode" type="integer" label="30025" help="30643">
+          <level>0</level>
+          <default>0</default>
+          <constraints>
+            <options>
+              <option label="30074">0</option> <!-- ALL_GROUPS -->
+              <option label="30075">1</option> <!-- SOME_GROUPS -->
+              <option label="30078">2</option> <!-- FAVOURITES_GROUP -->
+              <option label="30131">3</option> <!-- CUSTOM_GROUPS -->
+            </options>
+          </constraints>
+          <control type="spinner" format="integer" />
+        </setting>
+        <setting id="numtvgroups" type="integer" parent="tvgroupmode" label="30134" help="30653">
+          <level>0</level>
+          <default>1</default>
+          <constraints>
+            <minimum>1</minimum>
+            <step>1</step>
+            <maximum>5</maximum>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="tvgroupmode" operator="is">1</dependency>
+          </dependencies>
+          <control type="spinner" format="integer" />
+        </setting>
+        <setting id="onetvgroup" type="string" parent="tvgroupmode" label="30026" help="30644">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="tvgroupmode" operator="is">1</dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="twotvgroup" type="string" parent="tvgroupmode" label="30135" help="30644">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="tvgroupmode" operator="is">1</condition>
+                <condition setting="numtvgroups" operator="gt">1</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="threetvgroup" type="string" parent="tvgroupmode" label="30136" help="30644">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="tvgroupmode" operator="is">1</condition>
+                <condition setting="numtvgroups" operator="gt">2</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="fourtvgroup" type="string" parent="tvgroupmode" label="30137" help="30644">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="tvgroupmode" operator="is">1</condition>
+                <condition setting="numtvgroups" operator="gt">3</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="fivetvgroup" type="string" parent="tvgroupmode" label="30138" help="30644">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="tvgroupmode" operator="is">1</condition>
+                <condition setting="numtvgroups" operator="gt">4</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+
+        <setting id="customtvgroupsfile" type="path" parent="tvgroupmode" label="30132" help="30651">
+          <level>0</level>
+          <default>special://userdata/addon_data/pvr.vuplus/channelGroups/customTVGroups-example.xml</default>
+          <constraints>
+            <allowempty>false</allowempty>
+            <writable>false</writable>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="tvgroupmode" operator="is">3</dependency>
+          </dependencies>
+          <control type="button" format="file">
+            <heading>1033</heading>
+          </control>
+        </setting>
+        <setting id="tvfavouritesmode" type="integer" label="30068" help="30645">
+          <level>2</level>
+          <default>0</default>
+          <constraints>
+            <options>
+              <option label="30430">0</option> <!-- DISABLED -->
+              <option label="30076">1</option> <!-- AS_FIRST_GROUP -->
+              <option label="30077">2</option> <!-- AS_LAST_GROUP -->
+            </options>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <or>
+                <condition setting="tvgroupmode" operator="is">0</condition>
+                <condition setting="tvgroupmode" operator="is">1</condition>
+              </or>
+            </dependency>
+          </dependencies>
+          <control type="spinner" format="integer" />
+        </setting>
+        <setting id="excludelastscannedtv" type="boolean" label="30114" help="30646">
+          <level>3</level>
+          <default>true</default>
+          <dependencies>
+            <dependency type="visible" setting="tvgroupmode" operator="is">0</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+      </group>
+      <group id="4" label="30057">
+        <setting id="radiogroupmode" type="integer" label="30058" help="30647">
+          <level>0</level>
+          <default>0</default>
+          <constraints>
+            <options>
+              <option label="30074">0</option> <!-- ALL_GROUPS -->
+              <option label="30075">1</option> <!-- SOME_GROUPS -->
+              <option label="30078">2</option> <!-- FAVOURITES_GROUP -->
+              <option label="30131">3</option> <!-- CUSTOM_GROUPS -->
+            </options>
+          </constraints>
+          <control type="spinner" format="integer" />
+        </setting>
+
+        <setting id="numradiogroups" type="integer" parent="radiogroupmode" label="30139" help="30654">
+          <level>0</level>
+          <default>1</default>
+          <constraints>
+            <minimum>1</minimum>
+            <step>1</step>
+            <maximum>5</maximum>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="radiogroupmode" operator="is">1</dependency>
+          </dependencies>
+          <control type="spinner" format="integer" />
+        </setting>
+        <setting id="oneradiogroup" type="string" parent="radiogroupmode" label="30059" help="30648">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="radiogroupmode" operator="is">1</dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="tworadiogroup" type="string" parent="radiogroupmode" label="30140" help="30648">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="radiogroupmode" operator="is">1</condition>
+                <condition setting="numradiogroups" operator="gt">1</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="threeradiogroup" type="string" parent="radiogroupmode" label="30141" help="30648">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="radiogroupmode" operator="is">1</condition>
+                <condition setting="numradiogroups" operator="gt">2</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="fourradiogroup" type="string" parent="radiogroupmode" label="30142" help="30648">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="radiogroupmode" operator="is">1</condition>
+                <condition setting="numradiogroups" operator="gt">3</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="fiveradiogroup" type="string" parent="radiogroupmode" label="30143" help="30648">
+          <level>0</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="radiogroupmode" operator="is">1</condition>
+                <condition setting="numradiogroups" operator="gt">4</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+
+        <setting id="customradiogroupsfile" type="path" parent="radiogroupmode" label="30133" help="30652">
+          <level>0</level>
+          <default>special://userdata/addon_data/pvr.vuplus/channelGroups/customRadioGroups-example.xml</default>
+          <constraints>
+            <allowempty>false</allowempty>
+            <writable>false</writable>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="radiogroupmode" operator="is">3</dependency>
+          </dependencies>
+          <control type="button" format="file">
+            <heading>1033</heading>
+          </control>
+        </setting>
+        <setting id="radiofavouritesmode" type="integer" label="30069" help="30649">
+          <level>2</level>
+          <default>0</default>
+          <constraints>
+            <options>
+              <option label="30430">0</option> <!-- DISABLED -->
+              <option label="30076">1</option> <!-- AS_FIRST_GROUP -->
+              <option label="30077">2</option> <!-- AS_LAST_GROUP -->
+            </options>
+          </constraints>
+          <dependencies>
+            <dependency type="visible">
+              <or>
+                <condition setting="radiogroupmode" operator="is">0</condition>
+                <condition setting="radiogroupmode" operator="is">1</condition>
+              </or>
+            </dependency>
+          </dependencies>
+          <control type="spinner" format="integer" />
+        </setting>
+        <setting id="excludelastscannedradio" type="boolean" label="30114" help="30650">
+          <level>3</level>
+          <default>true</default>
+          <dependencies>
+            <dependency type="visible" setting="radiogroupmode" operator="is">0</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+      </group>
+    </category>
+
+    <!-- EPG -->
+    <category id="epg" label="30032" help="30660">
+      <group id="1" label="30031">
+        <setting id="extractshowinfoenabled" type="boolean" label="30033" help="30661">
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="extractshowinfofile" type="path" parent="extractshowinfoenabled" label="30046" help="30662">
+          <level>0</level>
+          <default>special://userdata/addon_data/pvr.vuplus/showInfo/English-ShowInfo.xml</default>
+          <constraints>
+            <allowempty>false</allowempty>
+            <writable>false</writable>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="extractshowinfoenabled" operator="is">true</dependency>
+          </dependencies>
+          <control type="button" format="file">
+            <heading>1033</heading>
+          </control>
+        </setting>
+      </group>
+      <group id="2" label="30053">
+        <setting id="genreidmapenabled" type="boolean" label="30054" help="30663">
+          <level>2</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="genreidmapfile" type="path" parent="genreidmapenabled" label="30055" help="30664">
+          <level>2</level>
+          <default>special://userdata/addon_data/pvr.vuplus/genres/genreIdMappings/Sky-UK.xml</default>
+          <constraints>
+            <allowempty>false</allowempty>
+            <writable>false</writable>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="genreidmapenabled" operator="is">true</dependency>
+          </dependencies>
+          <control type="button" format="file">
+            <heading>1033</heading>
+          </control>
+        </setting>
+      </group>
+      <group id="3" label="30047">
+        <setting id="rytecgenretextmapenabled" type="boolean" label="30048" help="30665">
+          <level>2</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="rytecgenretextmapfile" type="path" parent="rytecgenretextmapenabled" label="30049" help="30666">
+          <level>2</level>
+          <default>special://userdata/addon_data/pvr.vuplus/genres/genreRytecTextMappings/Rytec-UK-Ireland.xml</default>
+          <constraints>
+            <allowempty>false</allowempty>
+            <writable>false</writable>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="rytecgenretextmapenabled" operator="is">true</dependency>
+          </dependencies>
+          <control type="button" format="file">
+            <heading>1033</heading>
+          </control>
+        </setting>
+        <setting id="logmissinggenremapping" type="boolean" parent="rytecgenretextmapenabled" label="30037" help="30667">
+          <level>2</level>
+          <default>false</default>
+          <dependencies>
+            <dependency type="visible" setting="rytecgenretextmapenabled" operator="is">true</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+      </group>
+      <group id="4" label="30105">
+        <setting id="epgdelayperchannel" type="integer" label="30106" help="30668">
+          <level>2</level>
+          <default>0</default>
+          <constraints>
+            <minimum>0</minimum>
+            <step>250</step>
+            <maximum>5000</maximum>
+          </constraints>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14046</formatlabel>
+          </control>
+        </setting>
+      </group>
+    </category>
+
+    <!-- Recordings -->
+    <category id="recordings" label="30070" help="30680">
+      <group id="1" label="30071">
+        <setting id="storeextrarecordinginfo" type="boolean" label="30127" help="30681">
+          <level>0</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="sharerecordinglastplayed" type="integer" parent="storeextrarecordinginfo" label="30128" help="30682">
+          <level>0</level>
+          <default>0</default>
+          <dependencies>
+            <dependency type="enable" setting="storeextrarecordinginfo" operator="is">true</dependency>
+          </dependencies>
+          <constraints>
+            <options>
+              <option label="30129">0</option> <!-- ACROSS_KODI_INSTANCES -->
+              <option label="30130">1</option> <!-- ACROSS_KODI_AND_E2_INSTANCES -->
+            </options>
+          </constraints>
+          <control type="spinner" format="integer" />
+        </setting>
+      </group>
+
+      <group id="2" label="30157">
+        <setting id="virtualfolders" type="boolean" label="30085" help="30691">
+          <level>2</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="keepfolders" type="boolean" label="30030" help="30685">
+          <level>2</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="keepfoldersomitlocation" type="boolean" parent="keepfolders" label="30084" help="30690">
+          <level>2</level>
+          <default>true</default>
+          <dependencies>
+            <dependency type="visible" setting="keepfolders">true</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+      </group>
+
+      <group id="3" label="30158">
+        <setting id="recordingsrecursive" type="boolean" label="30022" help="30689">
+          <level>2</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="onlycurrent" type="boolean" label="30017" help="30684">
+          <level>2</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+      </group>
+
+      <group id="4" label="30107">
+        <setting id="enablerecordingedls" type="boolean" label="30108" help="30686">
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="edlpaddingstart" type="integer" parent="enablerecordingedls" label="30109" help="30687">
+          <level>0</level>
+          <default>0</default>
+          <constraints>
+            <minimum>-10000</minimum>
+            <step>500</step>
+            <maximum>10000</maximum>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="enablerecordingedls">true</dependency>
+          </dependencies>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14046</formatlabel>
+          </control>
+        </setting>
+        <setting id="edlpaddingstop" type="integer" parent="enablerecordingedls" label="30110" help="30688">
+          <level>0</level>
+          <default>0</default>
+          <constraints>
+            <minimum>-10000</minimum>
+            <step>500</step>
+            <maximum>10000</maximum>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="enablerecordingedls">true</dependency>
+          </dependencies>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14046</formatlabel>
+          </control>
+        </setting>
+      </group>
+    </category>
+
+    <!-- Timers-->
+    <category id="timers" label="30072" help="30700">
+      <group id="1" label="30072">
+        <setting id="enablegenrepeattimers" type="boolean" label="30036" help="30701">
+          <level>1</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="numgenrepeattimers" type="integer" parent="enablegenrepeattimers" label="30073" help="30702">
+          <level>1</level>
+          <default>1</default>
+          <constraints>
+            <minimum>1</minimum>
+            <step>1</step>
+            <maximum>10</maximum>
+          </constraints>
+          <dependencies>
+            <dependency type="enable" setting="enablegenrepeattimers">true</dependency>
+          </dependencies>
+          <control type="edit" format="integer" />
+        </setting>
+        <setting id="timerlistcleanup" type="boolean" label="30011" help="30703">
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="recordingpath" type="string" label="30023" help="30683">
+          <level>2</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <control type="edit" format="string" />
+        </setting>
+      </group>
+      <group id="2" label="30123">
+        <setting id="enableautotimers" type="boolean" label="30034" help="30704">
+          <level>0</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="limitanychannelautotimers" type="boolean" label="30124" help="30705">
+          <level>2</level>
+          <default>true</default>
+          <dependencies>
+            <dependency type="visible" setting="enableautotimers" operator="is">true</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+        <setting id="limitanychannelautotimerstogroups" type="boolean" parent="limitanychannelautotimers" label="30125" help="30706">
+          <level>2</level>
+          <default>true</default>
+          <dependencies>
+            <dependency type="visible" setting="enableautotimers" operator="is">true</dependency>
+            <dependency type="enable" setting="limitanychannelautotimers">true</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+      </group>
+    </category>
+
+    <!-- Timeshift -->
+    <category id="timeshift" label="30060" help="30720">
+      <group id="1" label="30060">
+        <setting id="enabletimeshift" type="integer" label="30061" help="30721">
+          <level>0</level>
+          <default>0</default>
+          <constraints>
+            <options>
+              <option label="30063">0</option> <!-- OFF -->
+              <option label="30064">1</option> <!-- ON_PLAYBACK -->
+              <option label="30065">2</option> <!-- ON_PAUSE -->
+            </options>
+          </constraints>
+          <control type="spinner" format="integer" />
+        </setting>
+        <setting id="timeshiftbufferpath" type="path" parent="enabletimeshift" label="30062" help="30722">
+          <level>0</level>
+          <default>special://userdata/addon_data/pvr.vuplus</default>
+          <constraints>
+            <allowempty>true</allowempty>
+            <writable>true</writable>
+          </constraints>
+          <dependencies>
+            <dependency type="enable" setting="enabletimeshift" operator="gt">0</dependency>
+          </dependencies>
+          <control type="button" format="path">
+            <heading>657</heading>
+          </control>
+        </setting>
+        <setting id="enabletimeshiftdisklimit" type="boolean" label="30153" help="30727">
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="timeshiftdisklimit" type="number" label="30154" help="30628">
+          <level>0</level>
+          <default>4.0</default>
+          <constraints>
+            <minimum>0</minimum>
+            <step>0.1</step>
+            <maximum>128</maximum>
+          </constraints>
+          <dependencies>
+            <dependency type="visible" setting="enabletimeshiftdisklimit" operator="is">true</dependency>
+          </dependencies>
+          <control type="slider" format="number">
+            <formatlabel>30155</formatlabel>
+          </control>
+        </setting>
+      </group>
+      <group id="2" label="30147">
+        <setting id="timeshiftEnabledIptv" type="boolean" label="30148" help="30723">
+          <level>0</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="useFFmpegReconnect" type="boolean" parent="timeshiftEnabledIptv" label="30149" help="30724">
+          <level>3</level>
+          <default>true</default>
+          <dependencies>
+            <dependency type="enable" setting="timeshiftEnabledIptv" operator="is">true</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+        <setting id="useMpegtsForUnknownStreams" type="boolean" parent="timeshiftEnabledIptv" label="30150" help="30725">
+          <level>3</level>
+          <default>true</default>
+          <dependencies>
+            <dependency type="enable" setting="timeshiftEnabledIptv" operator="is">true</dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
+        <setting id="ffmpegdirectSettings" type="action" label="30151" help="30726">
+          <level>0</level>
+          <data>Addon.OpenSettings(inputstream.ffmpegdirect)</data>
+          <dependencies>
+            <dependency type="enable" setting="timeshiftEnabledIptv" operator="is">true</dependency>
+          </dependencies>
+          <control type="button" format="action">
+            <close>true</close>
+          </control>
+        </setting>
+      </group>
+    </category>
+
+    <!-- Backend -->
+    <category id="backend" label="30086" help="30760">
+      <group id="1" label="30090">
+        <setting id="webifversion" type="string" label="30091" help="30761">
+          <level>0</level>
+          <default>N/A</default>
+          <dependencies>
+            <dependency type="enable" setting="timeshiftbufferpath" operator="is">AnyTextThatDoesNotMatch</dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="autotimertagintags" type="string" label="30092" help="30762">
+          <level>0</level>
+          <default>N/A</default>
+          <dependencies>
+            <dependency type="enable" setting="timeshiftbufferpath" operator="is">AnyTextThatDoesNotMatch</dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="autotimernameintags" type="string" label="30093" help="30763">
+          <level>0</level>
+          <default>N/A</default>
+          <dependencies>
+            <dependency type="enable" setting="timeshiftbufferpath" operator="is">AnyTextThatDoesNotMatch</dependency>
+          </dependencies>
+          <control type="edit" format="string" />
+        </setting>
+      </group>
+
+      <group id="2" label="30145">
+        <setting id="wakeonlanmac" type="string" label="30146" help="30766">
+          <level>1</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+          </constraints>
+          <control type="edit" format="string" />
+        </setting>
+        <setting id="powerstatemode" type="integer" label="30024" help="30742">
+          <level>1</level>
+          <default>0</default>
+          <constraints>
+            <options>
+              <option label="30430">0</option> <!-- DISABLED -->
+              <option label="30097">1</option> <!-- STANDBY -->
+              <option label="30098">2</option> <!-- DEEP_STANDBY -->
+              <option label="30099">3</option> <!-- WAKEUP_THEN_STANDBY -->
+            </options>
+          </constraints>
+          <control type="list" format="integer" />
+        </setting>
+      </group>
+
+      <group id="3" label="30087">
+        <setting id="globalstartpaddingstb" type="integer" label="30088" help="30764">
+          <level>0</level>
+          <default>0</default>
+          <constraints>
+            <minimum>0</minimum>
+            <step>1</step>
+            <maximum>120</maximum>
+          </constraints>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14044</formatlabel>
+          </control>
+        </setting>
+        <setting id="globalendpaddingstb" type="integer" label="30089" help="30765">
+          <level>0</level>
+          <default>0</default>
+          <constraints>
+            <minimum>0</minimum>
+            <step>1</step>
+            <maximum>120</maximum>
+          </constraints>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14044</formatlabel>
+          </control>
+        </setting>
+      </group>
+    </category>
+
+    <!-- Advanced -->
+    <category id="advanced" label="30020" help="30740">
+      <group id="1" label="30052">
+        <setting id="prependoutline" type="integer" label="30040" help="30741">
+          <level>1</level>
+          <default>0</default>
+          <constraints>
+            <options>
+              <option label="30042">0</option> <!-- NEVER -->
+              <option label="30043">1</option> <!-- IN_EPG -->
+              <option label="30044">2</option> <!-- IN_RECORDINGS -->
+              <option label="30045">3</option> <!-- ALWAYS -->
+            </options>
+          </constraints>
+          <control type="list" format="integer" />
+        </setting>
+        <setting id="readtimeout" type="integer" label="30050" help="30743">
+          <level>3</level>
+          <default>0</default>
+          <constraints>
+            <minimum>0</minimum>
+            <step>1</step>
+            <maximum>60</maximum>
+          </constraints>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14045</formatlabel>
+          </control>
+        </setting>
+        <setting id="streamreadchunksize" type="integer" label="30041" help="30744">
+          <level>3</level>
+          <default>0</default>
+          <constraints>
+            <minimum>0</minimum>
+            <step>4</step>
+            <maximum>128</maximum>
+          </constraints>
+          <control type="slider" format="integer">
+            <popup>true</popup>
+            <formatlabel>14049</formatlabel>
+          </control>
+        </setting>
+      </group>
+    </category>
+  </section>
+</settings>
diff --git a/pvr.vuplus/resources/language/resource.language.ast_es/strings.po b/pvr.vuplus/resources/language/resource.language.ast_es/strings.po
new file mode 100644
index 0000000..b2d34c1
--- /dev/null
+++ b/pvr.vuplus/resources/language/resource.language.ast_es/strings.po
@@ -0,0 +1,1430 @@
+# Kodi Media Center language file
+# Addon Name: Enigma2 Client
+# Addon id: pvr.vuplus
+# Addon Provider: Joerg Dembski and Ross Nicholson
+msgid ""
+msgstr ""
+"Project-Id-Version: KODI Main\n"
+"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: ast_es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgctxt "Addon Summary"
+msgid "Kodi's frontend for Enigma2 based set-top boxes"
+msgstr ""
+
+msgctxt "Addon Description"
+msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
+msgstr ""
+
+msgctxt "Addon Disclaimer"
+msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
+msgstr ""
+
+#. ##################
+#. settings labels #
+#. ##################
+#. label: Connection - host
+msgctxt "#30000"
+msgid "Enigma2 hostname or IP address"
+msgstr ""
+
+#empty string with id 30001
+#. label: Connection - streamport
+msgctxt "#30002"
+msgid "Streaming port"
+msgstr ""
+
+#. label: Connection - user
+msgctxt "#30003"
+msgid "Username"
+msgstr ""
+
+#. label: Connection - pass
+msgctxt "#30004"
+msgid "Password"
+msgstr ""
+
+#. label-category: connection
+msgctxt "#30005"
+msgid "Connection"
+msgstr ""
+
+#. label-group: General - Icons
+msgctxt "#30006"
+msgid "Icons"
+msgstr ""
+
+#. label-group: General - Program Streams
+msgctxt "#30007"
+msgid "Program Streams"
+msgstr ""
+
+#. label: General - iconpath
+msgctxt "#30008"
+msgid "Icon path"
+msgstr ""
+
+#. label-group: General - Update Interval
+msgctxt "#30009"
+msgid "Update Interval"
+msgstr ""
+
+#empty string with id 30010
+#. label: Timers - timerlistcleanup
+msgctxt "#30011"
+msgid "Automatic timerlist cleanup"
+msgstr ""
+
+#. label: Connection - webport
+msgctxt "#30012"
+msgid "Web interface port"
+msgstr ""
+
+#. label: Channels - zap
+msgctxt "#30013"
+msgid "Zap before channelswitch (i.e. for single tuner boxes)"
+msgstr ""
+
+#. label: Channels - setprogramid
+msgctxt "#30014"
+msgid "Set program id for live channel or recorded streams"
+msgstr ""
+
+#. label: General - updateint
+msgctxt "#30015"
+msgid "Update interval"
+msgstr ""
+
+#. label: Channels - usegroupspecificnumbers
+msgctxt "#30016"
+msgid "Use bouquet specific channel numbers from backend"
+msgstr ""
+
+#. label: Recordings - onlycurrent
+msgctxt "#30017"
+msgid "Only use current recording path from backend"
+msgstr ""
+
+#. label-category: general
+#. label-group: Channels
+msgctxt "#30018"
+msgid "General"
+msgstr ""
+
+#. label-category: channels
+msgctxt "#30019"
+msgid "Channels"
+msgstr ""
+
+#. label-category: advanced
+#. label-group: Connection - Advanced
+msgctxt "#30020"
+msgid "Advanced"
+msgstr ""
+
+#empty string with id 30021
+#. label: Recordings - recordingsrecursive
+msgctxt "#30022"
+msgid "Use recursive listing for recording locations"
+msgstr ""
+
+#. label: Timers - recordingpath
+msgctxt "#30023"
+msgid "New timer default recording folder"
+msgstr ""
+
+#. label: Advanced - powerstatemode
+msgctxt "#30024"
+msgid "Send powerstate mode on addon exit"
+msgstr ""
+
+#. label: Channels - tvgroupmode
+msgctxt "#30025"
+msgid "TV bouquet fetch mode"
+msgstr ""
+
+#. label: Channels - onetvgroup
+msgctxt "#30026"
+msgid "TV bouquet 1"
+msgstr ""
+
+#. label: General - onlinepicons
+msgctxt "#30027"
+msgid "Fetch picons from web interface"
+msgstr ""
+
+#. label: Connection - use_secure
+msgctxt "#30028"
+msgid "Use secure HTTP (https)"
+msgstr ""
+
+#. label: Connection - autoconfig
+msgctxt "#30029"
+msgid "Enable automatic configuration for live streams"
+msgstr ""
+
+#. label: Recordings - keepfolders
+msgctxt "#30030"
+msgid "Keep folder structure for recordings"
+msgstr ""
+
+#. label-group: EPG - Seasons and Episodes
+msgctxt "#30031"
+msgid "Seasons and Episodes"
+msgstr ""
+
+#. label-category: epg
+msgctxt "#30032"
+msgid "EPG"
+msgstr ""
+
+#. label: EPG - extractshowinfoenabled
+msgctxt "#30033"
+msgid "Extract season, episode and year info where possible"
+msgstr ""
+
+#. label: Timers - enableautotimers
+msgctxt "#30034"
+msgid "Enable autotimers"
+msgstr ""
+
+#. label: General - usepiconseuformat
+msgctxt "#30035"
+msgid "Use picons.eu file format"
+msgstr ""
+
+#. label: Timers - enablegenrepeattimers
+msgctxt "#30036"
+msgid "Enable generate repeat timers"
+msgstr ""
+
+#. label: EPG - logmissinggenremapping
+msgctxt "#30037"
+msgid "Log missing genre text mappings"
+msgstr ""
+
+#. label-group: Connection - Web Interface
+msgctxt "#30038"
+msgid "Web Interface"
+msgstr ""
+
+#. label-group: Connection - Streaming
+msgctxt "#30039"
+msgid "Streaming"
+msgstr ""
+
+#. label: Advanced - prependoutline
+msgctxt "#30040"
+msgid "Put outline (e.g. sub-title) before plot"
+msgstr ""
+
+#. label: Advanced - streamreadchunksize
+msgctxt "#30041"
+msgid "Stream read chunk size"
+msgstr ""
+
+#. label - Advanced - prependoutline
+msgctxt "#30042"
+msgid "Never"
+msgstr ""
+
+#. label - Advanced - prependoutline
+msgctxt "#30043"
+msgid "In EPG only"
+msgstr ""
+
+#. label - Advanced - prependoutline
+msgctxt "#30044"
+msgid "In recordings only"
+msgstr ""
+
+#. label - Advanced - prependoutline
+msgctxt "#30045"
+msgid "Always"
+msgstr ""
+
+#. label: EPG - extractshowinfofile
+msgctxt "#30046"
+msgid "Extract show info file"
+msgstr ""
+
+#. label-group: EPG - Rytec genre text Mappings
+msgctxt "#30047"
+msgid "Rytec genre text Mappings"
+msgstr ""
+
+#. label: EPG - rytecgenretextmapenabled
+msgctxt "#30048"
+msgid "Enable Rytec genre text mappings"
+msgstr ""
+
+#. label: EPG - rytecgenretextmapfile
+msgctxt "#30049"
+msgid "Rytec genre text mappings file"
+msgstr ""
+
+#. label: Advanced - readtimeout
+msgctxt "#30050"
+msgid "Custom live TV timeout (0 to use default)"
+msgstr ""
+
+#. label-group: Connection - Login
+msgctxt "#30051"
+msgid "Login"
+msgstr ""
+
+#. label-group: Advanced - Misc
+msgctxt "#30052"
+msgid "Misc"
+msgstr ""
+
+#. label-group: EPG - Genre ID Mappings
+msgctxt "#30053"
+msgid "Genre ID Mappings"
+msgstr ""
+
+#. label: EPG - genreidmapenabled
+msgctxt "#30054"
+msgid "Enable genre ID Mappings"
+msgstr ""
+
+#. label: EPG - genreidmapfile
+msgctxt "#30055"
+msgid "Genre ID mappings file"
+msgstr ""
+
+#. label-group: Channels - TV
+msgctxt "#30056"
+msgid "TV"
+msgstr ""
+
+#. label-group: Channels - Radio
+msgctxt "#30057"
+msgid "Radio"
+msgstr ""
+
+#. label: Channels - radiogroupmode
+msgctxt "#30058"
+msgid "Radio bouquet fetch mode"
+msgstr ""
+
+#. label: Channels - oneradiogroup
+msgctxt "#30059"
+msgid "Radio bouquet 1"
+msgstr ""
+
+#. label-category: timeshift
+#. label-group: Timeshift - Timeshift
+msgctxt "#30060"
+msgid "Timeshift"
+msgstr ""
+
+#. label: Timeshift - enabletimeshift
+msgctxt "#30061"
+msgid "Enable timeshift"
+msgstr ""
+
+#. label: Timeshift - timeshiftbufferpath
+msgctxt "#30062"
+msgid "Timeshift buffer path"
+msgstr ""
+
+#. label-option: Timeshift - enabletimeshift
+msgctxt "#30063"
+msgid "Off"
+msgstr ""
+
+#. label-option: Timeshift - enabletimeshift
+msgctxt "#30064"
+msgid "On playback"
+msgstr ""
+
+#. label-option: Timeshift - enabletimeshift
+msgctxt "#30065"
+msgid "On pause"
+msgstr ""
+
+#. label: Connection - use_secure_stream
+msgctxt "#30066"
+msgid "Use secure HTTP (https) for streams"
+msgstr ""
+
+#. label: Connection - use_login_stream
+msgctxt "#30067"
+msgid "Use login for streams"
+msgstr ""
+
+#. label: Channels - tvfavouritesmode
+msgctxt "#30068"
+msgid "Fetch TV favourites bouquet"
+msgstr ""
+
+#. label: Channels - radiofavouritesmode
+msgctxt "#30069"
+msgid "Fetch radio favourites bouquet"
+msgstr ""
+
+#. label-category: recordings
+msgctxt "#30070"
+msgid "Recordings"
+msgstr ""
+
+#. label-group: Recordings - Recordings
+msgctxt "#30071"
+msgid "Recordings"
+msgstr ""
+
+#. label-category: timers
+#. label-group: Timers - timers
+msgctxt "#30072"
+msgid "Timers"
+msgstr ""
+
+#. label: Timers - numgenrepeattimers
+msgctxt "#30073"
+msgid "Number of repeat timers to generate"
+msgstr ""
+
+#. label-option: Channels - tvgroupmode
+#. label-option: Channels - radiogroupmode
+msgctxt "#30074"
+msgid "All bouquets"
+msgstr ""
+
+#. label-option: Channels - tvgroupmode
+#. label-option: Channels - radiogroupmode
+msgctxt "#30075"
+msgid "Some bouquets"
+msgstr ""
+
+#. label-option: Channels - tvfavouritesmode
+#. label-option: Channels - radiofavouritesmode
+msgctxt "#30076"
+msgid "As first bouquet"
+msgstr ""
+
+#. label-option: Channels - tvfavouritesmode
+#. label-option: Channels - radiofavouritesmode
+msgctxt "#30077"
+msgid "As last bouquet"
+msgstr ""
+
+#. label-option: Channels - tvgroupmode
+#. label-option: Channels - radiogroupmode
+msgctxt "#30078"
+msgid "Favourites bouquet"
+msgstr ""
+
+#. application: ChannelGroups
+msgctxt "#30079"
+msgid "Favourites (TV)"
+msgstr ""
+
+#. application: ChannelGroups
+msgctxt "#30080"
+msgid "Favourites (Radio)"
+msgstr ""
+
+#. application: Client
+#. application: Admin
+msgctxt "#30081"
+msgid "unknown"
+msgstr ""
+
+#. application: Client
+msgctxt "#30082"
+msgid " (Not connected!)"
+msgstr ""
+
+#. application: Client
+msgctxt "#30083"
+msgid "addon error"
+msgstr ""
+
+#. label: Recordings - keepfoldersomitlocation
+msgctxt "#30084"
+msgid "Omit location path from recording directory"
+msgstr ""
+
+#. label: Recordings - virtualfolders
+msgctxt "#30085"
+msgid "Group recordings into folders by title"
+msgstr ""
+
+#. label-category: backend
+msgctxt "#30086"
+msgid "Backend"
+msgstr ""
+
+#. label-group: Backend - Recording Padding
+msgctxt "#30087"
+msgid "Recording Padding"
+msgstr ""
+
+#. label: Backend - globalstartpaddingstb
+msgctxt "#30088"
+msgid "Global start padding"
+msgstr ""
+
+#. label: Backend - globalendpaddingstb
+msgctxt "#30089"
+msgid "Global end padding"
+msgstr ""
+
+#. label-group: Backend - Device Info
+msgctxt "#30090"
+msgid "Device Info"
+msgstr ""
+
+#. label: Backend - webifversion
+msgctxt "#30091"
+msgid "WebIf version"
+msgstr ""
+
+#. label: Backend - autotimertagintags
+msgctxt "#30092"
+msgid "AutoTimer tag in timer tags"
+msgstr ""
+
+#. label: Backend - autotimernameintags
+msgctxt "#30093"
+msgid "AutoTimer name in timer tags"
+msgstr ""
+
+#. application: Admin
+msgctxt "#30094"
+msgid "N/A"
+msgstr ""
+
+#. application: Admin
+msgctxt "#30095"
+msgid "True"
+msgstr ""
+
+#. application: Admin
+msgctxt "#30096"
+msgid "False"
+msgstr ""
+
+#. label-option: Advanced - powerstatemode
+msgctxt "#30097"
+msgid "Standby"
+msgstr ""
+
+#. label-option: Advanced - powerstatemode
+msgctxt "#30098"
+msgid "Deep standby"
+msgstr ""
+
+#. label-option: Advanced - powerstatemode
+msgctxt "#30099"
+msgid "Wakeup, then standby"
+msgstr ""
+
+#. label: General - updatemode
+msgctxt "#30100"
+msgid "Update mode"
+msgstr ""
+
+#. label-option: General - updatemode
+msgctxt "#30101"
+msgid "Timers and recordings"
+msgstr ""
+
+#. label-option: General - updatemode
+msgctxt "#30102"
+msgid "Timers only"
+msgstr ""
+
+#. label: General - useopenwebifpiconpath
+msgctxt "#30103"
+msgid "Use OpenWebIf picon path"
+msgstr ""
+
+#. label: Advanced - tracedebug
+msgctxt "#30104"
+msgid "Enable trace logging in debug mode"
+msgstr ""
+
+#. label-group - EPG - Other
+msgctxt "#30105"
+msgid "Other"
+msgstr ""
+
+#. label: EPG - epgdelayperchannel
+msgctxt "#30106"
+msgid "EPG update delay per channel"
+msgstr ""
+
+#. label-group: Recordings - Recording EDLs (Edit Decision Lists)
+msgctxt "#30107"
+msgid "Recording EDLs (Edit Decision Lists)"
+msgstr ""
+
+#. label: Recordings - enablerecordingedls
+msgctxt "#30108"
+msgid "Enable EDLs support"
+msgstr ""
+
+#. label: Recordings - edlpaddingstart
+msgctxt "#30109"
+msgid "EDL start time padding"
+msgstr ""
+
+#. label: Recordings - edlpaddingstop
+msgctxt "#30110"
+msgid "EDL stop time padding"
+msgstr ""
+
+#. label: Advanced - debugnormal
+msgctxt "#30111"
+msgid "Enable debug logging in normal mode"
+msgstr ""
+
+#. application: ChannelGroups
+msgctxt "#30112"
+msgid "Last Scanned (TV)"
+msgstr ""
+
+#. application: ChannelGroups
+msgctxt "#30113"
+msgid "Last Scanned (Radio)"
+msgstr ""
+
+#. label: Channels - excludelastscannedtv
+#. label: Channels - excludelastscannedradio
+msgctxt "#30114"
+msgid "Exclude last scanned bouquet"
+msgstr ""
+
+#. label: EPG - skipinitialepg
+msgctxt "#30115"
+msgid "Skip Initial EPG Load"
+msgstr ""
+
+#. label: General - channelandgroupupdatemode
+msgctxt "#30116"
+msgid "Channels and groups update mode"
+msgstr ""
+
+#. label-option: General - channelandgroupupdatemode
+msgctxt "#30117"
+msgid "Disabled"
+msgstr ""
+
+#. label-option: General - channelandgroupupdatemode
+msgctxt "#30118"
+msgid "Notify on UI and Log"
+msgstr ""
+
+#. label-option: General - channelandgroupupdatemode
+msgctxt "#30119"
+msgid "Reload Channels and Groups"
+msgstr ""
+
+#. label: General - channelandgroupupdatehour
+msgctxt "#30120"
+msgid "Channels and groups update hour (24h)"
+msgstr ""
+
+#. label: Connection - connectionchecktimeout
+msgctxt "#30121"
+msgid "Connection check timeout"
+msgstr ""
+
+#. label: Connection - connectioncheckinterval
+msgctxt "#30122"
+msgid "Connection check interval"
+msgstr ""
+
+#. label: Timers - Autotimers
+msgctxt "#30123"
+msgid "Autotimers"
+msgstr ""
+
+#. label: Timers - limitanychannelautotimers
+msgctxt "#30124"
+msgid "Limit 'Any Channel' autotimers to TV or Radio"
+msgstr ""
+
+#. label: Timers - limitanychannelautotimerstogroups
+msgctxt "#30125"
+msgid "Limit to groups of original EPG channel"
+msgstr ""
+
+#. label: Channels - usestandardserviceref
+msgctxt "#30126"
+msgid "Use standard channel service reference"
+msgstr ""
+
+#. label: Recordings - storeextrarecordinginfo
+msgctxt "#30127"
+msgid "Store last played/play count on the backend"
+msgstr ""
+
+#. label: Recordings - sharerecordinglastplayed
+msgctxt "#30128"
+msgid "Share last played across:"
+msgstr ""
+
+#. label-option: Recordings - sharerecordinglastplayed
+msgctxt "#30129"
+msgid "Kodi instances"
+msgstr ""
+
+#. label-option: Recordings - sharerecordinglastplayed
+msgctxt "#30130"
+msgid "Kodi/E2 instances"
+msgstr ""
+
+#. label-option: Channels - tvgroupmode
+#. label-option: Channels - radiogroupmode
+msgctxt "#30131"
+msgid "Custom bouquets"
+msgstr ""
+
+#. label: Channels - customtvgroupsfile
+msgctxt "#30132"
+msgid "Custom TV bouquets file"
+msgstr ""
+
+#. label: Channels - customradiogroupsfile
+msgctxt "#30133"
+msgid "Custom Radio bouquets file"
+msgstr ""
+
+#. label: Channels - numtvgroups
+msgctxt "#30134"
+msgid "Number of TV bouquets"
+msgstr ""
+
+#. label: Channels - twotvgroup
+msgctxt "#30135"
+msgid "TV bouquet 2"
+msgstr ""
+
+#. label: Channels - threetvgroup
+msgctxt "#30136"
+msgid "TV bouquet 3"
+msgstr ""
+
+#. label: Channels - fourtvgroup
+msgctxt "#30137"
+msgid "TV bouquet 4"
+msgstr ""
+
+#. label: Channels - fivetvgroup
+msgctxt "#30138"
+msgid "TV bouquet 5"
+msgstr ""
+
+#. label: Channels - numradiogroups
+msgctxt "#30139"
+msgid "Number of radio bouquets"
+msgstr ""
+
+#. label: Channels - tworadiogroup
+msgctxt "#30140"
+msgid "Radio bouquet 2"
+msgstr ""
+
+#. label: Channels - threeradiogroup
+msgctxt "#30141"
+msgid "Radio bouquet 3"
+msgstr ""
+
+#. label: Channels - fourradiogroup
+msgctxt "#30142"
+msgid "Radio bouquet 4"
+msgstr ""
+
+#. label: Channels - fiveradiogroup
+msgctxt "#30143"
+msgid "Radio bouquet 5"
+msgstr ""
+
+#. label: Advanced - ignoredebug
+msgctxt "#30144"
+msgid "No addon debug logging in Kodi debug mode"
+msgstr ""
+
+#. label-group: Backend - Power Settings
+msgctxt "#30145"
+msgid "Power Settings"
+msgstr ""
+
+#. label: Backend - wakeonlanmac
+msgctxt "#30146"
+msgid "Wake On LAN MAC"
+msgstr ""
+
+#. label: Timeshift - IPTV
+msgctxt "#30147"
+msgid "IPTV"
+msgstr ""
+
+#. label: Timeshift - timeshiftEnabled
+msgctxt "#30148"
+msgid "Enable timeshift for IPTV streams"
+msgstr ""
+
+#. label: Timeshift - useFFmpegReconnect
+msgctxt "#30149"
+msgid "Use FFmpeg http reconnect options if possible"
+msgstr ""
+
+#. label: Timeshift - useMpegtsForUnknownStreams
+msgctxt "#30150"
+msgid "Use mpegts MIME type for unknown streams"
+msgstr ""
+
+#. label: Timeshift - timeshiftFFmpegdirectSettings
+msgctxt "#30151"
+msgid "- Modify inputstream.ffmpegdirect settings..."
+msgstr ""
+
+#. label: Channels - retrieveprovidername
+msgctxt "#30152"
+msgid "Retrieve provider name for channels"
+msgstr ""
+
+#. label: Timeshift - enabletimeshiftdisklimit
+msgctxt "#30153"
+msgid "Enable timeshift disk limit"
+msgstr ""
+
+#. label: Timeshift - timeshiftdisklimit
+msgctxt "#30154"
+msgid "Timeshift disk limit"
+msgstr ""
+
+#. format-label: Timeshift - timeshiftdisklimit
+msgctxt "#30155"
+msgid "{0:.1f} GiB"
+msgstr ""
+
+#. label-group: Recordings - Recording Paths
+msgctxt "#30157"
+msgid "Recording Paths"
+msgstr ""
+
+#. label-group: Recordings - Recording Locations
+msgctxt "#30158"
+msgid "Recording Locations"
+msgstr ""
+
+#empty strings from id 30159 to 30409
+#. ##############
+#. application #
+#. ##############
+#. application: Timers
+msgctxt "#30410"
+msgid "Automatic"
+msgstr ""
+
+#empty strings from id 30411 to 30419
+#. application: Timers
+msgctxt "#30420"
+msgid "Once off timer (auto)"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30421"
+msgid "Once off timer (repeating)"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30422"
+msgid "Once off timer (channel)"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30423"
+msgid "Repeating time/channel based"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30424"
+msgid "One time guide-based"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30425"
+msgid "Repeating guide-based"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30426"
+msgid "Auto guide-based"
+msgstr ""
+
+#empty strings from id 30427 to 30429
+#. label-option: Channels - tvfavouritesmode
+#. label-option: Channels - radiofavouritesmode
+#. label-option: Advanced - powerstatemode
+#. application: Timers
+msgctxt "#30430"
+msgid "Disabled"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30431"
+msgid "Record if EPG title differs"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30432"
+msgid "Record if EPG title and short description differs"
+msgstr ""
+
+#. application: Timers
+msgctxt "#30433"
+msgid "Record if EPG title and all descriptions differ"
+msgstr ""
+
+#empty strings from id 30434 to 30513
+#. ################
+#. notifications #
+#. ################
+#. notification: Client
+msgctxt "#30514"
+msgid "Timeshift buffer path does not exist"
+msgstr ""
+
+#. notification: Enigma2
+msgctxt "#30515"
+msgid "Enigma2: Could not reach web interface"
+msgstr ""
+
+#. notification: Enigma2
+msgctxt "#30516"
+msgid "Enigma2: No channel groups found"
+msgstr ""
+
+#. notification: Enigma2
+msgctxt "#30517"
+msgid "Enigma2: No channels found"
+msgstr ""
+
+#. notification: Enigma2
+msgctxt "#30518"
+msgid "Enigma2: Channel group changes detected, please restart to load changes"
+msgstr ""
+
+#. notification: Enigma2
+msgctxt "#30519"
+msgid "Enigma2: Channel changes detected, please restart to load changes"
+msgstr ""
+
+#. application: AutoTimer
+#. application: Timer
+msgctxt "#30520"
+msgid "Invalid Channel"
+msgstr ""
+
+#. notification: Enigma2
+msgctxt "#30521"
+msgid "Enigma2: Channel group changes detected, reloading..."
+msgstr ""
+
+#. notification: Enigma2
+msgctxt "#30522"
+msgid "Enigma2: Channel changes detected, reloading..."
+msgstr ""
+
+#empty strings from id 30523 to 30599
+#. ############
+#. help info #
+#. ############
+#. help info - Connection
+#. help-category: connection
+msgctxt "#30600"
+msgid "This category cotains the settings for connecting to the Enigma2 device"
+msgstr ""
+
+#. help: Connection - host
+msgctxt "#30601"
+msgid "The IP address or hostname of your enigma2 based set-top box."
+msgstr ""
+
+#. help: Connection - webport
+msgctxt "#30602"
+msgid "The port used to connect to the web interface."
+msgstr ""
+
+#. help: Connection - use_secure
+msgctxt "#30603"
+msgid "Use https to connect to the web interface."
+msgstr ""
+
+#. help: Connection - user
+msgctxt "#30604"
+msgid "If the webinterface of the set-top box is protected with a username/password combination this needs to be set in this option."
+msgstr ""
+
+#. help: Connection - pass
+msgctxt "#30605"
+msgid "If the webinterface of the set-top box is protected with a username/password combination this needs to be set in this option."
+msgstr ""
+
+#. help: Connection - autoconfig
+msgctxt "#30606"
+msgid "When enabled the stream URL will be read from an M3U8 file. When disabled it is constructed based on the service reference of the channel. This option is rarely required and should not be enbaled unless you have a special use case. If viewing an IPTV Stream this option has no effect on those channels."
+msgstr ""
+
+#. help: Connection - streamport
+msgctxt "#30607"
+msgid "This option defines the streaming port the set-top box uses to stream live tv. The default is 8001 which should be fine if the user did not define a custom port within the webinterface."
+msgstr ""
+
+#. help: Connection - use_secure_stream
+msgctxt "#30608"
+msgid "Use https to connect to streams."
+msgstr ""
+
+#. help: Connection - use_login_stream
+msgctxt "#30609"
+msgid "Use the login username and password for streams."
+msgstr ""
+
+#. help: Connection - connectionchecktimeout
+msgctxt "#30610"
+msgid "The value in seconds to wait for a connection check to complete before failure. Useful for tuning on older Enigma2 devices. Note, this setting should rarely need to be changed. It's more likely the `Connection check interval` setting will have the desired effect. Default is 30 seconds."
+msgstr ""
+
+#. help: Connection - connectioncheckinterval
+msgctxt "#30611"
+msgid "The value in seconds to wait between connection checks. Useful for tuning on older Enigma2 devices. Default is 10 seconds."
+msgstr ""
+
+#empty strings from id 30612 to 30619
+#. help info - General
+#. help-category: general
+msgctxt "#30620"
+msgid "This category cotains the settings whivh generally need to be set by the user"
+msgstr ""
+
+#. help: General - onlinepicons
+msgctxt "#30621"
+msgid "Fetch the picons straight from the Enigma 2 set-top box."
+msgstr ""
+
+#. help: General - useopenwebifpiconpath
+msgctxt "#30622"
+msgid "Fetch the picon path from OpenWebIf instead of constructing from ServiceRef. Requires OpenWebIf 1.3.5 or higher. There is no effect if used on a lower version of OpenWebIf."
+msgstr ""
+
+#. help: General - usepiconseuformat
+msgctxt "#30623"
+msgid "Assume all picons files fetched from the set-top box start with '1_1_1_' and end with '_0_0_0'."
+msgstr ""
+
+#. help: General - iconpath
+msgctxt "#30624"
+msgid "In order to have Kodi display channel logos you have to copy the picons from your set-top box onto your OpenELEC machine. You then need to specify this path in this property."
+msgstr ""
+
+#. help: General - updateint
+msgctxt "#30625"
+msgid "As the set-top box can also be used to modify timers, delete recordings etc. and the set-top box does not notify the Kodi installation, the addon needs to regularly check for updates (new channels, new/changed/deletes timers, deleted recordings, etc.) This property defines how often the addon checks for updates. Please note that updating the recordings frequently can keep your receiver and it's harddisk from entering standby automatically."
+msgstr ""
+
+#. help: General - updatemode
+msgctxt "#30626"
+msgid "The mode used when the update interval is reached. Note that if there is any timer change detected a recordings update will always occur regardless of the update mode. Choose from one of the following two modes: [B]Timers and Recordings[/B] Update all timers and recordings; [B]Timers only[/B] Only update the timers. If it's important to not spin up the HDD on your STB use this option. The HDD should then only spin up when a timer event occurs."
+msgstr ""
+
+#. help: General - channelandgroupupdatemode
+msgctxt "#30627"
+msgid "The mode used when the hour in the next settings is reached. Choose from one of the following three modes: [B]Disabled[/B] Never check for channel and group changes; [B]Notify on UI and Log[/B] Display a notice in the UI and log the fact that a change was detectetd[/B]; [B]Reload Channels and Groups[/B] Disconnect and reconnect with E2 device to reload channels only if a change is detected."
+msgstr ""
+
+#. help: General - channelandgroupupdatehour
+msgctxt "#30628"
+msgid "The hour of the day when the check for new channels should occur. Default is 4h as the Auto Bouquet Maker (ABM) on the E2 device defaults to 3AM."
+msgstr ""
+
+#. help: Channels - setprogramid
+msgctxt "#30629"
+msgid "Some TV Providers (e.g. Nos - Portugal) using MPTS send extra program stream information. Setting the program id allows kodi to select the correct stream and therefore makes the channel/recording playable. Note that it takes approx 33% longer to open any stream with this option enabled."
+msgstr ""
+
+#empty strings from id 30630 to 30639
+#. help info - Channels
+#. help-category: channels
+msgctxt "#30640"
+msgid "This category cotains the settings for channels. When changing bouquets you may need to clear the channel cache to the settings to take effect. You can do this by going to the following in Kodi settings: 'Settings->PVR & Live TV->General->Clear cache'."
+msgstr ""
+
+#. help: Channels - usestandardserviceref
+msgctxt "#30641"
+msgid "Usually service reference's for the channels are in a standard format like '1:0:1:27F6:806:2:11A0000:0:0:0:'. On occasion depending on provider they can be extended with some text e.g. '1:0:1:27F6:806:2:11A0000:0:0:0::UTV' or '1:0:1:27F6:806:2:11A0000:0:0:0::UTV + 1'. If this option is enabled then all read service reference's will be read as standard. This is default behaviour. Functionality like autotimers will always convert to a standard reference."
+msgstr ""
+
+#. help: Channels - zap
+msgctxt "#30642"
+msgid "When using the addon with a single tuner box it may be necessary that the addon needs to be able to zap to another channel on the set-top box. If this option is enabled each channel switch in Kodi will also result in a channel switch on the set-top box. Please note that [B]allow channel switching[/B] needs to be enabled in the webinterface on the set-top box."
+msgstr ""
+
+#. help: Channels - tvgroupmode
+msgctxt "#30643"
+msgid "Choose from one of the following three modes: [B]All bouquets[/B] Fetch all TV bouquets from the set-top box; [B]Some bouquets[/B] Only fetch the bouquets specified in the next options; [B]Favourites group[/B] Only fetch the system bouquet for TV favourites; [B]Custom groups[/B] Fetch a set of bouquets from the Set-top box whose names are loaded from an XML file."
+msgstr ""
+
+#. help: Channels - onetvgroup
+#. help: Channels - twotvgroup
+#. help: Channels - threetvgroup
+#. help: Channels - fourtvgroup
+#. help: Channels - fivetvgroup
+msgctxt "#30644"
+msgid "If the previous option has been has been set to 'Some bouquets' you need to specify a TV bouquet to be fetched from the set-top box. Please note that this is the bouquet-name as shown on the set-top box (i.e. 'Favourites (TV)'). This setting is case-sensitive."
+msgstr ""
+
+#. help: Channels - tvfavouritesmode
+msgctxt "#30645"
+msgid "If the fetch mode is 'All bouquets' or 'Some bouquets' depending on your Enigma2 image you may need to explicitly fetch favourites if you require them. The options are: [B]Disabled[/B] Don't explicitly fetch TV favourites; [B]As first bouquet[/B] Explicitly fetch them as the first bouquet; [B]As last bouquet[/B] Explicitly fetch them as the last bouquet."
+msgstr ""
+
+#. help: Channels - excludelastscannedtv
+msgctxt "#30646"
+msgid "Last scanned is a system bouquet containing all the TV and Radio channels found in the last scan. Any TV channels found in the Last Scanned bouquet can be displayed as a group called 'Last Scanned (TV)' in Kodi. For TV this group is excluded by default. Disable this option to exclude this group. Note that if no TV groups are loaded the Last Scanned group for TV will be loaded by default regardless of this setting."
+msgstr ""
+
+#. help: Channels - radiogroupmode
+msgctxt "#30647"
+msgid "Choose from one of the following three modes: [B]All bouquets[/B] Fetch all Radio bouquets from the set-top box[/B]; [B]Some bouquets[/B] Only fetch the bouquets specified in the next options; [B]Favourites group[/B] Only fetch the system bouquet for Radio favourites; [B]Custom groups[/B] Fetch a set of bouquets from the Set-top box whose names are loaded from an XML file."
+msgstr ""
+
+#. help: Channels - oneradiogroup
+#. help: Channels - tworadiogroup
+#. help: Channels - threeradiogroup
+#. help: Channels - fourradiogroup
+#. help: Channels - fiveradiogroup
+msgctxt "#30648"
+msgid "If the previous option has been has been set to 'Some bouquets' you need to specify a Radio bouquet to be fetched from the set-top box. Please note that this is the bouquet-name as shown on the set-top box (i.e. 'Favourites (Radio)'). This setting is case-sensitive."
+msgstr ""
+
+#. help: Channels - radiofavouritesmode
+msgctxt "#30649"
+msgid "If the fetch mode is 'All bouquets' or 'Some bouquets' depending on your Enigma2 image you may need to explicitly fetch favourites if you require them. The options are: [B]Disabled[/B] Don't explicitly fetch Radio favourites; [B]As first bouquet[/B] Explicitly fetch them as the first bouquet; [B]As last bouquet[/B] Explicitly fetch them as the last bouquet."
+msgstr ""
+
+#. help: Channels - excludelastscannedradio
+msgctxt "#30650"
+msgid "Last scanned is a system bouquet containing all the TV and Radio channels found in the last scan. Any Radio channels found in the Last Scanned bouquet can be displayed as a group called 'Last Scanned (Radio)' in Kodi. For Radio this group is excluded by default. Disable this option to show this group."
+msgstr ""
+
+#. help: Channels - customtvgroupsfile
+msgctxt "#30651"
+msgid "The file used to load the custom TV bouquets (groups). If no groups can be matched the channel list will default to 'Last Scanned (TV)'. The default file is `customTVGroups-example.xml`."
+msgstr ""
+
+#. help: Channels - customradiogroupsfile
+msgctxt "#30652"
+msgid "The file used to load the custom Radio bouquets (groups). If no groups can be matched the channel list will default to 'Last Scanned (Radio)'. The default file is `customRadioGroups-example.xml`."
+msgstr ""
+
+#. help: Channels - numtvgroups
+msgctxt "#30653"
+msgid "The number of TV bouquets to load when `Some bouquets` is the selected fetch mode. Up to 5 can be chosen. If more than 5 are required the 'Custom bouquets' fetch mode should be used instead."
+msgstr ""
+
+#. help: Channels - numradiogroups
+msgctxt "#30654"
+msgid "The number of Radio bouquets to load when `Some bouquets` is the selected fetch mode. Up to 5 can be chosen. If more than 5 are required the 'Custom bouquets' fetch mode should be used instead."
+msgstr ""
+
+#. help: Channels - usegroupspecificnumbers
+msgctxt "#30655"
+msgid "If this option is enabled then each group in kodi will match the exact channel numbers used on the backend bouquets. If disabled (default) each channel will only have a single backend channel number (first occurence when loaded)."
+msgstr ""
+
+#. help: Channels - retrieveprovidername
+msgctxt "#30656"
+msgid "Retrieve provider name from the backend when fetching channels. Default is enabled but disabling can speed up fetch times on older devices."
+msgstr ""
+
+#empty strings from id 30657 to 30659
+#. help info - EPG
+#. help-category: epg
+msgctxt "#30660"
+msgid "This category cotains the settings for EPG (Electronic Programme Guide). Excluding logging missing genre text mappings all other options will require clearing the EPG cache to take effect. This can be done by going to 'Settings->PVR & Live TV->Guide->Clear cache' in Kodi after the addon restarts."
+msgstr ""
+
+#. help: EPG - extractshowinfoenabled
+msgctxt "#30661"
+msgid "Check the description fields in the EPG data and attempt to extract season, episode and year info where possible. In addtion can also extract properties like new, live and premiere info."
+msgstr ""
+
+#. help: EPG - extractshowinfofile
+msgctxt "#30662"
+msgid "The config used to extract season, episode and year information. The default file is `English-ShowInfo.xml`."
+msgstr ""
+
+#. help: EPG - genreidmapenabled
+msgctxt "#30663"
+msgid "If the genre IDs sent with EPG data from your set-top box are not using the DVB standard, map from these to the DVB standard IDs. Sky UK for instance uses OpenTV, in that case without this option set the genre colouring and text would be incorrect in Kodi."
+msgstr ""
+
+#. help: EPG - genreidmapfile
+msgctxt "#30664"
+msgid "The config used to map set-top box EPG genre IDs to DVB standard IDs. The default file is `Sky-UK.xml`."
+msgstr ""
+
+#. help: EPG - rytecgenretextmapenabled
+msgctxt "#30665"
+msgid "If you use Rytec XMLTV EPG data this option can be used to map the text genres to DVB standard IDs."
+msgstr ""
+
+#. help: EPG - rytecgenretextmapfile
+msgctxt "#30666"
+msgid "The config used to map Rytec Genre Text to DVB IDs. The default file is `Rytec-UK-Ireland.xml`."
+msgstr ""
+
+#. help: EPG - logmissinggenremapping
+msgctxt "#30667"
+msgid "If you would like missing genre mappings to be logged so you can report them enable this option. Note: any genres found that don't have a mapping will still be extracted and sent to Kodi as strings. Currently genres are extracted by looking for text between square brackets, e.g. [B]TV Drama[/B], or for major, minor genres using a dot (.) to separate [B]TV Drama. Soap Opera[/B]"
+msgstr ""
+
+#. help: EPG - epgdelayperchannel
+msgctxt "#30668"
+msgid "For older Enigma2 devices EPG updates can effect streaming quality (such as buffer timeouts). A delay of between 250ms and 5000ms can be introduced to improve quality. Only recommended for older devices. Choose the lowest value that avoids buffer timeouts."
+msgstr ""
+
+#. help: EPG - skipinitialepg
+msgctxt "#30669"
+msgid "Ignore the intial EPG load (now and next). Enabled by default to prevent crash issues on LibreElec/CoreElec."
+msgstr ""
+
+#empty strings from id 30670 to 30679
+#. help info - Recordings
+#. help-category: recordings
+msgctxt "#30680"
+msgid "This category cotains the settings for recordings"
+msgstr ""
+
+#. help: Recordings - storeextrarecordinginfo
+msgctxt "#30681"
+msgid "Store last played position and count on the backend so they can be shared across kodi instances. Only supported on OpenWebIf version 1.3.6+."
+msgstr ""
+
+#. help: Recordings - sharerecordinglastplayed
+msgctxt "#30682"
+msgid "The options are: [B]Kodi instances[/B] Only use the value in kodi and will not affect last played on the E2 device; [B]Kodi/E2 instances[/B] Use the value across kodi and the E2 device so they stay in sync. Last played will be synced with the E2 device once every 5-10 minutes per recording if the PVR menus are in use. Note that only a single kodi instance is required to have this option enabled."
+msgstr ""
+
+#. help: Timers - recordingpath
+msgctxt "#30683"
+msgid "Per default the addon does not specify the recording folder in newly created timers, so the default set in the set-top box will be used. If you want to specify a different folder (i.e. because you want all recordings scheduled via Kodi to be stored in a separate folder), then you need to set this option."
+msgstr ""
+
+#. help: Recordings - onlycurrent
+msgctxt "#30684"
+msgid "If this option is not set the addon will fetch all available recordings from all configured paths from the set-top box. If this option is set then it will only list recordings that are stored within the 'current recording path' on the set-top box."
+msgstr ""
+
+#. help: Recordings - keepfolders
+msgctxt "#30685"
+msgid "If enabled use the real path from the backend to dictate the folder structure."
+msgstr ""
+
+#. help: Recordings - enablerecordingedls
+msgctxt "#30686"
+msgid "EDLs are used to define commericals etc. in recordings. If a tool like Comskip is used to generate EDL files enabling this will allow Kodi PVR to use them. E.g. if there is a file called 'my recording.ts' the EDL file should be call 'my recording.edl'. Note: enabling this setting has no effect if the files are not present."
+msgstr ""
+
+#. help: Recordings - edlpaddingstart
+msgctxt "#30687"
+msgid "Padding to use at an EDL stop. I.e. use a negative number to start the cut earlier and positive to start the cut later. Default 0."
+msgstr ""
+
+#. help: Recordings - edlpaddingstop
+msgctxt "#30688"
+msgid "Padding to use at an EDL stop. I.e. use a negative number to stop the cut earlier and positive to stop the cut later. Default 0."
+msgstr ""
+
+#. help: Recordings - recordingsrecursive
+msgctxt "#30689"
+msgid "By default only the root of the location will be used to list recordings. When enabled the contents of child folders will be included."
+msgstr ""
+
+#. help: Recordings - keepfoldersomitlocation
+msgctxt "#30690"
+msgid "When using the folder structure from the backend omit the location path from the directory. Useful as it can remove the need to traverse unused folders each time recordings are accessed."
+msgstr ""
+
+#. help: Recordings - virtualfolders
+msgctxt "#30691"
+msgid "Create a virtual structure grouping recordings with the same name into folders. Will be applied to all recordings unless keeping the folder structure on the backend. In that case it will only be applied to the recordings in the root of each recording location."
+msgstr ""
+
+#empty strings from id 30692 to 30699
+#. help info - Timers
+#. help-category: timers
+msgctxt "#30700"
+msgid "This category cotains the settings for timers (regular and auto)"
+msgstr ""
+
+#. help: Timers - enablegenrepeattimers
+msgctxt "#30701"
+msgid "Repeat timers will display as timer rules. Enabling this will make Kodi generate regular timers to match the repeat timer rules so the UI can show what's scheduled and currently recording for each repeat timer."
+msgstr ""
+
+#. help: Timers - numgenrepeattimers
+msgctxt "#30702"
+msgid "The number of Kodi PVR timers to generate."
+msgstr ""
+
+#. help: Timers - timerlistcleanup
+msgctxt "#30703"
+msgid "If this option is set then the addon will send the command to delete completed timers from the set-top box after each update interval."
+msgstr ""
+
+#. help: Timers - enableautotimers
+msgctxt "#30704"
+msgid "When this is enabled there are some settings required on the set-top box to enable linking of AutoTimers (Timer Rules) to Timers in the Kodi UI. The addon attempts to set these automatically on boot."
+msgstr ""
+
+#. help: Timers - limitanychannelautotimers
+msgctxt "#30705"
+msgid "If last scanned groups are excluded attempt to limit new autotimers to either TV or Radio (dependent on channel used to create the autotimer). Note that if last scanned groups are enabled this is not possible and the setting will be ignored."
+msgstr ""
+
+#. help: Timers - limitanychannelautotimerstogroups
+msgctxt "#30706"
+msgid "For the channel used to create the autotimer limit to channel groups that this channel is a member of."
+msgstr ""
+
+#empty strings from id 30707 to 30719
+#. help info - Timeshift
+#. help-category: timeshift
+msgctxt "#30720"
+msgid "This category cotains the settings for timeshift. Timeshifting allows you to pause live TV as well as move back and forward from your current position similar to playing back a recording. The buffer is deleted each time a channel is changed or stopped."
+msgstr ""
+
+#. help: Timeshift - enabletimeshift
+msgctxt "#30721"
+msgid "What timeshift option do you want: [B]Disabled[/B] No timeshifting; [B]On Pause[/B] Timeshifting starts when a live stream is paused. E.g. you want to continue from where you were at after pausing; [B]On Playback[/B] Timeshifting starts when a live stream is opened. E.g. You can go to any point in the stream since it was opened."
+msgstr ""
+
+#. help: Timeshift - timeshiftbufferpath
+msgctxt "#30722"
+msgid "The path used to store the timeshift buffer. The default is the `addon_data/pvr.vuplus` folder in userdata."
+msgstr ""
+
+#. help: Timeshift - timeshiftEnabled
+msgctxt "#30723"
+msgid "Enable the timeshift feature for IPTV streams using inputstream.ffmpegdirect. Note that this feature only works on playback and will ignore the timeshift mode used for regular channel playback."
+msgstr ""
+
+#. help: Timeshift - useFFmpegReconnect
+msgctxt "#30724"
+msgid "Note this can only apply to http/https streams that are processed by libavformat (e.g. M3u8/HLS)."
+msgstr ""
+
+#. help: Timeshift - useMpegtsForUnknownStreams
+msgctxt "#30725"
+msgid "If the type of stream cannot be determined assume it's an MPEG TS stream."
+msgstr ""
+
+#. help: Timeshift - timeshiftFFmpegdirectSettings
+msgctxt "#30726"
+msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
+msgstr ""
+
+#. help: Timeshift - enabletimeshiftdisklimit
+msgctxt "#30727"
+msgid "For devices with limited disk space a limit in Gigabytes can be set whereby timeshift will be switched off and playback will return to the live stream. Note that for timeshift on playback it will not be possible to timeshift again until a stream is restarted once this limit is reached."
+msgstr ""
+
+#. help: Timeshift - timeshiftdisklimit
+msgctxt "#30728"
+msgid "The disk space limit to use for the timeshift buffer in Gigabytes."
+msgstr ""
+
+#empty strings from id 30729 to 30739
+#. help info - Advanced
+#. help-category: advanced
+msgctxt "#30740"
+msgid "This category cotains advanced/expert settings"
+msgstr ""
+
+#. help: Advanced - prependoutline
+msgctxt "#30741"
+msgid "By default plot outline (short description on Enigma2) is not displayed in the UI. Can be displayed in EPG, Recordings or both. After changing this option you will need to clear the EPG cache `Settings->PVR & Live TV->Guide->Clear cache` for it to take effect."
+msgstr ""
+
+#. help: Advanced - powerstatemode
+msgctxt "#30742"
+msgid "If this option is set to a value other than `Disabled` then the addon will send a Powerstate command to the set-top box when Kodi will be closed (or the addon will be deactivated): [B]Disabled[/B] No command sent when the addon exits; [B]Standby[/B] Send the standby command on exit; [B]Deep standby[/B] Send the deep standby command on exit. Note, the set-top box will not respond to Kodi after this command is sent; [B]Wakeup, then standby[/B] Similar to standby but first sends a wakeup command. Can be useful if you want to ensure all streams have stopped. Note: if you use CEC this could cause your TV to wake."
+msgstr ""
+
+#. help: Advanced - readtimeout
+msgctxt "#30743"
+msgid "The timemout to use when trying to read live streams. Default for live streams is 0. Default for for timeshifting is 10 seconds."
+msgstr ""
+
+#. help: Advanced - streamreadchunksize
+msgctxt "#30744"
+msgid "The chunk size used by Kodi for streams. Default at 0 to leave it to Kodi to decide. Can be useful to set manually when viewing streams remotely where buffering can occur as PVR is optimised for a local network."
+msgstr ""
+
+#. help: Advanced - debugnormal
+msgctxt "#30745"
+msgid "Debug log statements will display for the addon even though debug logging may not be enabled in Kodi. Note that all debug log statements will display at NOTICE level."
+msgstr ""
+
+#. help: Advanced - tracedebug
+msgctxt "#30746"
+msgid "Very detailed and verbose log statements will display in addition to standard debug statements. If enabled along with `Enable debug logging in normal mode` both trace and debug will display without debug logging enabled. In this case both debug and trace log statements will display at NOTICE level."
+msgstr ""
+
+#. help: Advanced - ignoredebug
+msgctxt "#30747"
+msgid "Debug log statements will not be displayed for the addon even though debug logging is enabled in Kodi. This can be useful when trying to debug an issue in Kodi which is not addon related."
+msgstr ""
+
+#empty strings from id 30748 to 30759
+#. help info - Backend
+#. help-category: backend
+msgctxt "#30760"
+msgid "This category contains information and settings on/about the Enigma2 STB."
+msgstr ""
+
+#. help: Backend - webifversion
+msgctxt "#30761"
+msgid "webifversion"
+msgstr ""
+
+#. help: Backend - autotimertagintags
+msgctxt "#30762"
+msgid "autotimertagintags"
+msgstr ""
+
+#. help: Backend - autotimernameintags
+msgctxt "#30763"
+msgid "autotimernameintags"
+msgstr ""
+
+#. help: Backend - globalstartpaddingstb
+msgctxt "#30764"
+msgid "This value reflects the backend setting [B]Margin before recording[/B]. It will be applied to the start of all new regular timers created including those created from Autotimers. Note that if a padding/margin is set on an Autotimer it will be custom for that Autotimer and will override this value."
+msgstr ""
+
+#. help: Backend - globalendpaddingstb
+msgctxt "#30765"
+msgid "This value reflects the backend setting [B]Margin after recording[/B]. It will be applied to the end of all new regular timers created including those created from Autotimers. Note that if a padding/margin is set on an Autotimer it will be custom for that Autotimer and will override this value."
+msgstr ""
+
+#. label: Backend - wakeonlanmac
+msgctxt "#30766"
+msgid "The MAC address of the Engima2 STB to be used for WoL (Wake On LAN)."
+msgstr ""
diff --git a/pvr.vuplus/resources/language/resource.language.be_by/strings.po b/pvr.vuplus/resources/language/resource.language.be_by/strings.po
index 1e8235a..dda8848 100644
--- a/pvr.vuplus/resources/language/resource.language.be_by/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.be_by/strings.po
@@ -5,9 +5,9 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: translations@kodi.tv\n"
+"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-09-25 07:30+0000\n"
+"PO-Revision-Date: 2022-03-27 01:17+0000\n"
 "Last-Translator: Christian Gade <gade@kodi.tv>\n"
 "Language-Team: Belarusian <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/be_by/>\n"
 "Language: be_by\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 4.8\n"
+"X-Generator: Weblate 4.11.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -185,7 +185,7 @@ msgstr ""
 #. label-category: epg
 msgctxt "#30032"
 msgid "EPG"
-msgstr ""
+msgstr "Тэлегід"
 
 #. label: EPG - extractshowinfoenabled
 msgctxt "#30033"
@@ -220,7 +220,7 @@ msgstr ""
 #. label-group: Connection - Streaming
 msgctxt "#30039"
 msgid "Streaming"
-msgstr ""
+msgstr "Струменевая перадача"
 
 #. label: Advanced - prependoutline
 msgctxt "#30040"
@@ -326,12 +326,12 @@ msgstr ""
 #. label-group: Timeshift - Timeshift
 msgctxt "#30060"
 msgid "Timeshift"
-msgstr ""
+msgstr "Перамотванне"
 
 #. label: Timeshift - enabletimeshift
 msgctxt "#30061"
 msgid "Enable timeshift"
-msgstr ""
+msgstr "Уключыць перамотванне"
 
 #. label: Timeshift - timeshiftbufferpath
 msgctxt "#30062"
@@ -780,7 +780,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Па магчымасці выкарыстоўваць http-параметры пераключэння FFmpeg"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
@@ -790,7 +790,7 @@ msgstr ""
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Змяніць налады inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
diff --git a/pvr.vuplus/resources/language/resource.language.ca_es/strings.po b/pvr.vuplus/resources/language/resource.language.ca_es/strings.po
index 9b333ef..3689a82 100644
--- a/pvr.vuplus/resources/language/resource.language.ca_es/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.ca_es/strings.po
@@ -7,14 +7,15 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Catalan (Spain) (http://www.transifex.com/projects/p/kodi-main/language/ca_ES/)\n"
-"Language: ca_ES\n"
+"PO-Revision-Date: 2022-08-18 11:14+0000\n"
+"Last-Translator: Xean <xeanhort007@gmail.com>\n"
+"Language-Team: Catalan (Spain) <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/ca_es/>\n"
+"Language: ca_es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.13\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -22,7 +23,7 @@ msgstr "Frontal de Kodi per als descodificadors basats en VU+/Enigma2"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "Frontal de VU+; és compatible amb les transmissions en línia de TV en directe i enregistraments, guia electrònica de programació (EPG) i temporitzadors."
+msgstr "Frontal de VU+; és compatible amb les transmissions en línia de TV en directe i enregistraments, guia electrònica de programació (EPG) i temporitzadors;    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
@@ -224,7 +225,7 @@ msgstr ""
 #. label: Advanced - prependoutline
 msgctxt "#30040"
 msgid "Put outline (e.g. sub-title) before plot"
-msgstr ""
+msgstr "Posa l'esquema argumental (p. ex. subtítols) abans del resum de la trama"
 
 #. label: Advanced - streamreadchunksize
 msgctxt "#30041"
@@ -1358,7 +1359,7 @@ msgstr ""
 #. help: Advanced - prependoutline
 msgctxt "#30741"
 msgid "By default plot outline (short description on Enigma2) is not displayed in the UI. Can be displayed in EPG, Recordings or both. After changing this option you will need to clear the EPG cache `Settings->PVR & Live TV->Guide->Clear cache` for it to take effect."
-msgstr ""
+msgstr "Per defecte, l'esquema argumental (descripció breu a Enigma2) no es mostra a la interfície d'usuari. Es pot mostrar a l'EPG, Enregistraments o ambdues. Després de canviar aquesta opció, esborra la memòria cau de l'EPG `Configuració->PVR i TV en directe->Guia->Esborra la memòria cau` perquè tingui efecte."
 
 #. help: Advanced - powerstatemode
 msgctxt "#30742"
diff --git a/pvr.vuplus/resources/language/resource.language.cs_cz/strings.po b/pvr.vuplus/resources/language/resource.language.cs_cz/strings.po
index 9645da5..0c4fba2 100644
--- a/pvr.vuplus/resources/language/resource.language.cs_cz/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.cs_cz/strings.po
@@ -7,15 +7,15 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-06-28 08:29+0000\n"
-"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"PO-Revision-Date: 2022-03-29 12:37+0000\n"
+"Last-Translator: Kryštof Černý <cleverline1mc@gmail.com>\n"
 "Language-Team: Czech <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/cs_cz/>\n"
 "Language: cs_cz\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7\n"
+"X-Generator: Weblate 4.11.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -23,7 +23,7 @@ msgstr "Rozhraní Kodi pro přijímače založené na Enigma2"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "Rozhraní Enigma2 – podporuje streamování živého vysílání a nahrávání, televizní program, časovače, automatické časovače.[CR][CR]Pro dokumentaci navštivte: https://github.com/kodi-pvr/pvr.vuplus/blob/master/README.md"
+msgstr "Rozhraní Enigma2 – podporuje streamování živého vysílání a nahrávání, televizní program, časovače, automatické časovače.[CR][CR]Pro dokumentaci navštivte: https://github.com/kodi-pvr/pvr.vuplus/blob/master/README.md    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
@@ -441,7 +441,7 @@ msgstr "neznámé"
 #. application: Client
 msgctxt "#30082"
 msgid " (Not connected!)"
-msgstr "(Nepřipojeno!)"
+msgstr " (Nepřipojeno!)"
 
 #. application: Client
 msgctxt "#30083"
@@ -778,7 +778,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Pokud je to možné, použijte možnosti FFmpeg http reconnect"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
@@ -788,7 +788,7 @@ msgstr ""
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Úprava nastavení inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
@@ -1331,7 +1331,7 @@ msgstr ""
 #. help: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30726"
 msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
-msgstr ""
+msgstr "Otevření dialogu nastavení pro inputstream.ffmpegdirect pro úpravu timeshift a dalších nastavení."
 
 #. help: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30727"
diff --git a/pvr.vuplus/resources/language/resource.language.da_dk/strings.po b/pvr.vuplus/resources/language/resource.language.da_dk/strings.po
index e274489..ffcf62f 100644
--- a/pvr.vuplus/resources/language/resource.language.da_dk/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.da_dk/strings.po
@@ -7,7 +7,7 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-12-25 01:13+0000\n"
+"PO-Revision-Date: 2022-11-15 10:15+0000\n"
 "Last-Translator: Christian Gade <gade@kodi.tv>\n"
 "Language-Team: Danish <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/da_dk/>\n"
 "Language: da_dk\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.14.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -23,7 +23,7 @@ msgstr "Kodis frontend til VU+/Enigma2 baseret på settopbokse"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "Enigma2 frontend - understøttende streaming af direkte tv & optagelser, EPG, timeroptagelser, automatiske timeroptagelser.[CR]   [CR]Se dokumentationen: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
+msgstr "Enigma2 frontend understøtter streaming af direkte tv og optagelser, EPG, timeroptagelser og automatiske timeroptagelser.[CR][CR]Se dokumentationen: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
@@ -86,7 +86,7 @@ msgstr "Automatisk oprydning af timerliste"
 #. label: Connection - webport
 msgctxt "#30012"
 msgid "Web interface port"
-msgstr "Port for web-grænseflade"
+msgstr "Port for web-brugerflade"
 
 #. label: Channels - zap
 msgctxt "#30013"
@@ -330,7 +330,7 @@ msgstr "Tidsforskydning"
 #. label: Timeshift - enabletimeshift
 msgctxt "#30061"
 msgid "Enable timeshift"
-msgstr ""
+msgstr "Aktiver tidsforskydning"
 
 #. label: Timeshift - timeshiftbufferpath
 msgctxt "#30062"
@@ -345,7 +345,7 @@ msgstr "Fra"
 #. label-option: Timeshift - enabletimeshift
 msgctxt "#30064"
 msgid "On playback"
-msgstr ""
+msgstr "Ved afspilning"
 
 #. label-option: Timeshift - enabletimeshift
 msgctxt "#30065"
@@ -779,7 +779,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Brug FFmpeg http gentilslutningsmuligheder, hvis det er muligt"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
@@ -789,7 +789,7 @@ msgstr ""
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Rediger indstillinger for inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
diff --git a/pvr.vuplus/resources/language/resource.language.de_de/strings.po b/pvr.vuplus/resources/language/resource.language.de_de/strings.po
index 06374b2..3e95cc5 100644
--- a/pvr.vuplus/resources/language/resource.language.de_de/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.de_de/strings.po
@@ -7,23 +7,23 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-10-03 08:41+0000\n"
-"Last-Translator: matchuek <hansi77@yandex.com>\n"
+"PO-Revision-Date: 2022-12-07 10:15+0000\n"
+"Last-Translator: Kai Sommerfeld <kai.sommerfeld@gmx.com>\n"
 "Language-Team: German <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/de_de/>\n"
 "Language: de_de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8\n"
+"X-Generator: Weblate 4.14.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
-msgstr "Kodi Oberfläche für VU+ / Enigma2-basierte Settop-Boxen"
+msgstr "Kodi-Oberfläche für VU+ / Enigma2-basierte Settop-Boxen"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "VU+ -Oberfläche; Unterstützt Live TV & Aufnahmen, EPG und Timer.    "
+msgstr "VU+/Enigma2-Oberfläche. Unterstützt TV, Aufnahmen, EPG und Timer.    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
@@ -35,13 +35,13 @@ msgstr "Dies ist instabile Software! Die Autoren sind in keiner Weise verantwort
 #. label: Connection - host
 msgctxt "#30000"
 msgid "Enigma2 hostname or IP address"
-msgstr ""
+msgstr "Enigma2-Hostname oder IP-Adresse"
 
 # empty string with id 30001
 #. label: Connection - streamport
 msgctxt "#30002"
 msgid "Streaming port"
-msgstr ""
+msgstr "Streaming-Port"
 
 #. label: Connection - user
 msgctxt "#30003"
@@ -66,12 +66,12 @@ msgstr "Symbole"
 #. label-group: General - Program Streams
 msgctxt "#30007"
 msgid "Program Streams"
-msgstr ""
+msgstr "Programm-Streams"
 
 #. label: General - iconpath
 msgctxt "#30008"
 msgid "Icon path"
-msgstr ""
+msgstr "Pfad für Symbole"
 
 #. label-group: General - Update Interval
 msgctxt "#30009"
@@ -82,22 +82,22 @@ msgstr "Aktualisierungsintervall"
 #. label: Timers - timerlistcleanup
 msgctxt "#30011"
 msgid "Automatic timerlist cleanup"
-msgstr ""
+msgstr "Automatische Bereinigung der Timer-Liste"
 
 #. label: Connection - webport
 msgctxt "#30012"
 msgid "Web interface port"
-msgstr ""
+msgstr "Weboberflächen-Port"
 
 #. label: Channels - zap
 msgctxt "#30013"
 msgid "Zap before channelswitch (i.e. for single tuner boxes)"
-msgstr ""
+msgstr "Umschalten vor Kanalwechsel (z. B. für Geräte mit nur einem Tuner)"
 
 #. label: Channels - setprogramid
 msgctxt "#30014"
 msgid "Set program id for live channel or recorded streams"
-msgstr ""
+msgstr "Programm-ID für Live-Kanäle oder Aufnahmen festlegen"
 
 #. label: General - updateint
 msgctxt "#30015"
@@ -107,12 +107,12 @@ msgstr "Aktualisierungsintervall"
 #. label: Channels - usegroupspecificnumbers
 msgctxt "#30016"
 msgid "Use bouquet specific channel numbers from backend"
-msgstr ""
+msgstr "Bouquetspezifische Kanalnummern des Backends verwenden"
 
 #. label: Recordings - onlycurrent
 msgctxt "#30017"
 msgid "Only use current recording path from backend"
-msgstr ""
+msgstr "Nur den aktuellen Aufnahmepfad vom Backend vwerwenden"
 
 #. label-category: general
 #. label-group: Channels
@@ -123,7 +123,7 @@ msgstr "Allgemein"
 #. label-category: channels
 msgctxt "#30019"
 msgid "Channels"
-msgstr "Sender"
+msgstr "Kanäle"
 
 #. label-category: advanced
 #. label-group: Connection - Advanced
@@ -135,27 +135,27 @@ msgstr "Erweitert"
 #. label: Recordings - recordingsrecursive
 msgctxt "#30022"
 msgid "Use recursive listing for recording locations"
-msgstr ""
+msgstr "Aufnahmeorte rekursiv auflisten"
 
 #. label: Timers - recordingpath
 msgctxt "#30023"
 msgid "New timer default recording folder"
-msgstr ""
+msgstr "Standardaufnahmeordner für neue Timer"
 
 #. label: Advanced - powerstatemode
 msgctxt "#30024"
 msgid "Send powerstate mode on addon exit"
-msgstr ""
+msgstr "Beim Beenden des Addons Powerstatusmodus senden"
 
 #. label: Channels - tvgroupmode
 msgctxt "#30025"
 msgid "TV bouquet fetch mode"
-msgstr ""
+msgstr "Modus für Abruf von TV-Bouqets"
 
 #. label: Channels - onetvgroup
 msgctxt "#30026"
 msgid "TV bouquet 1"
-msgstr ""
+msgstr "TV-Bouquet 1"
 
 #. label: General - onlinepicons
 msgctxt "#30027"
@@ -170,7 +170,7 @@ msgstr ""
 #. label: Connection - autoconfig
 msgctxt "#30029"
 msgid "Enable automatic configuration for live streams"
-msgstr "Aktiviere die Autokonfiguration für Liveübertragungen"
+msgstr "Autokonfiguration für Livestreams aktivieren"
 
 #. label: Recordings - keepfolders
 msgctxt "#30030"
@@ -185,7 +185,7 @@ msgstr ""
 #. label-category: epg
 msgctxt "#30032"
 msgid "EPG"
-msgstr "EPG"
+msgstr "Programmübersicht"
 
 #. label: EPG - extractshowinfoenabled
 msgctxt "#30033"
@@ -200,7 +200,7 @@ msgstr ""
 #. label: General - usepiconseuformat
 msgctxt "#30035"
 msgid "Use picons.eu file format"
-msgstr "Picons.eu Dateiformat verwenden"
+msgstr "Dateiformat picons.eu verwenden"
 
 #. label: Timers - enablegenrepeattimers
 msgctxt "#30036"
@@ -240,7 +240,7 @@ msgstr "Nie"
 #. label - Advanced - prependoutline
 msgctxt "#30043"
 msgid "In EPG only"
-msgstr "Nur im EPG"
+msgstr "Nur in der Programmübersicht"
 
 #. label - Advanced - prependoutline
 msgctxt "#30044"
@@ -285,7 +285,7 @@ msgstr "Anmeldung"
 #. label-group: Advanced - Misc
 msgctxt "#30052"
 msgid "Misc"
-msgstr "verschiedenes"
+msgstr "Verschiedenes"
 
 #. label-group: EPG - Genre ID Mappings
 msgctxt "#30053"
@@ -331,12 +331,12 @@ msgstr "Timeshift"
 #. label: Timeshift - enabletimeshift
 msgctxt "#30061"
 msgid "Enable timeshift"
-msgstr ""
+msgstr "Timeshift aktivieren"
 
 #. label: Timeshift - timeshiftbufferpath
 msgctxt "#30062"
 msgid "Timeshift buffer path"
-msgstr "Timeshift Puffer-Pfad"
+msgstr "Pfad für Timeshift-Puffer"
 
 #. label-option: Timeshift - enabletimeshift
 msgctxt "#30063"
@@ -346,7 +346,7 @@ msgstr "Inaktiv"
 #. label-option: Timeshift - enabletimeshift
 msgctxt "#30064"
 msgid "On playback"
-msgstr "Beim Abspielen"
+msgstr "Bei der Wiedergabe"
 
 #. label-option: Timeshift - enabletimeshift
 msgctxt "#30065"
@@ -619,7 +619,7 @@ msgstr ""
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30117"
 msgid "Disabled"
-msgstr "Ausschalten"
+msgstr "Deaktiviert"
 
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30118"
@@ -780,7 +780,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "HTTP-Reconnect-Einstellungen von FFmpeg nutzen, wenn möglich"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
@@ -790,7 +790,7 @@ msgstr ""
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Einstellungen von inputstream.ffmpegdirect anpassen ..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
@@ -872,22 +872,22 @@ msgstr ""
 #. application: Timers
 msgctxt "#30430"
 msgid "Disabled"
-msgstr "Ausschalten"
+msgstr "Deaktiviert"
 
 #. application: Timers
 msgctxt "#30431"
 msgid "Record if EPG title differs"
-msgstr "Aufnahme bei abweichenden EPG-Titel"
+msgstr "Aufnahme bei abweichendem EPG-Titel"
 
 #. application: Timers
 msgctxt "#30432"
 msgid "Record if EPG title and short description differs"
-msgstr "Aufnahme, wenn EPG-Titel und Kurzbeschreibung voneinander abweichen."
+msgstr "Aufnahme, wenn EPG-Titel und Kurzbeschreibung voneinander abweichen"
 
 #. application: Timers
 msgctxt "#30433"
 msgid "Record if EPG title and all descriptions differ"
-msgstr "Aufnahme, wenn EPG-Titel und alle Beschreibung voneinander abweichen."
+msgstr "Aufnahme, wenn EPG-Titel und alle Beschreibung voneinander abweichen"
 
 #. ################
 #. notifications #
@@ -895,7 +895,7 @@ msgstr "Aufnahme, wenn EPG-Titel und alle Beschreibung voneinander abweichen."
 #. notification: Client
 msgctxt "#30514"
 msgid "Timeshift buffer path does not exist"
-msgstr "Pfad für den Zeitversatz Puffer existiert nicht"
+msgstr "Pfad für den Timeshift-Puffer existiert nicht"
 
 #. notification: Enigma2
 msgctxt "#30515"
@@ -1336,7 +1336,7 @@ msgstr ""
 #. help: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30726"
 msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
-msgstr ""
+msgstr "Einstellungsdialog von inputstream.ffmpegdirect öffnen, zum Modifizieren von Timeshift und anderen Einstellungen."
 
 #. help: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30727"
diff --git a/pvr.vuplus/resources/language/resource.language.en_gb/strings.po b/pvr.vuplus/resources/language/resource.language.en_gb/strings.po
index be3732d..2bb630f 100644
--- a/pvr.vuplus/resources/language/resource.language.en_gb/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.en_gb/strings.po
@@ -612,7 +612,10 @@ msgctxt "#30114"
 msgid "Exclude last scanned bouquet"
 msgstr ""
 
-#empty string with id 30115
+#. label-group: Advanced - Misc
+msgctxt "#30115"
+msgid "Debug"
+msgstr ""
 
 #. label: General - channelandgroupupdatemode
 msgctxt "#30116"
diff --git a/pvr.vuplus/resources/language/resource.language.es_es/strings.po b/pvr.vuplus/resources/language/resource.language.es_es/strings.po
index 5ffc23b..b9a8a4d 100644
--- a/pvr.vuplus/resources/language/resource.language.es_es/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.es_es/strings.po
@@ -5,28 +5,29 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Spanish (Spain) (http://www.transifex.com/projects/p/kodi-main/language/es_ES/)\n"
-"Language: es_ES\n"
+"PO-Revision-Date: 2023-02-11 10:41+0000\n"
+"Last-Translator: José Antonio Alvarado <jalvarado0.eses@gmail.com>\n"
+"Language-Team: Spanish (Spain) <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/es_es/>\n"
+"Language: es_es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.15.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
-msgstr "Frontend Kodi para decodificadores basados en VU+/Enigma2"
+msgstr "Interfaz de Kodi para decodificadores basados en Enigma2"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "Frontend VU+; soporta TV en vivo, grabaciones, guía de programación (EPG) y temporizadores."
+msgstr "Interfaz Enigma2 - soporta transmisión de TV en directo y grabaciones, EPG, temporizadores, temporizadores automáticos.[CR] [CR]Para documentación visite: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
-msgstr "¡Este es un software inestable! Los autores no son de ninguna manera responsables de las grabaciones fallidas o incorrectas, las temporizadores perdidas, ni otros efectos no deseables.."
+msgstr "¡Este software es inestable! Los autores no se hacen responsables de grabaciones fallidas, temporizadores incorrectos, horas perdidas o cualquier otro efecto no deseado..."
 
 #. ##################
 #. settings labels #
@@ -39,7 +40,7 @@ msgstr "Dirección IP o nombre de equipo Enigma2"
 #. label: Connection - streamport
 msgctxt "#30002"
 msgid "Streaming port"
-msgstr "Puerto de emisión"
+msgstr "Puerto de transmisión"
 
 #. label: Connection - user
 msgctxt "#30003"
@@ -64,7 +65,7 @@ msgstr "Iconos"
 #. label-group: General - Program Streams
 msgctxt "#30007"
 msgid "Program Streams"
-msgstr "Emisiones de Programa"
+msgstr "Transmisiónes de programa"
 
 #. label: General - iconpath
 msgctxt "#30008"
@@ -94,7 +95,7 @@ msgstr "Zap antes de cambio de canal (p.e. para sintonizadores únicos)"
 #. label: Channels - setprogramid
 msgctxt "#30014"
 msgid "Set program id for live channel or recorded streams"
-msgstr "Ajusta el id de programa para un canal en directo o para emisiones grabadas."
+msgstr "Establecer el identificador de programa para el canal en directo o las transmisiones grabadas"
 
 #. label: General - updateint
 msgctxt "#30015"
@@ -109,7 +110,7 @@ msgstr "Usar números de canales específicos del paquete según servidor"
 #. label: Recordings - onlycurrent
 msgctxt "#30017"
 msgid "Only use current recording path from backend"
-msgstr ""
+msgstr "Usar solo la ruta actual de grabaciones del servidor"
 
 #. label-category: general
 #. label-group: Channels
@@ -132,17 +133,17 @@ msgstr "Avanzado"
 #. label: Recordings - recordingsrecursive
 msgctxt "#30022"
 msgid "Use recursive listing for recording locations"
-msgstr ""
+msgstr "Usar listado recursivo para las ubicaciones de las grabaciones"
 
 #. label: Timers - recordingpath
 msgctxt "#30023"
 msgid "New timer default recording folder"
-msgstr ""
+msgstr "Carpeta por defecto para grabaciones de la nueva programación"
 
 #. label: Advanced - powerstatemode
 msgctxt "#30024"
 msgid "Send powerstate mode on addon exit"
-msgstr "Enviar apagar al salir del add-on"
+msgstr "Enviar modo del estado de energía al salir del complemento"
 
 #. label: Channels - tvgroupmode
 msgctxt "#30025"
@@ -167,12 +168,12 @@ msgstr "Usar HTTP Seguro (https)"
 #. label: Connection - autoconfig
 msgctxt "#30029"
 msgid "Enable automatic configuration for live streams"
-msgstr "Actviar configuración automática para emisiones en directo"
+msgstr "Activar la configuración automática de las transmisiones en directo"
 
 #. label: Recordings - keepfolders
 msgctxt "#30030"
 msgid "Keep folder structure for recordings"
-msgstr ""
+msgstr "Mantener estructura de carpetas para las grabaciones"
 
 #. label-group: EPG - Seasons and Episodes
 msgctxt "#30031"
@@ -192,7 +193,7 @@ msgstr "Extraer información de temporada, episodio y año cuando sea posible"
 #. label: Timers - enableautotimers
 msgctxt "#30034"
 msgid "Enable autotimers"
-msgstr "Activar programaciones automáticas"
+msgstr "Activar temporizadores automáticos"
 
 #. label: General - usepiconseuformat
 msgctxt "#30035"
@@ -202,7 +203,7 @@ msgstr "Usar formato de archivo picons.eu"
 #. label: Timers - enablegenrepeattimers
 msgctxt "#30036"
 msgid "Enable generate repeat timers"
-msgstr "Activar generación de programaciones repetidas"
+msgstr "Activar la generación de temporizadores repetidos"
 
 #. label: EPG - logmissinggenremapping
 msgctxt "#30037"
@@ -217,17 +218,17 @@ msgstr "Interfaz Web"
 #. label-group: Connection - Streaming
 msgctxt "#30039"
 msgid "Streaming"
-msgstr "Streaming"
+msgstr "Transmisión"
 
 #. label: Advanced - prependoutline
 msgctxt "#30040"
 msgid "Put outline (e.g. sub-title) before plot"
-msgstr "Poner frase (p.e. subtítulo) antes del argumento"
+msgstr "Poner frase (p. ej. subtítulo) antes del argumento"
 
 #. label: Advanced - streamreadchunksize
 msgctxt "#30041"
 msgid "Stream read chunk size"
-msgstr "Tamaño de fragmento de lectura de emisión"
+msgstr "Tamaño del bloque de lectura de la transmisión"
 
 #. label - Advanced - prependoutline
 msgctxt "#30042"
@@ -333,7 +334,7 @@ msgstr "Activar timeshift"
 #. label: Timeshift - timeshiftbufferpath
 msgctxt "#30062"
 msgid "Timeshift buffer path"
-msgstr "Ruta del buffer de Timeshift"
+msgstr "Ruta del Buffer de Timeshift"
 
 #. label-option: Timeshift - enabletimeshift
 msgctxt "#30063"
@@ -353,12 +354,12 @@ msgstr "Pausado"
 #. label: Connection - use_secure_stream
 msgctxt "#30066"
 msgid "Use secure HTTP (https) for streams"
-msgstr "Usar HTTP seguro (https) para las emisiones"
+msgstr "Utilizar HTTP seguro (https) para las transmisiones"
 
 #. label: Connection - use_login_stream
 msgctxt "#30067"
 msgid "Use login for streams"
-msgstr "Usar usuario para las emisiones"
+msgstr "Utilizar inicio de sesión para transmisiones"
 
 #. label: Channels - tvfavouritesmode
 msgctxt "#30068"
@@ -384,12 +385,12 @@ msgstr "Grabaciones"
 #. label-group: Timers - timers
 msgctxt "#30072"
 msgid "Timers"
-msgstr "Programaciones"
+msgstr "Temporizadores"
 
 #. label: Timers - numgenrepeattimers
 msgctxt "#30073"
 msgid "Number of repeat timers to generate"
-msgstr "Número de repeticiones de programación a generar"
+msgstr "Número de temporizadores repetidos a generar"
 
 #. label-option: Channels - tvgroupmode
 #. label-option: Channels - radiogroupmode
@@ -440,22 +441,22 @@ msgstr "desconocido"
 #. application: Client
 msgctxt "#30082"
 msgid " (Not connected!)"
-msgstr "(¡No conectado!)"
+msgstr " (¡No conectado!)"
 
 #. application: Client
 msgctxt "#30083"
 msgid "addon error"
-msgstr "error de add-on"
+msgstr "error de complemento"
 
 #. label: Recordings - keepfoldersomitlocation
 msgctxt "#30084"
 msgid "Omit location path from recording directory"
-msgstr ""
+msgstr "Omitir la ruta del directorio de grabación"
 
 #. label: Recordings - virtualfolders
 msgctxt "#30085"
 msgid "Group recordings into folders by title"
-msgstr ""
+msgstr "Agrupa las grabaciones en carpetas por título"
 
 #. label-category: backend
 msgctxt "#30086"
@@ -535,12 +536,12 @@ msgstr "Modo de actualización"
 #. label-option: General - updatemode
 msgctxt "#30101"
 msgid "Timers and recordings"
-msgstr "Programas y grabaciones"
+msgstr "Temporizadores y grabaciones"
 
 #. label-option: General - updatemode
 msgctxt "#30102"
 msgid "Timers only"
-msgstr "Solo programas"
+msgstr "Sólo temporizadores"
 
 #. label: General - useopenwebifpiconpath
 msgctxt "#30103"
@@ -646,12 +647,12 @@ msgstr "Intervalo entre pruebas de conexión"
 #. label: Timers - Autotimers
 msgctxt "#30123"
 msgid "Autotimers"
-msgstr "Autograbaciones"
+msgstr "Temporizadores automáticos"
 
 #. label: Timers - limitanychannelautotimers
 msgctxt "#30124"
 msgid "Limit 'Any Channel' autotimers to TV or Radio"
-msgstr "Limitar autograbaciones de 'Cualquier Canal' a TV o Radio"
+msgstr "Limitar los temporizadores automáticos de 'Cualquier canal' a TV o Radio"
 
 #. label: Timers - limitanychannelautotimerstogroups
 msgctxt "#30125"
@@ -752,72 +753,72 @@ msgstr "Paquete Radio 5"
 #. label: Advanced - ignoredebug
 msgctxt "#30144"
 msgid "No addon debug logging in Kodi debug mode"
-msgstr "No hay registro de trazas de add-on en el modo depuración de Kodi"
+msgstr "No hay registro de depuración del complemento en el modo de depuración de Kodi"
 
 #. label-group: Backend - Power Settings
 msgctxt "#30145"
 msgid "Power Settings"
-msgstr ""
+msgstr "Ajustes de energía"
 
 #. label: Backend - wakeonlanmac
 msgctxt "#30146"
 msgid "Wake On LAN MAC"
-msgstr ""
+msgstr "Wake On LAN MAC"
 
 #. label: Timeshift - IPTV
 msgctxt "#30147"
 msgid "IPTV"
-msgstr ""
+msgstr "IPTV"
 
 #. label: Timeshift - timeshiftEnabled
 msgctxt "#30148"
 msgid "Enable timeshift for IPTV streams"
-msgstr ""
+msgstr "Activar timeshift para las transmisiones IPTV"
 
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Usar opciones de reconexión http de FFmpeg si es posible"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
 msgid "Use mpegts MIME type for unknown streams"
-msgstr ""
+msgstr "Utilizar el tipo MIME mpegts para las transmisiones desconocidas"
 
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Modificar configuración de inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
 msgid "Retrieve provider name for channels"
-msgstr ""
+msgstr "Recuperar el nombre del proveedor de los canales"
 
 #. label: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30153"
 msgid "Enable timeshift disk limit"
-msgstr ""
+msgstr "Activar límite de disco timeshift"
 
 #. label: Timeshift - timeshiftdisklimit
 msgctxt "#30154"
 msgid "Timeshift disk limit"
-msgstr ""
+msgstr "Límite del disco Timeshift"
 
 #. format-label: Timeshift - timeshiftdisklimit
 msgctxt "#30155"
 msgid "{0:.1f} GiB"
-msgstr ""
+msgstr "{0:.1f} GiB"
 
 #. label-group: Recordings - Recording Paths
 msgctxt "#30157"
 msgid "Recording Paths"
-msgstr ""
+msgstr "Rutas de las grabaciones"
 
 #. label-group: Recordings - Recording Locations
 msgctxt "#30158"
 msgid "Recording Locations"
-msgstr ""
+msgstr "Lugares de grabación"
 
 #. ##############
 #. application #
@@ -891,7 +892,7 @@ msgstr "Grabar aunque el título y cualquier descripción en EPG difiera"
 #. notification: Client
 msgctxt "#30514"
 msgid "Timeshift buffer path does not exist"
-msgstr "La ruta para el buffer de timeshift no existe"
+msgstr "La Ruta del Buffer Timeshift No Existe"
 
 #. notification: Enigma2
 msgctxt "#30515"
@@ -946,7 +947,7 @@ msgstr "Esta categoría contiene los ajustes para conectar a un dispositivo Enig
 #. help: Connection - host
 msgctxt "#30601"
 msgid "The IP address or hostname of your enigma2 based set-top box."
-msgstr "La dirección IP o nombre de host del set-top box basado en Enigma2."
+msgstr "La dirección IP o el nombre de host de tu decodificador basado en enigma2."
 
 #. help: Connection - webport
 msgctxt "#30602"
@@ -961,32 +962,32 @@ msgstr "Usar HTTPS para conectar a la interfaz web."
 #. help: Connection - user
 msgctxt "#30604"
 msgid "If the webinterface of the set-top box is protected with a username/password combination this needs to be set in this option."
-msgstr "Si la interfaz web del set-top box esta protegida con usuario/contraseña necesita informarse en esta opción"
+msgstr "Si la interfaz web del decodificador está protegida con una combinación de nombre de usuario y contraseña, es necesario establecerlo en esta opción."
 
 #. help: Connection - pass
 msgctxt "#30605"
 msgid "If the webinterface of the set-top box is protected with a username/password combination this needs to be set in this option."
-msgstr "Si la interfaz web del set-top box esta protegida con usuario/contraseña necesita informarse en esta opción"
+msgstr "Si la interfaz web del decodificador está protegida con una combinación de nombre de usuario y contraseña, es necesario establecerlo en esta opción."
 
 #. help: Connection - autoconfig
 msgctxt "#30606"
 msgid "When enabled the stream URL will be read from an M3U8 file. When disabled it is constructed based on the service reference of the channel. This option is rarely required and should not be enbaled unless you have a special use case. If viewing an IPTV Stream this option has no effect on those channels."
-msgstr "Si se activa, la URL de la emisión se leerá de un archivo M3U8. Si se desactiva, se construirá en referencia al servicio del canal. Esta opción rara vez es requerida y no se debe activar a no ser que sea un caso especial. Esta opción no tiene efecto en los canales que emitan IPTV ."
+msgstr "Cuando está activada, la URL de la transmisión se leerá de un archivo M3U8. Cuando está deshabilitada se construye basándose en la referencia de servicio del canal. Esta opción es raramente necesaria y no debería ser activada a menos que tenga un caso de uso especial. Si está viendo un flujo IPTV esta opción no tiene efecto en esos canales."
 
 #. help: Connection - streamport
 msgctxt "#30607"
 msgid "This option defines the streaming port the set-top box uses to stream live tv. The default is 8001 which should be fine if the user did not define a custom port within the webinterface."
-msgstr "Esta opcion define el puerto de emisión que usa el set-top box para ver TV en directo. Por defecto es 8001 y suele ser correcto si el usuario no ha definido otro dentro de la interfaz web."
+msgstr "Esta opción define el puerto de transmisión que el decodificador utiliza para transmitir televisión en directo. El puerto predeterminado es 8001, que debería ser correcto si el usuario no ha definido un puerto personalizado en la interfaz web."
 
 #. help: Connection - use_secure_stream
 msgctxt "#30608"
 msgid "Use https to connect to streams."
-msgstr "Usar HTTPS para conectar a las emisiones."
+msgstr "Utilizar https para conectarse a las transmisiones."
 
 #. help: Connection - use_login_stream
 msgctxt "#30609"
 msgid "Use the login username and password for streams."
-msgstr "Usar el usuario y contraseña de acceso para las emisiones."
+msgstr "Utilizar el nombre de usuario y la contraseña de acceso para las transmisiones."
 
 #. help: Connection - connectionchecktimeout
 msgctxt "#30610"
@@ -1007,7 +1008,7 @@ msgstr "Esta categoría contiene los ajustes generales que suelen establecer el
 #. help: General - onlinepicons
 msgctxt "#30621"
 msgid "Fetch the picons straight from the Enigma 2 set-top box."
-msgstr "Obtener los picons directamente del set-top box Enigma2."
+msgstr "Obtener los picons directamente del decodificador Enigma 2."
 
 #. help: General - useopenwebifpiconpath
 msgctxt "#30622"
@@ -1017,27 +1018,27 @@ msgstr "Obtener el picon de OpenWebIf en lugar de construirlo con ServiceRef. Re
 #. help: General - usepiconseuformat
 msgctxt "#30623"
 msgid "Assume all picons files fetched from the set-top box start with '1_1_1_' and end with '_0_0_0'."
-msgstr "Asumir que todos los picons que se han obtenido del set-top box empiezan con '1_1_1_' y terminan con '0_0_0'."
+msgstr "Asume que todos los archivos picons obtenidos del decodificador empiezan por '1_1_1_' y terminan por '_0_0_0'."
 
 #. help: General - iconpath
 msgctxt "#30624"
 msgid "In order to have Kodi display channel logos you have to copy the picons from your set-top box onto your OpenELEC machine. You then need to specify this path in this property."
-msgstr "Para que Kodi muestre los logos de los canales, debes copiar los picons del set-top box en tu maquina Kodi. Luego debes especificar la ruta en esta propiedad."
+msgstr "Para que Kodi muestre los logos de los canales tienes que copiar los picons de tu decodificador a tu máquina OpenELEC. A continuación, debe especificar esa ruta en esta propiedad."
 
 #. help: General - updateint
 msgctxt "#30625"
 msgid "As the set-top box can also be used to modify timers, delete recordings etc. and the set-top box does not notify the Kodi installation, the addon needs to regularly check for updates (new channels, new/changed/deletes timers, deleted recordings, etc.) This property defines how often the addon checks for updates. Please note that updating the recordings frequently can keep your receiver and it's harddisk from entering standby automatically."
-msgstr "Como el set-top box también puede modificar grabaciones, borrarlas, etc y no notifica a Kodi, este add-on tiene que comprobar regularmente si hay cambios (nuevos canales, grabaciones, etc) Esta propiedad define cada cuanto comprueba los cambios. Es importante saber que actualizar esto frecuentemente puede evitar que el disco duro del receptor entre en reposo automáticamente."
+msgstr "Como el decodificador también puede ser usado para modificar temporizadores, borrar grabaciones, etc. y el decodificador no notifica a la aplicación Kodi, el complemento necesita comprobar regularmente las actualizaciones (nuevos canales, temporizadores nuevos/modificados/borrados, grabaciones borradas, etc.) Esta propiedad define la frecuencia con la que el complemento comprueba las actualizaciones. Tenga en cuenta que actualizar las grabaciones con frecuencia puede hacer que su receptor y su disco duro no entren automáticamente en modo de espera."
 
 #. help: General - updatemode
 msgctxt "#30626"
 msgid "The mode used when the update interval is reached. Note that if there is any timer change detected a recordings update will always occur regardless of the update mode. Choose from one of the following two modes: [B]Timers and Recordings[/B] Update all timers and recordings; [B]Timers only[/B] Only update the timers. If it's important to not spin up the HDD on your STB use this option. The HDD should then only spin up when a timer event occurs."
-msgstr ""
+msgstr "El modo utilizado cuando se alcanza el intervalo de actualización. Tenga en cuenta que si se detecta algún cambio en el temporizador, siempre se producirá una actualización de los registros, independientemente del modo de actualización. Elija uno de los dos modos siguientes: [B]Temporizadores y grabaciones[/B] Actualizar todos los temporizadores y grabaciones; [B]Sólo temporizadores[/B] Sólo actualizar los temporizadores. Si es importante que el disco duro de su STB no gire, utilice esta opción. El disco duro sólo girará cuando se produzca un evento de temporizador."
 
 #. help: General - channelandgroupupdatemode
 msgctxt "#30627"
 msgid "The mode used when the hour in the next settings is reached. Choose from one of the following three modes: [B]Disabled[/B] Never check for channel and group changes; [B]Notify on UI and Log[/B] Display a notice in the UI and log the fact that a change was detectetd[/B]; [B]Reload Channels and Groups[/B] Disconnect and reconnect with E2 device to reload channels only if a change is detected."
-msgstr ""
+msgstr "Modo utilizado cuando se alcanza la hora en la siguiente configuración. Elija uno de los tres modos siguientes: [B]Desactivado[/B] No comprobar nunca los cambios de canales y grupos; [B]Notificar en la UI y el log[/B] Mostrar un aviso en la interfaz de usuario y registrar el hecho de que se ha detectado un cambio[/B]; [B]Recargar Canales y Grupos[/B] Desconectar y volver a conectar con el dispositivo E2 para recargar los canales sólo si se detecta un cambio."
 
 #. help: General - channelandgroupupdatehour
 msgctxt "#30628"
@@ -1047,28 +1048,28 @@ msgstr "La hora del día que se debe comprobar si hay cambios de canales. Por de
 #. help: Channels - setprogramid
 msgctxt "#30629"
 msgid "Some TV Providers (e.g. Nos - Portugal) using MPTS send extra program stream information. Setting the program id allows kodi to select the correct stream and therefore makes the channel/recording playable. Note that it takes approx 33% longer to open any stream with this option enabled."
-msgstr "Algunos proveedores de TV (p. ej. Nos - Portugal) usan MPTS para enviar información extra del programa. Ajustar el id de programa correctamente permite a Kodi elegir la emision correcta y hacer la grabación reproducible. Nota: Si esto esta activo, hará que se tarde aproximadamente un 33% mas en abrir cualquier emisión."
+msgstr "Algunos proveedores de TV ( p. ej. Nos - Portugal) que usan MPTS envían información extra sobre la transmisión del programa. Configurando el identificador de programa permite a kodi seleccionar la transmisión correcta y por lo tanto hace que el canal/grabación sea reproducible. Tenga en cuenta que se tarda aproximadamente un 33% más para abrir cualquier transmisión con esta opción activada."
 
 #. help info - Channels
 #. help-category: channels
 msgctxt "#30640"
 msgid "This category cotains the settings for channels. When changing bouquets you may need to clear the channel cache to the settings to take effect. You can do this by going to the following in Kodi settings: 'Settings->PVR & Live TV->General->Clear cache'."
-msgstr "Esta categoría contiene los ajustes para los canales. Cuando cambian los paquetes es necesario borrar la caché de canales para que se haga efectivo. Se puede hacer eso en los ajustes de Kodi: 'Ajustes->PVR y TV en directo->General->Borrar cache'"
+msgstr "Esta categoría contiene la configuración de los canales. Cuando cambie los paquetes, es posible que tenga que borrar la caché de canales para que los ajustes surtan efecto. Puede hacerlo en la configuración de Kodi: 'Configuración->PVR y TV en directo->General->Borrar caché'."
 
 #. help: Channels - usestandardserviceref
 msgctxt "#30641"
 msgid "Usually service reference's for the channels are in a standard format like '1:0:1:27F6:806:2:11A0000:0:0:0:'. On occasion depending on provider they can be extended with some text e.g. '1:0:1:27F6:806:2:11A0000:0:0:0::UTV' or '1:0:1:27F6:806:2:11A0000:0:0:0::UTV + 1'. If this option is enabled then all read service reference's will be read as standard. This is default behaviour. Functionality like autotimers will always convert to a standard reference."
-msgstr "Normalmente la referencia de servicio para los canales están en formato estándar '1:0:1:27F6:806:2:11A0000:0:0:0:'. Algunas veces, dependiendo del proveedor, pueden incluir algún texto como 1:0:1:27F6:806:2:11A0000:0:0:0::UTV' o '1:0:1:27F6:806:2:11A0000:0:0:0::UTV + 1'. Si esta opción esta activada, todo se leerá como la referencia del servicio. Es el comportamiento por defecto. Funcionalidades como las autograbaciones siempre se convierten a referencia de servicio."
+msgstr "Normalmente, las referencias de servicio de los canales tienen un formato estándar como \"1:0:1:27F6:806:2:11A0000:0:0:0:\". En ocasiones, dependiendo del proveedor, pueden ampliarse con algún texto, p. ej. \"1:0:1:27F6:806:2:11A0000:0:0:0::UTV\" o \"1:0:1:27F6:806:2:11A0000:0:0:0::UTV + 1\". Si esta opción está activada, todas las referencias de servicio leídas se interpretarán como estándar. Este es el comportamiento por defecto. Las funciones como los temporizadores automáticos siempre se convertirán a una referencia estándar."
 
 #. help: Channels - zap
 msgctxt "#30642"
 msgid "When using the addon with a single tuner box it may be necessary that the addon needs to be able to zap to another channel on the set-top box. If this option is enabled each channel switch in Kodi will also result in a channel switch on the set-top box. Please note that [B]allow channel switching[/B] needs to be enabled in the webinterface on the set-top box."
-msgstr ""
+msgstr "Cuando se utiliza el complemento con un único sintonizador, puede ser necesario que el complemento sea capaz de cambiar a otro canal en el decodificador. Si esta opción está activada, cada cambio de canal en Kodi también resultará en un cambio de canal en el decodificador. Ten en cuenta que [B]permitir el cambio de canal[/B] debe estar activado en la interfaz web del decodificador."
 
 #. help: Channels - tvgroupmode
 msgctxt "#30643"
 msgid "Choose from one of the following three modes: [B]All bouquets[/B] Fetch all TV bouquets from the set-top box; [B]Some bouquets[/B] Only fetch the bouquets specified in the next options; [B]Favourites group[/B] Only fetch the system bouquet for TV favourites; [B]Custom groups[/B] Fetch a set of bouquets from the Set-top box whose names are loaded from an XML file."
-msgstr ""
+msgstr "Elige uno de los tres modos siguientes: [B]Todos los paquetes[/B] Obtener todos los paquetes de TV del decodificador; [B]Algunos paquetes[/B] Obtener sólo los paquetes especificados en las siguientes opciones; [B]Grupo de favoritos[/B] Obtener sólo el paquete del sistema para los favoritos de TV; [B]Grupos personalizados[/B] Obtener un conjunto de paquetes del decodificador cuyos nombres se cargan desde un archivo XML."
 
 #. help: Channels - onetvgroup
 #. help: Channels - twotvgroup
@@ -1077,12 +1078,12 @@ msgstr ""
 #. help: Channels - fivetvgroup
 msgctxt "#30644"
 msgid "If the previous option has been has been set to 'Some bouquets' you need to specify a TV bouquet to be fetched from the set-top box. Please note that this is the bouquet-name as shown on the set-top box (i.e. 'Favourites (TV)'). This setting is case-sensitive."
-msgstr ""
+msgstr "Si la opción anterior se ha configurado como \"Algunos canales\", deberá especificar el canal de TV que desea obtener del decodificador. Tenga en cuenta que se trata del nombre del paquete que aparece en el decodificador (es decir \"Favoritos (TV)\"). Este ajuste distingue entre mayúsculas y minúsculas."
 
 #. help: Channels - tvfavouritesmode
 msgctxt "#30645"
 msgid "If the fetch mode is 'All bouquets' or 'Some bouquets' depending on your Enigma2 image you may need to explicitly fetch favourites if you require them. The options are: [B]Disabled[/B] Don't explicitly fetch TV favourites; [B]As first bouquet[/B] Explicitly fetch them as the first bouquet; [B]As last bouquet[/B] Explicitly fetch them as the last bouquet."
-msgstr ""
+msgstr "Si el modo de obtención es \"Todos los paquetes\" o \"Algunos paquetes\", dependiendo de su imagen Enigma2, es posible que tenga que obtener explícitamente los favoritos si los necesita. Las opciones son: [B]Desactivado[/B] No buscar explícitamente los favoritos de TV; [B]Como primer paquete[/B] Buscarlos explícitamente como primer paquete; [B]Como último paquete[/B] Buscarlos explícitamente como último paquete."
 
 #. help: Channels - excludelastscannedtv
 msgctxt "#30646"
@@ -1092,7 +1093,7 @@ msgstr "Últimos escaneados es un paquete de sistema que contiene todos los cana
 #. help: Channels - radiogroupmode
 msgctxt "#30647"
 msgid "Choose from one of the following three modes: [B]All bouquets[/B] Fetch all Radio bouquets from the set-top box[/B]; [B]Some bouquets[/B] Only fetch the bouquets specified in the next options; [B]Favourites group[/B] Only fetch the system bouquet for Radio favourites; [B]Custom groups[/B] Fetch a set of bouquets from the Set-top box whose names are loaded from an XML file."
-msgstr ""
+msgstr "Elija uno de los tres modos siguientes: [B]Todos los paquetes[/B] Obtener todos los paquetes de radio del decodificador[/B]; [B]Algunos paquetes[/B] Obtener sólo los paquetes especificados en las siguientes opciones; [B]Grupo de favoritos[/B] Obtener sólo el paquete del sistema para los favoritos de radio; [B]Grupos personalizados[/B] Obtener un conjunto de paquetes del decodificador cuyos nombres se cargan desde un archivo XML."
 
 #. help: Channels - oneradiogroup
 #. help: Channels - tworadiogroup
@@ -1101,12 +1102,12 @@ msgstr ""
 #. help: Channels - fiveradiogroup
 msgctxt "#30648"
 msgid "If the previous option has been has been set to 'Some bouquets' you need to specify a Radio bouquet to be fetched from the set-top box. Please note that this is the bouquet-name as shown on the set-top box (i.e. 'Favourites (Radio)'). This setting is case-sensitive."
-msgstr ""
+msgstr "Si la opción anterior se ha configurado como \"Algunos paquetes\", deberá especificar el paquete de radio que desea obtener del decodificador. Tenga en cuenta que se trata del nombre del paquete que aparece en el decodificador (es decir \"Favoritos (Radio)\"). Este ajuste distingue entre mayúsculas y minúsculas."
 
 #. help: Channels - radiofavouritesmode
 msgctxt "#30649"
 msgid "If the fetch mode is 'All bouquets' or 'Some bouquets' depending on your Enigma2 image you may need to explicitly fetch favourites if you require them. The options are: [B]Disabled[/B] Don't explicitly fetch Radio favourites; [B]As first bouquet[/B] Explicitly fetch them as the first bouquet; [B]As last bouquet[/B] Explicitly fetch them as the last bouquet."
-msgstr ""
+msgstr "Si el modo de obtención es \"Todos los paquetes\" o \"Algunos paquetes\", dependiendo de su imagen Enigma2, es posible que tenga que obtener explícitamente los favoritos si los necesita. Las opciones son: [B]Desactivado[/B] No buscar explícitamente los favoritos de radio; [B]Como primer paquete[/B] Buscarlos explícitamente como primer paquete; [B]Como último paquete[/B] Buscarlos explícitamente como último paquete."
 
 #. help: Channels - excludelastscannedradio
 msgctxt "#30650"
@@ -1141,13 +1142,13 @@ msgstr "Si esta opción se activa cada grupo en kodi se corresponderá exactamen
 #. help: Channels - retrieveprovidername
 msgctxt "#30656"
 msgid "Retrieve provider name from the backend when fetching channels. Default is enabled but disabling can speed up fetch times on older devices."
-msgstr ""
+msgstr "Recupera el nombre del proveedor del backend cuando se obtienen canales. Por defecto está activado, pero desactivarlo puede acelerar los tiempos de obtención en dispositivos antiguos."
 
 #. help info - EPG
 #. help-category: epg
 msgctxt "#30660"
 msgid "This category cotains the settings for EPG (Electronic Programme Guide). Excluding logging missing genre text mappings all other options will require clearing the EPG cache to take effect. This can be done by going to 'Settings->PVR & Live TV->Guide->Clear cache' in Kodi after the addon restarts."
-msgstr "Esta categoría contiene los ajustes para la EPG (Guía Electrónica de Programación). Excluir registrar campos de género vacíos que afecten a otras opciones necesitará de una limpieza de cache para que tenga efecto. Esto puede hacerse en 'Ajustes->PVR y TV en directo->Guía->Borrar cache' en Kodi tras reiniciar el add-on."
+msgstr "Esta categoría contiene los ajustes para la EPG (Guía Electrónica de Programas). Excluyendo el registro de las asignaciones de texto de género que faltan, todas las demás opciones requerirán borrar la caché EPG para que surtan efecto. Esto se puede hacer yendo a 'Ajustes->PVR y TV en directo->Guía->Borrar caché' en Kodi después de reiniciar el complemento."
 
 #. help: EPG - extractshowinfoenabled
 msgctxt "#30661"
@@ -1162,12 +1163,12 @@ msgstr "Configuración usada para extraer la información de temporada, episodio
 #. help: EPG - genreidmapenabled
 msgctxt "#30663"
 msgid "If the genre IDs sent with EPG data from your set-top box are not using the DVB standard, map from these to the DVB standard IDs. Sky UK for instance uses OpenTV, in that case without this option set the genre colouring and text would be incorrect in Kodi."
-msgstr "Si el ID de género enviado en los datos EPG por el set-top box no usa el estándar DVB, convierte eso a los ID estándar DVB. Por ejemplo, Sky UK usa OpenTV. En ese caso, sin esta opción los colores y textos en Kodi serían incorrectos."
+msgstr "Si el ID de género enviado en los datos EPG por el decodificador no usa el estándar DVB, convierte eso a los ID estándar DVB. Por ejemplo, Sky UK usa OpenTV. En ese caso, sin esta opción los colores y textos en Kodi serían incorrectos."
 
 #. help: EPG - genreidmapfile
 msgctxt "#30664"
 msgid "The config used to map set-top box EPG genre IDs to DVB standard IDs. The default file is `Sky-UK.xml`."
-msgstr "Configuración usada para convertir IDs de género EPG del set-top box al estandar DVB. El archivo por defecto es 'Sky-UK.xml'"
+msgstr "Configuración utilizada para asignar los ID de género de la EPG del decodificador a los ID estándar de DVB. El archivo por defecto es `Sky-UK.xml`."
 
 #. help: EPG - rytecgenretextmapenabled
 msgctxt "#30665"
@@ -1177,17 +1178,17 @@ msgstr "Si se usan datos EPG Rytec XMLTV se puede usar esta opción para convert
 #. help: EPG - rytecgenretextmapfile
 msgctxt "#30666"
 msgid "The config used to map Rytec Genre Text to DVB IDs. The default file is `Rytec-UK-Ireland.xml`."
-msgstr "Configuración usada para convertir textos de género Rytec al IDs DVB. El archivo por defecto es 'Rytec-UK-Ireland.xml'"
+msgstr "Configuración utilizada para asignar textos de género Rytec a ID DVB. El archivo por defecto es `Rytec-UK-Ireland.xml`."
 
 #. help: EPG - logmissinggenremapping
 msgctxt "#30667"
 msgid "If you would like missing genre mappings to be logged so you can report them enable this option. Note: any genres found that don't have a mapping will still be extracted and sent to Kodi as strings. Currently genres are extracted by looking for text between square brackets, e.g. [B]TV Drama[/B], or for major, minor genres using a dot (.) to separate [B]TV Drama. Soap Opera[/B]"
-msgstr ""
+msgstr "Si desea registrar las asignaciones de género que faltan para poder informar de ellas, active esta opción. Nota: cualquier género encontrado que no tenga una asignación será extraído y enviado a Kodi como cadenas. Actualmente los géneros se extraen buscando texto entre corchetes, p. ej. [B]TV Drama[/B], o para géneros mayores y menores usando un punto (.) para separar [B]TV Drama. Telenovela[/B]"
 
 #. help: EPG - epgdelayperchannel
 msgctxt "#30668"
 msgid "For older Enigma2 devices EPG updates can effect streaming quality (such as buffer timeouts). A delay of between 250ms and 5000ms can be introduced to improve quality. Only recommended for older devices. Choose the lowest value that avoids buffer timeouts."
-msgstr "En los dispositivos Enigma2 antiguos la actualización de EPG puede afectar a la calidad de emisión (cortes). Se puede introducir un retardo entre 250ms y 5000ms para mejorar la calidad. Solo se recomienda para dispositivos antiguos. Indica el valor mínimo para que no tenga cortes."
+msgstr "En los dispositivos Enigma2 más antiguos, las actualizaciones de la EPG pueden afectar a la calidad de la transmisión (como los tiempos de espera del búfer). Se puede introducir un retardo de entre 250ms y 5000ms para mejorar la calidad. Sólo se recomienda para dispositivos antiguos. Elija el valor más bajo que evite tiempos de espera en el búfer."
 
 #. help: EPG - skipinitialepg
 msgctxt "#30669"
@@ -1208,83 +1209,83 @@ msgstr "Guardar la posición de la última reproducción en el servidor para pod
 #. help: Recordings - sharerecordinglastplayed
 msgctxt "#30682"
 msgid "The options are: [B]Kodi instances[/B] Only use the value in kodi and will not affect last played on the E2 device; [B]Kodi/E2 instances[/B] Use the value across kodi and the E2 device so they stay in sync. Last played will be synced with the E2 device once every 5-10 minutes per recording if the PVR menus are in use. Note that only a single kodi instance is required to have this option enabled."
-msgstr ""
+msgstr "Las opciones son: [B]Instancias de Kodi[/B] Sólo utiliza el valor en kodi y no afectará a la última reproducción en el dispositivo E2; [B]Instancias de Kodi/E2[/B] Utiliza el valor en kodi y en el dispositivo E2 para que permanezcan sincronizados. La última reproducción se sincronizará con el dispositivo E2 una vez cada 5-10 minutos por grabación si los menús PVR están en uso. Tenga en cuenta que sólo se requiere una única instancia de kodi para tener esta opción activada."
 
 #. help: Timers - recordingpath
 msgctxt "#30683"
 msgid "Per default the addon does not specify the recording folder in newly created timers, so the default set in the set-top box will be used. If you want to specify a different folder (i.e. because you want all recordings scheduled via Kodi to be stored in a separate folder), then you need to set this option."
-msgstr "Por defecto, el add-on no tiene especificada ninguna carpeta para las nuevas grabaciones, así que se usar por defecto la del set-top box. Si se quiere usar otra carpeta (p. ej. tener las grabaciones de Kodi por separado) se debe ajustar en esta opción."
+msgstr "Por defecto, el complemento no especifica la carpeta de grabación en los temporizadores recién creados, por lo que se utilizará la establecida por defecto en el decodificador. Si quieres especificar una carpeta diferente (es decir, porque quieres que todas las grabaciones programadas a través de Kodi se almacenen en una carpeta separada), entonces necesitas configurar esta opción."
 
 #. help: Recordings - onlycurrent
 msgctxt "#30684"
 msgid "If this option is not set the addon will fetch all available recordings from all configured paths from the set-top box. If this option is set then it will only list recordings that are stored within the 'current recording path' on the set-top box."
-msgstr "Si esta opción no esta ajustada, el add-on obtendrá todas las grabaciones disponibles de todas las rutas configuradas en el set-top box. Si se ajusta esta opción solo mostrará las grabaciones almacenadas en la 'ruta actual de grabaciones' del set-top box."
+msgstr "Si esta opción no está activada, el complemento buscará en el decodificador todas las grabaciones disponibles en todas las rutas configuradas. Si esta opción está activada, sólo mostrará las grabaciones almacenadas en la 'ruta de grabación actual' del decodificador."
 
 #. help: Recordings - keepfolders
 msgctxt "#30685"
 msgid "If enabled use the real path from the backend to dictate the folder structure."
-msgstr ""
+msgstr "Si está activada, utiliza la ruta real del backend para establecer la estructura de carpetas."
 
 #. help: Recordings - enablerecordingedls
 msgctxt "#30686"
 msgid "EDLs are used to define commericals etc. in recordings. If a tool like Comskip is used to generate EDL files enabling this will allow Kodi PVR to use them. E.g. if there is a file called 'my recording.ts' the EDL file should be call 'my recording.edl'. Note: enabling this setting has no effect if the files are not present."
-msgstr "Los EDL se usan para definir anuncios, etc, en las grabaciones. Si se usa una herramienta como Comskip para generar archivos EDL esto permitirá a Kodi usarla. P. ej. si hay un archivo llamado 'mi grabacion.ts' el archivo EDL debe llamarse 'mi grabacion.edl'. Nota: Activar esta opción no tiene efecto si los archivos no existen."
+msgstr "Los EDL se usan para definir anuncios, etc, en las grabaciones. Si se usa una herramienta como Comskip para generar archivos EDL esto permitirá a Kodi usarla. Por ejemplo si hay un archivo llamado 'mi grabacion.ts' el archivo EDL debe llamarse 'mi grabacion.edl'. Nota: Activar esta opción no tiene efecto si los archivos no existen."
 
 #. help: Recordings - edlpaddingstart
 msgctxt "#30687"
 msgid "Padding to use at an EDL stop. I.e. use a negative number to start the cut earlier and positive to start the cut later. Default 0."
-msgstr "Margen a usar en arranque EDL. Un numero negativo cortará antes y un positivo cortará después. Por defecto es 0."
+msgstr "Relleno a utilizar en una parada EDL. Es decir, utilice un número negativo para iniciar el corte antes y positivo para iniciarlo después. Por defecto 0."
 
 #. help: Recordings - edlpaddingstop
 msgctxt "#30688"
 msgid "Padding to use at an EDL stop. I.e. use a negative number to stop the cut earlier and positive to stop the cut later. Default 0."
-msgstr "Margen a usar en parada EDL. Un numero negativo terminará de cortar antes y un positivo terminará de cortar después. Por defecto es 0."
+msgstr "Relleno a utilizar en una parada EDL. Es decir, utilice un número negativo para iniciar el corte antes y positivo para iniciarlo después. Por defecto 0."
 
 #. help: Recordings - recordingsrecursive
 msgctxt "#30689"
 msgid "By default only the root of the location will be used to list recordings. When enabled the contents of child folders will be included."
-msgstr ""
+msgstr "Por defecto, sólo se utilizará la raíz de la ubicación para listar las grabaciones. Si se activa, se incluirá el contenido de las subcarpetas."
 
 #. help: Recordings - keepfoldersomitlocation
 msgctxt "#30690"
 msgid "When using the folder structure from the backend omit the location path from the directory. Useful as it can remove the need to traverse unused folders each time recordings are accessed."
-msgstr ""
+msgstr "Al utilizar la estructura de carpetas del backend, omita la ruta de ubicación del directorio. Resulta útil ya que puede eliminar la necesidad de recorrer las carpetas no utilizadas cada vez que se accede a las grabaciones."
 
 #. help: Recordings - virtualfolders
 msgctxt "#30691"
 msgid "Create a virtual structure grouping recordings with the same name into folders. Will be applied to all recordings unless keeping the folder structure on the backend. In that case it will only be applied to the recordings in the root of each recording location."
-msgstr ""
+msgstr "Crea una estructura virtual agrupando grabaciones con el mismo nombre en carpetas. Se aplicará a todas las grabaciones a menos que se mantenga la estructura de directorios en el backend. En ese caso sólo se aplicará a las grabaciones en la raíz de cada ubicación de grabación."
 
 #. help info - Timers
 #. help-category: timers
 msgctxt "#30700"
 msgid "This category cotains the settings for timers (regular and auto)"
-msgstr "Esta categoría contiene los ajustes para las programaciones (normales y automáticas)"
+msgstr "Esta categoría contiene los ajustes de los temporizadores (normal y automático)"
 
 #. help: Timers - enablegenrepeattimers
 msgctxt "#30701"
 msgid "Repeat timers will display as timer rules. Enabling this will make Kodi generate regular timers to match the repeat timer rules so the UI can show what's scheduled and currently recording for each repeat timer."
-msgstr "Grabaciones repetitivas se mostrarán como grabaciones programadas. Activar esto hará que Kodi genere grabaciones programadas según las repeticiones para que la UI pueda mostrar en la agenda las grabaciones y cada repetición."
+msgstr "Los temporizadores de repetición se mostrarán como reglas de temporizador. Al activar esta opción, Kodi generará temporizadores regulares que coincidan con las reglas de repetición de temporizadores, de modo que la interfaz de usuario pueda mostrar lo que está programado y lo que se está grabando actualmente para cada repetición de temporizador."
 
 #. help: Timers - numgenrepeattimers
 msgctxt "#30702"
 msgid "The number of Kodi PVR timers to generate."
-msgstr "Número de grabaciones programadas Kodi PVR a generar."
+msgstr "El número de temporizadores Kodi PVR a generar."
 
 #. help: Timers - timerlistcleanup
 msgctxt "#30703"
 msgid "If this option is set then the addon will send the command to delete completed timers from the set-top box after each update interval."
-msgstr "Si se ajusta esta opción el add-on enviará la orden de borrar las grabaciones completadas desde el set-top box después de cada actualización."
+msgstr "Si esta opción está activada, el complemento enviará la orden de borrar los temporizadores completados del decodificador después de cada intervalo de actualización."
 
 #. help: Timers - enableautotimers
 msgctxt "#30704"
 msgid "When this is enabled there are some settings required on the set-top box to enable linking of AutoTimers (Timer Rules) to Timers in the Kodi UI. The addon attempts to set these automatically on boot."
-msgstr "Cuando se activa esta opción es necesario ajustar algunas cosas en el set-top box para activar el enlace de AutoGrabaciones (Reglas de Grabaciones) a las Grabaciones en Kodi. Este add-on intenta ajustar esto automáticamente al arrancar."
+msgstr "Cuando esto está activado, hay algunos ajustes necesarios en el decodificador para permitir la vinculación de los temporizadores automáticos (reglas de temporizador) a los temporizadores en la interfaz de usuario de Kodi. El complemento intenta configurarlos automáticamente al arrancar."
 
 #. help: Timers - limitanychannelautotimers
 msgctxt "#30705"
 msgid "If last scanned groups are excluded attempt to limit new autotimers to either TV or Radio (dependent on channel used to create the autotimer). Note that if last scanned groups are enabled this is not possible and the setting will be ignored."
-msgstr "Si los grupos Últimos Escaneados están excluidos intenta limitar las nuevas autograbaciones a cada TV o Radio (dependiendo del canal usado para crear la autograbación). Si los grupos Últimos Escaneados no están excluidos este ajuste será ignorado."
+msgstr "Si se excluyen los últimos grupos escaneados, se intentará limitar los nuevos temporizadores automáticos a TV o Radio (dependiendo del canal utilizado para crear el temporizador automático). Tenga en cuenta que si los últimos grupos escaneados están habilitados, esto no es posible y el ajuste será ignorado."
 
 #. help: Timers - limitanychannelautotimerstogroups
 msgctxt "#30706"
@@ -1300,42 +1301,42 @@ msgstr "Esta categoría contiene los ajustes para el TimeShift. TimeShift permit
 #. help: Timeshift - enabletimeshift
 msgctxt "#30721"
 msgid "What timeshift option do you want: [B]Disabled[/B] No timeshifting; [B]On Pause[/B] Timeshifting starts when a live stream is paused. E.g. you want to continue from where you were at after pausing; [B]On Playback[/B] Timeshifting starts when a live stream is opened. E.g. You can go to any point in the stream since it was opened."
-msgstr ""
+msgstr "Qué opción de Timeshift quieres: [B]Desactivado[/B] Sin Timeshifting; [B]En Pausa[/B] El Timeshifting comienza cuando se pausa una transmisión en directo. Por ejemplo si quieres continuar desde donde estabas después de la pausa; [B]En Reproducción[/B] El Timeshifting comienza cuando se abre una transmisión en directo. Por ejemplo puedes ir a cualquier punto de la transmisión desde que se abrió."
 
 #. help: Timeshift - timeshiftbufferpath
 msgctxt "#30722"
 msgid "The path used to store the timeshift buffer. The default is the `addon_data/pvr.vuplus` folder in userdata."
-msgstr "Ruta para almacenar buffer de TimeShift. Por defecto es 'addon_data/pvr.vuplus' dentro de la carpeta userdata."
+msgstr "La ruta utilizada para almacenar el búfer de Timeshift. Por defecto es la carpeta `addon_data/pvr.vuplus` en userdata."
 
 #. help: Timeshift - timeshiftEnabled
 msgctxt "#30723"
 msgid "Enable the timeshift feature for IPTV streams using inputstream.ffmpegdirect. Note that this feature only works on playback and will ignore the timeshift mode used for regular channel playback."
-msgstr ""
+msgstr "Activar la función Timeshift para transmisiones IPTV utilizando inputstream.ffmpegdirect. Tenga en cuenta que esta función solo funciona en la reproducción e ignorará el modo Timeshift utilizado para la reproducción de canales normales."
 
 #. help: Timeshift - useFFmpegReconnect
 msgctxt "#30724"
 msgid "Note this can only apply to http/https streams that are processed by libavformat (e.g. M3u8/HLS)."
-msgstr ""
+msgstr "Tenga en cuenta que esto sólo puede aplicarse a transmisiones http/https procesadas por libavformat (p. ej., M3u8/HLS)."
 
 #. help: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30725"
 msgid "If the type of stream cannot be determined assume it's an MPEG TS stream."
-msgstr ""
+msgstr "Si no se puede determinar el tipo de transmisión, asume que se trata de una transmisión MPEG TS."
 
 #. help: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30726"
 msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
-msgstr ""
+msgstr "Abrir el cuadro de diálogo de ajustes de inputstream.ffmpegdirect para modificar el timeshift y otros ajustes."
 
 #. help: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30727"
 msgid "For devices with limited disk space a limit in Gigabytes can be set whereby timeshift will be switched off and playback will return to the live stream. Note that for timeshift on playback it will not be possible to timeshift again until a stream is restarted once this limit is reached."
-msgstr ""
+msgstr "Para dispositivos con espacio de disco limitado, se puede establecer un límite en Gigabytes por el que Timeshift se desactivará y la reproducción volverá a la transmisión en directo. Tenga en cuenta que para la reproducción Timeshift no será posible volver a utilizar Timeshift hasta que se reinicie la transmisión una vez que se alcance este límite."
 
 #. help: Timeshift - timeshiftdisklimit
 msgctxt "#30728"
 msgid "The disk space limit to use for the timeshift buffer in Gigabytes."
-msgstr ""
+msgstr "El límite de espacio en disco a utilizar para el buffer timeshift en Gigabytes."
 
 #. help info - Advanced
 #. help-category: advanced
@@ -1351,22 +1352,22 @@ msgstr "Por defecto, la frase resumen (descripción corta en Enigma2) no se mues
 #. help: Advanced - powerstatemode
 msgctxt "#30742"
 msgid "If this option is set to a value other than `Disabled` then the addon will send a Powerstate command to the set-top box when Kodi will be closed (or the addon will be deactivated): [B]Disabled[/B] No command sent when the addon exits; [B]Standby[/B] Send the standby command on exit; [B]Deep standby[/B] Send the deep standby command on exit. Note, the set-top box will not respond to Kodi after this command is sent; [B]Wakeup, then standby[/B] Similar to standby but first sends a wakeup command. Can be useful if you want to ensure all streams have stopped. Note: if you use CEC this could cause your TV to wake."
-msgstr ""
+msgstr "Si esta opción se establece en un valor distinto de `Desactivado` entonces el complemento enviará un comando de estado de energía al decodificador cuando Kodi se cierre (o el complemento se desactive): [B]Desactivado[/B] No se envía ningún comando al salir del complemento; [B]Espera[/B] Envía el comando de espera al salir; [B]Espera profunda[/B] Envía el comando de espera profunda al salir. Nota, el decodificador no responderá a Kodi después de enviar este comando; [B]Activar, luego espera[/B] Similar a en espera, pero primero envía un comando de activación. Puede ser útil si quieres asegurarte de que todos las transmisiones se han detenido. Nota: si usas CEC esto puede causar que tu TV se active."
 
 #. help: Advanced - readtimeout
 msgctxt "#30743"
 msgid "The timemout to use when trying to read live streams. Default for live streams is 0. Default for for timeshifting is 10 seconds."
-msgstr "Tiempo de espera para intentar leer una emisión en directo. Por defecto para directo es 0. Por defecto para TimeShift es 10 segundos."
+msgstr "El tiempo de espera a utilizar cuando se intenta leer transmisiones en directo. Por defecto para transmisiones en directo es 0. Por defecto para timeshifting es 10 segundos."
 
 #. help: Advanced - streamreadchunksize
 msgctxt "#30744"
 msgid "The chunk size used by Kodi for streams. Default at 0 to leave it to Kodi to decide. Can be useful to set manually when viewing streams remotely where buffering can occur as PVR is optimised for a local network."
-msgstr ""
+msgstr "El tamaño del bloque usado por Kodi para las transmisiones. Por defecto en 0 para dejar que Kodi decida. Puede ser útil configurarlo manualmente cuando se ven transmisiones de forma remota, ya que el PVR está optimizado para una red local."
 
 #. help: Advanced - debugnormal
 msgctxt "#30745"
 msgid "Debug log statements will display for the addon even though debug logging may not be enabled in Kodi. Note that all debug log statements will display at NOTICE level."
-msgstr "Las opciones de registro de depuración se mostrarán para el add-on aunque el registro de depuración en Kodi no este activo. Nota: todos los registros se mostrarán con nivel NOTICE."
+msgstr "Los registros de depuración se mostrarán para el complemento aunque el registro de depuración no esté habilitado en Kodi. Ten en cuenta que todos los registros de depuración se mostrarán a nivel NOTICE."
 
 #. help: Advanced - tracedebug
 msgctxt "#30746"
@@ -1376,14 +1377,14 @@ msgstr "Se mostrarán registros muy detallados y precisos ademas del registro de
 #. help: Advanced - ignoredebug
 msgctxt "#30747"
 msgid "Debug log statements will not be displayed for the addon even though debug logging is enabled in Kodi. This can be useful when trying to debug an issue in Kodi which is not addon related."
-msgstr "Las opciones de registro de depuración no se mostrarán para el add-on aunque el registro de depuración en Kodi esté activo. Es útil cuando se intenta depurar un error en Kodi que no esta relacionado con los add-ons."
+msgstr "Las entradas del registro de depuración no se mostrarán para el complemento aunque el registro de depuración esté habilitado en Kodi. Esto puede ser útil cuando se trata de depurar un problema en Kodi que no está relacionado con el complemento."
 
 # empty strings from id 30748 to 30759
 #. help info - Backend
 #. help-category: backend
 msgctxt "#30760"
 msgid "This category contains information and settings on/about the Enigma2 STB."
-msgstr ""
+msgstr "Esta categoría contiene información y ajustes sobre Enigma2 STB."
 
 #. help: Backend - webifversion
 msgctxt "#30761"
@@ -1403,17 +1404,17 @@ msgstr "autotimernameintags"
 #. help: Backend - globalstartpaddingstb
 msgctxt "#30764"
 msgid "This value reflects the backend setting [B]Margin before recording[/B]. It will be applied to the start of all new regular timers created including those created from Autotimers. Note that if a padding/margin is set on an Autotimer it will be custom for that Autotimer and will override this value."
-msgstr ""
+msgstr "Este valor refleja el ajuste del backend [B]Margen antes de grabar[/B]. Se aplicará al inicio de todos los nuevos temporizadores regulares creados, incluidos los creados a partir de temporizadores automáticos. Tenga en cuenta que si se establece un relleno/margen en un temporizador automático, será personalizado para ese temporizador automático y anulará este valor."
 
 #. help: Backend - globalendpaddingstb
 msgctxt "#30765"
 msgid "This value reflects the backend setting [B]Margin after recording[/B]. It will be applied to the end of all new regular timers created including those created from Autotimers. Note that if a padding/margin is set on an Autotimer it will be custom for that Autotimer and will override this value."
-msgstr ""
+msgstr "Este valor refleja el ajuste del backend [B]Margen tras grabación[/B]. Se aplicará al final de todos los nuevos temporizadores regulares creados, incluidos los creados a partir de temporizadores automáticos. Tenga en cuenta que si se establece un relleno/margen en un temporizador automático, será personalizado para ese temporizador automático y anulará este valor."
 
 #. label: Backend - wakeonlanmac
 msgctxt "#30766"
 msgid "The MAC address of the Engima2 STB to be used for WoL (Wake On LAN)."
-msgstr ""
+msgstr "La dirección MAC del STB Engima2 que se utilizará para WoL (Wake On LAN)."
 
 #~ msgctxt "#30017"
 #~ msgid "Use only the DVB boxes' current recording path"
diff --git a/pvr.vuplus/resources/language/resource.language.es_mx/strings.po b/pvr.vuplus/resources/language/resource.language.es_mx/strings.po
index 0a5bcad..b3e4bb1 100644
--- a/pvr.vuplus/resources/language/resource.language.es_mx/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.es_mx/strings.po
@@ -5,17 +5,17 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: translations@kodi.tv\n"
+"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-12-16 14:13+0000\n"
-"Last-Translator: Edson Armando <edsonarmando78@outlook.com>\n"
+"PO-Revision-Date: 2022-04-09 10:15+0000\n"
+"Last-Translator: Christian Gade <gade@kodi.tv>\n"
 "Language-Team: Spanish (Mexico) <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/es_mx/>\n"
 "Language: es_mx\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9.1\n"
+"X-Generator: Weblate 4.11.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -330,7 +330,7 @@ msgstr "Cambio de hora"
 #. label: Timeshift - enabletimeshift
 msgctxt "#30061"
 msgid "Enable timeshift"
-msgstr ""
+msgstr "Activar timeshift"
 
 #. label: Timeshift - timeshiftbufferpath
 msgctxt "#30062"
@@ -779,7 +779,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Utilizar opciones de reconexión http de FFmpeg si es posible"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
@@ -789,7 +789,7 @@ msgstr ""
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Modificar configuración de inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
diff --git a/pvr.vuplus/resources/language/resource.language.et_ee/strings.po b/pvr.vuplus/resources/language/resource.language.et_ee/strings.po
index 162f60b..152ff43 100644
--- a/pvr.vuplus/resources/language/resource.language.et_ee/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.et_ee/strings.po
@@ -5,17 +5,17 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: translations@kodi.tv\n"
+"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-12-16 14:13+0000\n"
-"Last-Translator: rimasx <riks_12@hot.ee>\n"
+"PO-Revision-Date: 2022-03-10 23:51+0000\n"
+"Last-Translator: Christian Gade <gade@kodi.tv>\n"
 "Language-Team: Estonian <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/et_ee/>\n"
 "Language: et_ee\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9.1\n"
+"X-Generator: Weblate 4.11.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -285,7 +285,7 @@ msgstr "Logi sisse"
 #. label-group: Advanced - Misc
 msgctxt "#30052"
 msgid "Misc"
-msgstr ""
+msgstr "Muud"
 
 #. label-group: EPG - Genre ID Mappings
 msgctxt "#30053"
diff --git a/pvr.vuplus/resources/language/resource.language.fi_fi/strings.po b/pvr.vuplus/resources/language/resource.language.fi_fi/strings.po
index 531bbae..4ebcc76 100644
--- a/pvr.vuplus/resources/language/resource.language.fi_fi/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.fi_fi/strings.po
@@ -7,22 +7,23 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/kodi-main/language/fi_FI/)\n"
-"Language: fi_FI\n"
+"PO-Revision-Date: 2022-08-26 10:14+0000\n"
+"Last-Translator: Oskari Lavinto <olavinto@protonmail.com>\n"
+"Language-Team: Finnish <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/fi_fi/>\n"
+"Language: fi_fi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.13\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
-msgstr "Kodin VU+/ Enigma2-asiakasohjelma"
+msgstr "Enigma2-pohjaisten vastaanottimien käyttöliittymä Kodille"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "VU+-asiakasohjelma. Tukee suorien tv-lähetysten ja tallennusten katsomista, ohjelmaopasta ja ohjelmien ajastamista."
+msgstr "Enigma2-käyttöliittymä, joka tukee televisiolähetysten ja tallenteiden suoratoistoa, ohjelmaopasta ja ajastuksia. Ohjeita löydät osoitteesta: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
@@ -277,7 +278,7 @@ msgstr "Tv-lähetyksen aikakatkaisu (0 on oletusarvo)"
 #. label-group: Connection - Login
 msgctxt "#30051"
 msgid "Login"
-msgstr "Käyttäjätunnus"
+msgstr "Kirjautuminen"
 
 #. label-group: Advanced - Misc
 msgctxt "#30052"
@@ -333,7 +334,7 @@ msgstr "Käytä ajansiirtoa"
 #. label: Timeshift - timeshiftbufferpath
 msgctxt "#30062"
 msgid "Timeshift buffer path"
-msgstr "Ajansiirtopuskurin polku"
+msgstr "Ajansiirtopuskurin sijainti"
 
 #. label-option: Timeshift - enabletimeshift
 msgctxt "#30063"
@@ -440,7 +441,7 @@ msgstr "tuntematon"
 #. application: Client
 msgctxt "#30082"
 msgid " (Not connected!)"
-msgstr "(Ei yhteyttä)"
+msgstr " (ei yhteyttä)"
 
 #. application: Client
 msgctxt "#30083"
@@ -606,7 +607,7 @@ msgstr ""
 #. label: EPG - skipinitialepg
 msgctxt "#30115"
 msgid "Skip Initial EPG Load"
-msgstr ""
+msgstr "Ohita ensimmäinen ohjelmaoppaan lataus"
 
 #. label: General - channelandgroupupdatemode
 msgctxt "#30116"
@@ -772,7 +773,7 @@ msgstr ""
 #. label: Timeshift - timeshiftEnabled
 msgctxt "#30148"
 msgid "Enable timeshift for IPTV streams"
-msgstr ""
+msgstr "Käytä ajansiirtoa IPTV-mediavirroille"
 
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
@@ -797,12 +798,12 @@ msgstr ""
 #. label: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30153"
 msgid "Enable timeshift disk limit"
-msgstr ""
+msgstr "Käytä ajansiirron tallennusrajoitusta"
 
 #. label: Timeshift - timeshiftdisklimit
 msgctxt "#30154"
 msgid "Timeshift disk limit"
-msgstr ""
+msgstr "Ajansiirron tallennusrajoitus"
 
 #. format-label: Timeshift - timeshiftdisklimit
 msgctxt "#30155"
@@ -892,12 +893,12 @@ msgstr "Tallenna, jos ohjelman nimi, jakso ja juoni eroavat"
 #. notification: Client
 msgctxt "#30514"
 msgid "Timeshift buffer path does not exist"
-msgstr "Ajansiirtopuskurin polkua ei ole olemassa"
+msgstr "Ajansiirtopuskurin sijaintia ei ole olemassa"
 
 #. notification: Enigma2
 msgctxt "#30515"
 msgid "Enigma2: Could not reach web interface"
-msgstr "Enigma2: Web-käyttöliittymään ei saatu yhteyttä"
+msgstr "Enigma2: Web-käyttöliittymää ei tavoitettu"
 
 #. notification: Enigma2
 msgctxt "#30516"
@@ -953,12 +954,12 @@ msgstr ""
 #. help: Connection - webport
 msgctxt "#30602"
 msgid "The port used to connect to the web interface."
-msgstr ""
+msgstr "Web-käyttöliittymään yhdistettäessä käytettävä portti."
 
 #. help: Connection - use_secure
 msgctxt "#30603"
 msgid "Use https to connect to the web interface."
-msgstr ""
+msgstr "Yhdistä web-käyttöliittymään HTTPS-protokollan välityksellä."
 
 #. help: Connection - user
 msgctxt "#30604"
diff --git a/pvr.vuplus/resources/language/resource.language.fr_fr/strings.po b/pvr.vuplus/resources/language/resource.language.fr_fr/strings.po
index 6d391ad..88cdca2 100644
--- a/pvr.vuplus/resources/language/resource.language.fr_fr/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.fr_fr/strings.po
@@ -5,17 +5,17 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-06-28 08:29+0000\n"
-"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"PO-Revision-Date: 2023-02-01 15:54+0000\n"
+"Last-Translator: skypichat <skypichat@hotmail.fr>\n"
 "Language-Team: French (France) <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/fr_fr/>\n"
 "Language: fr_fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.7\n"
+"X-Generator: Weblate 4.15.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -23,7 +23,7 @@ msgstr "Interface logicielle pour les enregistreurs VU+/Enigma2"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "Interface logicielle pour enregistreur VU+. Gère la diffusion et les enregistrements de la TV en direct, le guide électronique des programmes TV et les programmations."
+msgstr "Interface Enigma2 - prenant en charge la diffusion en continu de la télévision en direct et des enregistrements, EPG, Timers, Autotimers.[CR]     [CR]Pour la documentation, visiter : https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md [CR]    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
@@ -65,7 +65,7 @@ msgstr "Icônes"
 #. label-group: General - Program Streams
 msgctxt "#30007"
 msgid "Program Streams"
-msgstr ""
+msgstr "Volets du programme"
 
 #. label: General - iconpath
 msgctxt "#30008"
@@ -95,7 +95,7 @@ msgstr "Zapper avant le changement de chaîne (par ex. pour les appareils à tun
 #. label: Channels - setprogramid
 msgctxt "#30014"
 msgid "Set program id for live channel or recorded streams"
-msgstr ""
+msgstr "Définir l'identifiant du programme pour la chaîne en direct ou les flux enregistrés"
 
 #. label: General - updateint
 msgctxt "#30015"
@@ -105,12 +105,12 @@ msgstr "Intervalle de mise à jour"
 #. label: Channels - usegroupspecificnumbers
 msgctxt "#30016"
 msgid "Use bouquet specific channel numbers from backend"
-msgstr ""
+msgstr "Utiliser des numéros de canaux spécifiques au bouquet depuis le backend"
 
 #. label: Recordings - onlycurrent
 msgctxt "#30017"
 msgid "Only use current recording path from backend"
-msgstr ""
+msgstr "Utiliser uniquement le chemin d'enregistrement actuel à partir du backend"
 
 #. label-category: general
 #. label-group: Channels
@@ -133,17 +133,17 @@ msgstr "Avancé"
 #. label: Recordings - recordingsrecursive
 msgctxt "#30022"
 msgid "Use recursive listing for recording locations"
-msgstr ""
+msgstr "Utiliser la liste récursive pour enregistrer les emplacements"
 
 #. label: Timers - recordingpath
 msgctxt "#30023"
 msgid "New timer default recording folder"
-msgstr ""
+msgstr "Nouveau dossier d'enregistrement par défaut de la minuterie"
 
 #. label: Advanced - powerstatemode
 msgctxt "#30024"
 msgid "Send powerstate mode on addon exit"
-msgstr "Envoyer le mode « powerstate » quand une extension quitte"
+msgstr "Envoyer le mode powerstate à la sortie de l'addon"
 
 #. label: Channels - tvgroupmode
 msgctxt "#30025"
@@ -153,7 +153,7 @@ msgstr "Mode de récupération du bouquet TV"
 #. label: Channels - onetvgroup
 msgctxt "#30026"
 msgid "TV bouquet 1"
-msgstr ""
+msgstr "Bouquet TV 1"
 
 #. label: General - onlinepicons
 msgctxt "#30027"
@@ -173,7 +173,7 @@ msgstr "Activer la configuration automatique pour les flux en direct"
 #. label: Recordings - keepfolders
 msgctxt "#30030"
 msgid "Keep folder structure for recordings"
-msgstr ""
+msgstr "Conserver la structure des dossiers pour les enregistrements"
 
 #. label-group: EPG - Seasons and Episodes
 msgctxt "#30031"
@@ -193,7 +193,7 @@ msgstr "Extraire les infos de saison, d'épisode et d'année si possible"
 #. label: Timers - enableautotimers
 msgctxt "#30034"
 msgid "Enable autotimers"
-msgstr "Activer les programmations auto."
+msgstr "Activer les programmations auto"
 
 #. label: General - usepiconseuformat
 msgctxt "#30035"
@@ -218,7 +218,7 @@ msgstr "Interface Web"
 #. label-group: Connection - Streaming
 msgctxt "#30039"
 msgid "Streaming"
-msgstr "Diffusion par flux"
+msgstr "Diffusion"
 
 #. label: Advanced - prependoutline
 msgctxt "#30040"
@@ -318,7 +318,7 @@ msgstr "Mode de récupération du bouquet radio"
 #. label: Channels - oneradiogroup
 msgctxt "#30059"
 msgid "Radio bouquet 1"
-msgstr ""
+msgstr "Bouquet radio 1"
 
 #. label-category: timeshift
 #. label-group: Timeshift - Timeshift
@@ -354,12 +354,12 @@ msgstr "En pause"
 #. label: Connection - use_secure_stream
 msgctxt "#30066"
 msgid "Use secure HTTP (https) for streams"
-msgstr "Utiliser le HTTP sécurisé (https) pour la diffusion par flux"
+msgstr "Utiliser le HTTP sécurisé (https) pour la diffusion"
 
 #. label: Connection - use_login_stream
 msgctxt "#30067"
 msgid "Use login for streams"
-msgstr "Utiliser la connexion pour la diffusion par flux"
+msgstr "Utiliser la connexion pour la diffusion"
 
 #. label: Channels - tvfavouritesmode
 msgctxt "#30068"
@@ -402,7 +402,7 @@ msgstr "Tous les bouquets"
 #. label-option: Channels - radiogroupmode
 msgctxt "#30075"
 msgid "Some bouquets"
-msgstr ""
+msgstr "Certains bouquets"
 
 #. label-option: Channels - tvfavouritesmode
 #. label-option: Channels - radiofavouritesmode
@@ -420,7 +420,7 @@ msgstr "Comme dernier bouquet"
 #. label-option: Channels - radiogroupmode
 msgctxt "#30078"
 msgid "Favourites bouquet"
-msgstr ""
+msgstr "Bouquets favoris"
 
 #. application: ChannelGroups
 msgctxt "#30079"
@@ -441,7 +441,7 @@ msgstr "inconnu"
 #. application: Client
 msgctxt "#30082"
 msgid " (Not connected!)"
-msgstr "(Non connecté)"
+msgstr " (Non connecté)"
 
 #. application: Client
 msgctxt "#30083"
@@ -451,17 +451,17 @@ msgstr "erreur de l'extension"
 #. label: Recordings - keepfoldersomitlocation
 msgctxt "#30084"
 msgid "Omit location path from recording directory"
-msgstr ""
+msgstr "Omettre le chemin d'emplacement du répertoire d'enregistrement"
 
 #. label: Recordings - virtualfolders
 msgctxt "#30085"
 msgid "Group recordings into folders by title"
-msgstr ""
+msgstr "Grouper les enregistrements dans des dossiers par titre"
 
 #. label-category: backend
 msgctxt "#30086"
 msgid "Backend"
-msgstr "Serveur"
+msgstr "Backend"
 
 #. label-group: Backend - Recording Padding
 msgctxt "#30087"
@@ -612,7 +612,7 @@ msgstr "Ignorer le chargement initial du guide"
 #. label: General - channelandgroupupdatemode
 msgctxt "#30116"
 msgid "Channels and groups update mode"
-msgstr ""
+msgstr "Mode de mise à jour des chaînes et des groupes"
 
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30117"
@@ -622,22 +622,22 @@ msgstr "Désactivé"
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30118"
 msgid "Notify on UI and Log"
-msgstr ""
+msgstr "Notifier sur l'interface utilisateur et le journal"
 
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30119"
 msgid "Reload Channels and Groups"
-msgstr ""
+msgstr "Recharger les chaînes et les groupes"
 
 #. label: General - channelandgroupupdatehour
 msgctxt "#30120"
 msgid "Channels and groups update hour (24h)"
-msgstr ""
+msgstr "Heure de mise à jour des chaînes et des groupes (24h)"
 
 #. label: Connection - connectionchecktimeout
 msgctxt "#30121"
 msgid "Connection check timeout"
-msgstr ""
+msgstr "Délai de vérification de la connexion"
 
 #. label: Connection - connectioncheckinterval
 msgctxt "#30122"
@@ -647,32 +647,32 @@ msgstr "Intervalle de vérification de connexion"
 #. label: Timers - Autotimers
 msgctxt "#30123"
 msgid "Autotimers"
-msgstr ""
+msgstr "Minuteries automatiques"
 
 #. label: Timers - limitanychannelautotimers
 msgctxt "#30124"
 msgid "Limit 'Any Channel' autotimers to TV or Radio"
-msgstr ""
+msgstr "Limiter les minuteries automatiques \"N'importe quelle chaîne\" à la télévision ou à la radio"
 
 #. label: Timers - limitanychannelautotimerstogroups
 msgctxt "#30125"
 msgid "Limit to groups of original EPG channel"
-msgstr ""
+msgstr "Limiter aux groupes de la chaîne EPG d'origine"
 
 #. label: Channels - usestandardserviceref
 msgctxt "#30126"
 msgid "Use standard channel service reference"
-msgstr ""
+msgstr "Utiliser la référence de service de canal standard"
 
 #. label: Recordings - storeextrarecordinginfo
 msgctxt "#30127"
 msgid "Store last played/play count on the backend"
-msgstr ""
+msgstr "Stocker le dernier joué/le nombre de lectures sur le backend"
 
 #. label: Recordings - sharerecordinglastplayed
 msgctxt "#30128"
 msgid "Share last played across:"
-msgstr ""
+msgstr "Partager la dernière lecture sur :"
 
 #. label-option: Recordings - sharerecordinglastplayed
 msgctxt "#30129"
@@ -688,112 +688,112 @@ msgstr "Instances de Kodi/E2"
 #. label-option: Channels - radiogroupmode
 msgctxt "#30131"
 msgid "Custom bouquets"
-msgstr ""
+msgstr "Bouquets personnalisés"
 
 #. label: Channels - customtvgroupsfile
 msgctxt "#30132"
 msgid "Custom TV bouquets file"
-msgstr ""
+msgstr "Fichier de bouquets TV personnalisés"
 
 #. label: Channels - customradiogroupsfile
 msgctxt "#30133"
 msgid "Custom Radio bouquets file"
-msgstr ""
+msgstr "Fichier de bouquets radio personnalisés"
 
 #. label: Channels - numtvgroups
 msgctxt "#30134"
 msgid "Number of TV bouquets"
-msgstr ""
+msgstr "Nombre de bouquets TV"
 
 #. label: Channels - twotvgroup
 msgctxt "#30135"
 msgid "TV bouquet 2"
-msgstr ""
+msgstr "Bouquet TV 2"
 
 #. label: Channels - threetvgroup
 msgctxt "#30136"
 msgid "TV bouquet 3"
-msgstr ""
+msgstr "Bouquet TV 3"
 
 #. label: Channels - fourtvgroup
 msgctxt "#30137"
 msgid "TV bouquet 4"
-msgstr ""
+msgstr "Bouquet TV 4"
 
 #. label: Channels - fivetvgroup
 msgctxt "#30138"
 msgid "TV bouquet 5"
-msgstr ""
+msgstr "Bouquet TV 5"
 
 #. label: Channels - numradiogroups
 msgctxt "#30139"
 msgid "Number of radio bouquets"
-msgstr ""
+msgstr "Nombre de bouquets radio"
 
 #. label: Channels - tworadiogroup
 msgctxt "#30140"
 msgid "Radio bouquet 2"
-msgstr ""
+msgstr "Bouquet radio 2"
 
 #. label: Channels - threeradiogroup
 msgctxt "#30141"
 msgid "Radio bouquet 3"
-msgstr ""
+msgstr "Bouquet radio 3"
 
 #. label: Channels - fourradiogroup
 msgctxt "#30142"
 msgid "Radio bouquet 4"
-msgstr ""
+msgstr "Bouquet radio 4"
 
 #. label: Channels - fiveradiogroup
 msgctxt "#30143"
 msgid "Radio bouquet 5"
-msgstr ""
+msgstr "Bouquet radio 5"
 
 #. label: Advanced - ignoredebug
 msgctxt "#30144"
 msgid "No addon debug logging in Kodi debug mode"
-msgstr ""
+msgstr "Pas de journalisation de débogage de l'extension en mode de débogage Kodi"
 
 #. label-group: Backend - Power Settings
 msgctxt "#30145"
 msgid "Power Settings"
-msgstr ""
+msgstr "Paramètres d'alimentation"
 
 #. label: Backend - wakeonlanmac
 msgctxt "#30146"
 msgid "Wake On LAN MAC"
-msgstr ""
+msgstr "Wake On LAN MAC"
 
 #. label: Timeshift - IPTV
 msgctxt "#30147"
 msgid "IPTV"
-msgstr ""
+msgstr "IPTV"
 
 #. label: Timeshift - timeshiftEnabled
 msgctxt "#30148"
 msgid "Enable timeshift for IPTV streams"
-msgstr ""
+msgstr "Activer le différé pour les flux IPTV"
 
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Utiliser les options de reconnexion http FFmpeg si possible"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
 msgid "Use mpegts MIME type for unknown streams"
-msgstr ""
+msgstr "Utiliser le type MIME mpegts pour les flux inconnus"
 
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Modifier les paramètres inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
 msgid "Retrieve provider name for channels"
-msgstr ""
+msgstr "Récupérer le nom du fournisseur pour les chaînes"
 
 #. label: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30153"
@@ -862,7 +862,7 @@ msgstr "Basé sur le guide, répété"
 #. application: Timers
 msgctxt "#30426"
 msgid "Auto guide-based"
-msgstr "Basé sur le guide, auto."
+msgstr "Basé sur le guide, auto"
 
 #. label-option: Channels - tvfavouritesmode
 #. label-option: Channels - radiofavouritesmode
@@ -875,7 +875,7 @@ msgstr "Désactivé"
 #. application: Timers
 msgctxt "#30431"
 msgid "Record if EPG title differs"
-msgstr "Enregistrer si le titre du guide (EPG) diffère"
+msgstr "Enregistrer si le titre du guide (EPG) diffèrent"
 
 #. application: Timers
 msgctxt "#30432"
@@ -1334,7 +1334,7 @@ msgstr ""
 #. help: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30726"
 msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
-msgstr ""
+msgstr "[\"Ouvrir la boîte de dialogue des paramètres pour inputstream.ffmpegdirect pour modifier le décalage temporel et d'autres paramètres.\"]"
 
 #. help: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30727"
@@ -1350,7 +1350,7 @@ msgstr ""
 #. help-category: advanced
 msgctxt "#30740"
 msgid "This category cotains advanced/expert settings"
-msgstr "Cette catégorie contient les paramètres avancés/experts."
+msgstr "Cette catégorie contient les paramètres avancés/experts"
 
 #. help: Advanced - prependoutline
 msgctxt "#30741"
diff --git a/pvr.vuplus/resources/language/resource.language.hr_hr/strings.po b/pvr.vuplus/resources/language/resource.language.hr_hr/strings.po
index 069551d..c090730 100644
--- a/pvr.vuplus/resources/language/resource.language.hr_hr/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.hr_hr/strings.po
@@ -5,16 +5,17 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Croatian (Croatia) (http://www.transifex.com/projects/p/kodi-main/language/hr_HR/)\n"
-"Language: hr_HR\n"
+"PO-Revision-Date: 2023-01-07 08:39+0000\n"
+"Last-Translator: gogogogi <trebelnik2@gmail.com>\n"
+"Language-Team: Croatian <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/hr_hr/>\n"
+"Language: hr_hr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.15\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -22,11 +23,11 @@ msgstr "Kodi sučelje za Enigma2 set-top box temeljene uređaje"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "VU+ sučelje; podržava stremanje i snimanje TV programa, elektronski programski vodič (EPG)  i vremeski zadano snimanje."
+msgstr "Enigma2 sučelje; podržava strujanje i snimanje TV programa, elektronski programski vodič (EPG) i vremenski zadano snimanje.CR]    [CR]Za dokumentaciju posjetite: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
-msgstr "Ovo je nestabilan softver! Autori nisu ni na koji način odgovorni za neuspjelo snimanje, netočna vremena snimanja, izgubljene sate, ili bilo koje druge nepoželjne učinke..."
+msgstr "Ovo je nestabilan softver! Autori nisu ni na koji način odgovorni za neuspjelo snimanje, netočna vremena snimanja, izgubljene sate, ili bilo koje druge nepoželjne učinke."
 
 #. ##################
 #. settings labels #
@@ -39,7 +40,7 @@ msgstr "Enigma2 naziv računala ili IP adresa"
 #. label: Connection - streamport
 msgctxt "#30002"
 msgid "Streaming port"
-msgstr "Ulaz stremanja"
+msgstr "Ulaz strujanja"
 
 #. label: Connection - user
 msgctxt "#30003"
@@ -64,7 +65,7 @@ msgstr "Ikone"
 #. label-group: General - Program Streams
 msgctxt "#30007"
 msgid "Program Streams"
-msgstr ""
+msgstr "Strujanja programa"
 
 #. label: General - iconpath
 msgctxt "#30008"
@@ -79,7 +80,7 @@ msgstr "Razdoblje nadopune"
 #. label: Timers - timerlistcleanup
 msgctxt "#30011"
 msgid "Automatic timerlist cleanup"
-msgstr "Automatsko čišćenje popisa zadanih snimanja"
+msgstr "Automatsko uklanjanje popisa zadanih snimanja"
 
 #. label: Connection - webport
 msgctxt "#30012"
@@ -94,7 +95,7 @@ msgstr "Isključi prije promjene programa (za uređaje s jednim prijemnikom)"
 #. label: Channels - setprogramid
 msgctxt "#30014"
 msgid "Set program id for live channel or recorded streams"
-msgstr ""
+msgstr "Postavi id progrma za TV programe uživo ili snimljena strujanja"
 
 #. label: General - updateint
 msgctxt "#30015"
@@ -104,12 +105,12 @@ msgstr "Razdoblje nadopune"
 #. label: Channels - usegroupspecificnumbers
 msgctxt "#30016"
 msgid "Use bouquet specific channel numbers from backend"
-msgstr ""
+msgstr "Koristi brojeve programa specifične za buket iz pozadinskog softvera"
 
 #. label: Recordings - onlycurrent
 msgctxt "#30017"
 msgid "Only use current recording path from backend"
-msgstr ""
+msgstr "Samo koristi trenutnu putanju snimanja iz pozadinskog softvera"
 
 #. label-category: general
 #. label-group: Channels
@@ -132,12 +133,12 @@ msgstr "Napredno"
 #. label: Recordings - recordingsrecursive
 msgctxt "#30022"
 msgid "Use recursive listing for recording locations"
-msgstr ""
+msgstr "Koristi rekruzivno popisivanje lokacija snimanja"
 
 #. label: Timers - recordingpath
 msgctxt "#30023"
 msgid "New timer default recording folder"
-msgstr ""
+msgstr "Zadana mapa za novo zakazano snimanje"
 
 #. label: Advanced - powerstatemode
 msgctxt "#30024"
@@ -152,7 +153,7 @@ msgstr "Način dohvata TV buketa"
 #. label: Channels - onetvgroup
 msgctxt "#30026"
 msgid "TV bouquet 1"
-msgstr ""
+msgstr "TV buket 1"
 
 #. label: General - onlinepicons
 msgctxt "#30027"
@@ -172,7 +173,7 @@ msgstr "Omogući automatsko podešavanje za strujanja s programom uživo"
 #. label: Recordings - keepfolders
 msgctxt "#30030"
 msgid "Keep folder structure for recordings"
-msgstr ""
+msgstr "Zadrži strukturu mapa za snimke"
 
 #. label-group: EPG - Seasons and Episodes
 msgctxt "#30031"
@@ -317,7 +318,7 @@ msgstr "Način dohvata radio buketa"
 #. label: Channels - oneradiogroup
 msgctxt "#30059"
 msgid "Radio bouquet 1"
-msgstr ""
+msgstr "Radio buket 1"
 
 #. label-category: timeshift
 #. label-group: Timeshift - Timeshift
@@ -401,7 +402,7 @@ msgstr "Svi buketi"
 #. label-option: Channels - radiogroupmode
 msgctxt "#30075"
 msgid "Some bouquets"
-msgstr ""
+msgstr "Pojedini buketi"
 
 #. label-option: Channels - tvfavouritesmode
 #. label-option: Channels - radiofavouritesmode
@@ -419,7 +420,7 @@ msgstr "Kao posljednji buket"
 #. label-option: Channels - radiogroupmode
 msgctxt "#30078"
 msgid "Favourites bouquet"
-msgstr ""
+msgstr "Omiljeni buket"
 
 #. application: ChannelGroups
 msgctxt "#30079"
@@ -440,7 +441,7 @@ msgstr "nepoznato"
 #. application: Client
 msgctxt "#30082"
 msgid " (Not connected!)"
-msgstr "(Nije povezan!)"
+msgstr " (Nije povezan!)"
 
 #. application: Client
 msgctxt "#30083"
@@ -450,32 +451,32 @@ msgstr "greška dodatka"
 #. label: Recordings - keepfoldersomitlocation
 msgctxt "#30084"
 msgid "Omit location path from recording directory"
-msgstr ""
+msgstr "Izostavi putanju lokacije iz direktorija snimanja"
 
 #. label: Recordings - virtualfolders
 msgctxt "#30085"
 msgid "Group recordings into folders by title"
-msgstr ""
+msgstr "Grupiraj snimanja u mape prema naslovu"
 
 #. label-category: backend
 msgctxt "#30086"
 msgid "Backend"
-msgstr ""
+msgstr "Pozadinski softver"
 
 #. label-group: Backend - Recording Padding
 msgctxt "#30087"
 msgid "Recording Padding"
-msgstr ""
+msgstr "Dodatno vrijeme snimanja"
 
 #. label: Backend - globalstartpaddingstb
 msgctxt "#30088"
 msgid "Global start padding"
-msgstr ""
+msgstr "Globalno dodatno vrijeme prije početka snimanja"
 
 #. label: Backend - globalendpaddingstb
 msgctxt "#30089"
 msgid "Global end padding"
-msgstr ""
+msgstr "Globalno dodatno vrijeme prije završetka snimanja"
 
 #. label-group: Backend - Device Info
 msgctxt "#30090"
@@ -490,12 +491,12 @@ msgstr "WebIf inačica"
 #. label: Backend - autotimertagintags
 msgctxt "#30092"
 msgid "AutoTimer tag in timer tags"
-msgstr ""
+msgstr "Oznaka automatskog zakazanog snimanja u oznakama zakazanog snimanja"
 
 #. label: Backend - autotimernameintags
 msgctxt "#30093"
 msgid "AutoTimer name in timer tags"
-msgstr ""
+msgstr "Naziv automatskog zakazanog snimanja u oznakama zakazanog snimanja"
 
 #. application: Admin
 msgctxt "#30094"
@@ -515,42 +516,42 @@ msgstr "Laž"
 #. label-option: Advanced - powerstatemode
 msgctxt "#30097"
 msgid "Standby"
-msgstr ""
+msgstr "Pripravnost"
 
 #. label-option: Advanced - powerstatemode
 msgctxt "#30098"
 msgid "Deep standby"
-msgstr ""
+msgstr "Duboka pripravnost"
 
 #. label-option: Advanced - powerstatemode
 msgctxt "#30099"
 msgid "Wakeup, then standby"
-msgstr ""
+msgstr "Probudi, zatim pripravnost"
 
 #. label: General - updatemode
 msgctxt "#30100"
 msgid "Update mode"
-msgstr ""
+msgstr "Način nadopune"
 
 #. label-option: General - updatemode
 msgctxt "#30101"
 msgid "Timers and recordings"
-msgstr ""
+msgstr "Zakazana snimanja i snimke"
 
 #. label-option: General - updatemode
 msgctxt "#30102"
 msgid "Timers only"
-msgstr ""
+msgstr "Samo zakazana snimanja"
 
 #. label: General - useopenwebifpiconpath
 msgctxt "#30103"
 msgid "Use OpenWebIf picon path"
-msgstr ""
+msgstr "Koristi OpenWebIf picon putanju"
 
 #. label: Advanced - tracedebug
 msgctxt "#30104"
 msgid "Enable trace logging in debug mode"
-msgstr ""
+msgstr "Omogući zapisivanje praćenja u načinu otklanjanja grešaka"
 
 #. label-group - EPG - Other
 msgctxt "#30105"
@@ -560,58 +561,58 @@ msgstr "Ostalo"
 #. label: EPG - epgdelayperchannel
 msgctxt "#30106"
 msgid "EPG update delay per channel"
-msgstr ""
+msgstr "Odgoda EPG nadopune po programu"
 
 #. label-group: Recordings - Recording EDLs (Edit Decision Lists)
 msgctxt "#30107"
 msgid "Recording EDLs (Edit Decision Lists)"
-msgstr ""
+msgstr "EDL-ovi (Popis odluka uređivanja) snimanja"
 
 #. label: Recordings - enablerecordingedls
 msgctxt "#30108"
 msgid "Enable EDLs support"
-msgstr ""
+msgstr "Omogući EDL podršku"
 
 #. label: Recordings - edlpaddingstart
 msgctxt "#30109"
 msgid "EDL start time padding"
-msgstr ""
+msgstr "EDL dodatno početno vrijeme"
 
 #. label: Recordings - edlpaddingstop
 msgctxt "#30110"
 msgid "EDL stop time padding"
-msgstr ""
+msgstr "EDL dodatno završno vrijeme"
 
 #. label: Advanced - debugnormal
 msgctxt "#30111"
 msgid "Enable debug logging in normal mode"
-msgstr ""
+msgstr "Omogući zapisivanje otklanjanja grešaka u normalnom načinu"
 
 #. application: ChannelGroups
 msgctxt "#30112"
 msgid "Last Scanned (TV)"
-msgstr ""
+msgstr "Posljednja pretraga (TV)"
 
 #. application: ChannelGroups
 msgctxt "#30113"
 msgid "Last Scanned (Radio)"
-msgstr ""
+msgstr "Posljednja pretraga (Radio)"
 
 #. label: Channels - excludelastscannedtv
 #. label: Channels - excludelastscannedradio
 msgctxt "#30114"
 msgid "Exclude last scanned bouquet"
-msgstr ""
+msgstr "Izuzmi posljednji pretraženi buket"
 
 #. label: EPG - skipinitialepg
 msgctxt "#30115"
 msgid "Skip Initial EPG Load"
-msgstr ""
+msgstr "Preskoči početno EPG učitavanje"
 
 #. label: General - channelandgroupupdatemode
 msgctxt "#30116"
 msgid "Channels and groups update mode"
-msgstr ""
+msgstr "Način nadopune programa i grupa"
 
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30117"
@@ -621,203 +622,203 @@ msgstr "Onemogućeno"
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30118"
 msgid "Notify on UI and Log"
-msgstr ""
+msgstr "Obavijesti pri korisničkom sučelju i prijavi"
 
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30119"
 msgid "Reload Channels and Groups"
-msgstr ""
+msgstr "Ponovno učitaj programe i grupe"
 
 #. label: General - channelandgroupupdatehour
 msgctxt "#30120"
 msgid "Channels and groups update hour (24h)"
-msgstr ""
+msgstr "Sat nadopune programa i grupa (24 sata)"
 
 #. label: Connection - connectionchecktimeout
 msgctxt "#30121"
 msgid "Connection check timeout"
-msgstr ""
+msgstr "Istek provjere povezivanja"
 
 #. label: Connection - connectioncheckinterval
 msgctxt "#30122"
 msgid "Connection check interval"
-msgstr ""
+msgstr "Razdoblje provjere povezivanja"
 
 #. label: Timers - Autotimers
 msgctxt "#30123"
 msgid "Autotimers"
-msgstr ""
+msgstr "Automatska zakazana snimanja"
 
 #. label: Timers - limitanychannelautotimers
 msgctxt "#30124"
 msgid "Limit 'Any Channel' autotimers to TV or Radio"
-msgstr ""
+msgstr "Ograniči 'Bilo koji program' zakazana snimanja na TV ili Radio"
 
 #. label: Timers - limitanychannelautotimerstogroups
 msgctxt "#30125"
 msgid "Limit to groups of original EPG channel"
-msgstr ""
+msgstr "Ograniči na grupu izvornog EPG programa"
 
 #. label: Channels - usestandardserviceref
 msgctxt "#30126"
 msgid "Use standard channel service reference"
-msgstr ""
+msgstr "Koristi standardu preporuku usluge programa"
 
 #. label: Recordings - storeextrarecordinginfo
 msgctxt "#30127"
 msgid "Store last played/play count on the backend"
-msgstr ""
+msgstr "Spremi posljednji broj reproducirani/reprodukcija na pozadinskom softveru"
 
 #. label: Recordings - sharerecordinglastplayed
 msgctxt "#30128"
 msgid "Share last played across:"
-msgstr ""
+msgstr "Dijeli posljednju reprodukciju diljem:"
 
 #. label-option: Recordings - sharerecordinglastplayed
 msgctxt "#30129"
 msgid "Kodi instances"
-msgstr ""
+msgstr "Kodi primjerci"
 
 #. label-option: Recordings - sharerecordinglastplayed
 msgctxt "#30130"
 msgid "Kodi/E2 instances"
-msgstr ""
+msgstr "Kodi/E2 primjerci"
 
 #. label-option: Channels - tvgroupmode
 #. label-option: Channels - radiogroupmode
 msgctxt "#30131"
 msgid "Custom bouquets"
-msgstr ""
+msgstr "Prilagođeni buketi"
 
 #. label: Channels - customtvgroupsfile
 msgctxt "#30132"
 msgid "Custom TV bouquets file"
-msgstr ""
+msgstr "Prilagođena datoteka TV buketa"
 
 #. label: Channels - customradiogroupsfile
 msgctxt "#30133"
 msgid "Custom Radio bouquets file"
-msgstr ""
+msgstr "Prilagođena datoteka Radio buketa"
 
 #. label: Channels - numtvgroups
 msgctxt "#30134"
 msgid "Number of TV bouquets"
-msgstr ""
+msgstr "Broj TV buketa"
 
 #. label: Channels - twotvgroup
 msgctxt "#30135"
 msgid "TV bouquet 2"
-msgstr ""
+msgstr "TV buket 2"
 
 #. label: Channels - threetvgroup
 msgctxt "#30136"
 msgid "TV bouquet 3"
-msgstr ""
+msgstr "TV buket 3"
 
 #. label: Channels - fourtvgroup
 msgctxt "#30137"
 msgid "TV bouquet 4"
-msgstr ""
+msgstr "TV buket 4"
 
 #. label: Channels - fivetvgroup
 msgctxt "#30138"
 msgid "TV bouquet 5"
-msgstr ""
+msgstr "TV buket 5"
 
 #. label: Channels - numradiogroups
 msgctxt "#30139"
 msgid "Number of radio bouquets"
-msgstr ""
+msgstr "Broj radio buketa"
 
 #. label: Channels - tworadiogroup
 msgctxt "#30140"
 msgid "Radio bouquet 2"
-msgstr ""
+msgstr "Radio buket 2"
 
 #. label: Channels - threeradiogroup
 msgctxt "#30141"
 msgid "Radio bouquet 3"
-msgstr ""
+msgstr "Radio buket 3"
 
 #. label: Channels - fourradiogroup
 msgctxt "#30142"
 msgid "Radio bouquet 4"
-msgstr ""
+msgstr "Radio buket 4"
 
 #. label: Channels - fiveradiogroup
 msgctxt "#30143"
 msgid "Radio bouquet 5"
-msgstr ""
+msgstr "Radio buket 5"
 
 #. label: Advanced - ignoredebug
 msgctxt "#30144"
 msgid "No addon debug logging in Kodi debug mode"
-msgstr ""
+msgstr "Nema zapisa otklanjanja grešaka dodatka u Kodi načinu otklanjanja grešaka"
 
 #. label-group: Backend - Power Settings
 msgctxt "#30145"
 msgid "Power Settings"
-msgstr ""
+msgstr "Postavke energije"
 
 #. label: Backend - wakeonlanmac
 msgctxt "#30146"
 msgid "Wake On LAN MAC"
-msgstr ""
+msgstr "Probudi putem LAN-a MAC"
 
 #. label: Timeshift - IPTV
 msgctxt "#30147"
 msgid "IPTV"
-msgstr ""
+msgstr "IPTV"
 
 #. label: Timeshift - timeshiftEnabled
 msgctxt "#30148"
 msgid "Enable timeshift for IPTV streams"
-msgstr ""
+msgstr "Omogući vremensko premotavanje za IPTV strujanja"
 
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Koristi FFmpeg http mogućnost ponovnog povezivanja ako je dostupna"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
 msgid "Use mpegts MIME type for unknown streams"
-msgstr ""
+msgstr "Koristi mpegts MIME vrste za nepoznata strujanja"
 
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Promijeni inputstream.ffmpegdirect postavke..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
 msgid "Retrieve provider name for channels"
-msgstr ""
+msgstr "Preuzmi naziv pružatelja usluge za programe"
 
 #. label: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30153"
 msgid "Enable timeshift disk limit"
-msgstr ""
+msgstr "Omogući diskovno ograničenje vremenskog premotavanja"
 
 #. label: Timeshift - timeshiftdisklimit
 msgctxt "#30154"
 msgid "Timeshift disk limit"
-msgstr ""
+msgstr "Diskovno ograničenje vremenskog premotavanja"
 
 #. format-label: Timeshift - timeshiftdisklimit
 msgctxt "#30155"
 msgid "{0:.1f} GiB"
-msgstr ""
+msgstr "{0:.1f} GiB"
 
 #. label-group: Recordings - Recording Paths
 msgctxt "#30157"
 msgid "Recording Paths"
-msgstr ""
+msgstr "Putanje snimanja"
 
 #. label-group: Recordings - Recording Locations
 msgctxt "#30158"
 msgid "Recording Locations"
-msgstr ""
+msgstr "Lokacije snimanja"
 
 #. ##############
 #. application #
@@ -831,37 +832,37 @@ msgstr "Automatski"
 #. application: Timers
 msgctxt "#30420"
 msgid "Once off timer (auto)"
-msgstr ""
+msgstr "Jednom kada se isključi zakazano snimanje (automatski)"
 
 #. application: Timers
 msgctxt "#30421"
 msgid "Once off timer (repeating)"
-msgstr ""
+msgstr "Jednom kada se isključi zakazano snimanje (ponavljajuće)"
 
 #. application: Timers
 msgctxt "#30422"
 msgid "Once off timer (channel)"
-msgstr ""
+msgstr "Jednom kada se isključi zakazano snimanje (program)"
 
 #. application: Timers
 msgctxt "#30423"
 msgid "Repeating time/channel based"
-msgstr ""
+msgstr "Ponovljeno vrijeme/Temeljeno programom"
 
 #. application: Timers
 msgctxt "#30424"
 msgid "One time guide-based"
-msgstr ""
+msgstr "Jednom temeljeno EPG vodičem"
 
 #. application: Timers
 msgctxt "#30425"
 msgid "Repeating guide-based"
-msgstr ""
+msgstr "Ponavljajuće temeljeno EPG vodičem"
 
 #. application: Timers
 msgctxt "#30426"
 msgid "Auto guide-based"
-msgstr ""
+msgstr "Automatski temeljeno EPG vodičem"
 
 #. label-option: Channels - tvfavouritesmode
 #. label-option: Channels - radiofavouritesmode
@@ -879,12 +880,12 @@ msgstr "Snimi ako se EPG naslov razlikuje"
 #. application: Timers
 msgctxt "#30432"
 msgid "Record if EPG title and short description differs"
-msgstr ""
+msgstr "Snimi ako se EPG naslov i karatak opis razlikuju"
 
 #. application: Timers
 msgctxt "#30433"
 msgid "Record if EPG title and all descriptions differ"
-msgstr ""
+msgstr "Snimi ako se EPG naslov i sav opis razlikuje"
 
 #. ################
 #. notifications #
@@ -897,43 +898,43 @@ msgstr "Putanja međuspremnika premotavanja u vremenu ne postoji"
 #. notification: Enigma2
 msgctxt "#30515"
 msgid "Enigma2: Could not reach web interface"
-msgstr ""
+msgstr "Enigma2: Nemoguć doseg web sučelja"
 
 #. notification: Enigma2
 msgctxt "#30516"
 msgid "Enigma2: No channel groups found"
-msgstr ""
+msgstr "Enigma2: Nema pronađenih grupa programa"
 
 #. notification: Enigma2
 msgctxt "#30517"
 msgid "Enigma2: No channels found"
-msgstr ""
+msgstr "Enigma2: Nema pronađenih programa"
 
 #. notification: Enigma2
 msgctxt "#30518"
 msgid "Enigma2: Channel group changes detected, please restart to load changes"
-msgstr ""
+msgstr "Enigma2: Otkrivene su promjene grupa programa, ponovno pokrenite za učitavanje promjena"
 
 #. notification: Enigma2
 msgctxt "#30519"
 msgid "Enigma2: Channel changes detected, please restart to load changes"
-msgstr ""
+msgstr "Enigma2: Otkrivene su promjene programa, ponovno pokrenite za učitavanje promjena"
 
 #. application: AutoTimer
 #. application: Timer
 msgctxt "#30520"
 msgid "Invalid Channel"
-msgstr ""
+msgstr "Nevaljani program"
 
 #. notification: Enigma2
 msgctxt "#30521"
 msgid "Enigma2: Channel group changes detected, reloading..."
-msgstr ""
+msgstr "Enigma2: Otkrivene su promjene grupa programa, ponovno učitavanje..."
 
 #. notification: Enigma2
 msgctxt "#30522"
 msgid "Enigma2: Channel changes detected, reloading..."
-msgstr ""
+msgstr "Enigma2: Otkrivene su promjene programa, ponovno učitavanje..."
 
 # empty strings from id 30523 to 30599
 #. ############
@@ -943,136 +944,136 @@ msgstr ""
 #. help-category: connection
 msgctxt "#30600"
 msgid "This category cotains the settings for connecting to the Enigma2 device"
-msgstr ""
+msgstr "Kategorija sadrži postavku za povezivanje s Enigma2 uređajem"
 
 #. help: Connection - host
 msgctxt "#30601"
 msgid "The IP address or hostname of your enigma2 based set-top box."
-msgstr ""
+msgstr "IP adresa ili naziv računala vašeg Enigma2 temeljenog set-top boxa."
 
 #. help: Connection - webport
 msgctxt "#30602"
 msgid "The port used to connect to the web interface."
-msgstr ""
+msgstr "Ulaz koji se koristi za povezivanje s web sučeljem."
 
 #. help: Connection - use_secure
 msgctxt "#30603"
 msgid "Use https to connect to the web interface."
-msgstr ""
+msgstr "Koristi https za povezivanje s web sučeljem."
 
 #. help: Connection - user
 msgctxt "#30604"
 msgid "If the webinterface of the set-top box is protected with a username/password combination this needs to be set in this option."
-msgstr ""
+msgstr "Ako je web sučelje set-top boxa zaštićenom kombinacijom korisničkog imena/lozinke ovo mora biti postavljeno u ovoj mogućnosti."
 
 #. help: Connection - pass
 msgctxt "#30605"
 msgid "If the webinterface of the set-top box is protected with a username/password combination this needs to be set in this option."
-msgstr ""
+msgstr "Ako je web sučelje set-top boxa zaštićenom kombinacijom korisničkog imena/lozinke ovo mora biti postavljeno u ovoj mogućnosti."
 
 #. help: Connection - autoconfig
 msgctxt "#30606"
 msgid "When enabled the stream URL will be read from an M3U8 file. When disabled it is constructed based on the service reference of the channel. This option is rarely required and should not be enbaled unless you have a special use case. If viewing an IPTV Stream this option has no effect on those channels."
-msgstr ""
+msgstr "WKada je omogućeno URL strujanje će biti učitano iz M3U8 datoteke. Kada je onemogućeno konstruirano je temeljeneo na preporuci usluge programa. Ova mogućnost se rijetko zahtijevai ne treba se omogućiti osim u posebnim slučajevima. Ako gledate IPTV strujanje ova mogućnost nema efekta na te programe."
 
 #. help: Connection - streamport
 msgctxt "#30607"
 msgid "This option defines the streaming port the set-top box uses to stream live tv. The default is 8001 which should be fine if the user did not define a custom port within the webinterface."
-msgstr ""
+msgstr "Ova mogućnost određuje ulaz strujanja koji set-top box koristi za strujanje emitiranja uživo. Zadan je 8001 koji bi trebao biti ispravan osim ako korisnik nije odredio prilagođeni ulaz u web sučelju."
 
 #. help: Connection - use_secure_stream
 msgctxt "#30608"
 msgid "Use https to connect to streams."
-msgstr ""
+msgstr "Koristi https za povezivanje s strujanjima."
 
 #. help: Connection - use_login_stream
 msgctxt "#30609"
 msgid "Use the login username and password for streams."
-msgstr ""
+msgstr "Koristi korisničko ime i lozinku za strujanja."
 
 #. help: Connection - connectionchecktimeout
 msgctxt "#30610"
 msgid "The value in seconds to wait for a connection check to complete before failure. Useful for tuning on older Enigma2 devices. Note, this setting should rarely need to be changed. It's more likely the `Connection check interval` setting will have the desired effect. Default is 30 seconds."
-msgstr ""
+msgstr "Vrijednost u sekundama za čekanje provjere povezivanja za završetak prije neuspjeha. Korisno za pretragu programa na starijim Enigma2 uređajima. Zapamtite, ova postavka bi se trebala rijetko mijenjati. Najverojatnije će `Razdoblje provjere povezivanja` postavka imati željeni efekt. Zadano je 30 sekundi."
 
 #. help: Connection - connectioncheckinterval
 msgctxt "#30611"
 msgid "The value in seconds to wait between connection checks. Useful for tuning on older Enigma2 devices. Default is 10 seconds."
-msgstr ""
+msgstr "Vrijednost u čekanja sekundama između provjera povezivanja. Korisno za pretragu progrma na starijim Enigma2 uređajima. Zadano je 10 sekundi."
 
 # empty strings from id 30612 to 30619
 #. help info - General
 #. help-category: general
 msgctxt "#30620"
 msgid "This category cotains the settings whivh generally need to be set by the user"
-msgstr ""
+msgstr "Ova kategorija sadrži postavke koje općenito treba postaviti korisnik"
 
 #. help: General - onlinepicons
 msgctxt "#30621"
 msgid "Fetch the picons straight from the Enigma 2 set-top box."
-msgstr ""
+msgstr "Preuzmi picone izravno s Enigma2 set-top boxa."
 
 #. help: General - useopenwebifpiconpath
 msgctxt "#30622"
 msgid "Fetch the picon path from OpenWebIf instead of constructing from ServiceRef. Requires OpenWebIf 1.3.5 or higher. There is no effect if used on a lower version of OpenWebIf."
-msgstr ""
+msgstr "Preuzmi picon putanju iz OpenWebIf umjesto konstrukcije iz ServiceRef. Zahtijeva OpenWebIf 1.3.5 ili noviji. Nema efekta ako se koristi manja inačica OpenWebIfa."
 
 #. help: General - usepiconseuformat
 msgctxt "#30623"
 msgid "Assume all picons files fetched from the set-top box start with '1_1_1_' and end with '_0_0_0'."
-msgstr ""
+msgstr "Pretpostavi da sve datoteke picona preuzete sa set-top boxa počinju sa '1_1_1_' i završavaju sa '_0_0_0'."
 
 #. help: General - iconpath
 msgctxt "#30624"
 msgid "In order to have Kodi display channel logos you have to copy the picons from your set-top box onto your OpenELEC machine. You then need to specify this path in this property."
-msgstr ""
+msgstr "Kako bi imali prikaz Kodi logotipa programa morate kopirati picone iz vašeg set-top boxa na vaš OpenELEC uređaj. Tada morate odrediti ovu putanju u ovom svojstvu."
 
 #. help: General - updateint
 msgctxt "#30625"
 msgid "As the set-top box can also be used to modify timers, delete recordings etc. and the set-top box does not notify the Kodi installation, the addon needs to regularly check for updates (new channels, new/changed/deletes timers, deleted recordings, etc.) This property defines how often the addon checks for updates. Please note that updating the recordings frequently can keep your receiver and it's harddisk from entering standby automatically."
-msgstr ""
+msgstr "Pošto se set-top box može koristiti za promjenu zakazanih snimanja, brisanje snimaka itd. i set-top box ne obavještava Kodi instalaciju, dodatak treba redovito provjeravati nadopune (novi programi, nova/promijenjena/obrisana zakazana snimanja, obrisane snimke, itd.) Ovo svojstvo određuje učestalost provjere nadopune. Zapamtite da česta nadopuna snimaka može spriječiti vaš prijemnik i njegov čvrsti disk od ulaska u pripravnost."
 
 #. help: General - updatemode
 msgctxt "#30626"
 msgid "The mode used when the update interval is reached. Note that if there is any timer change detected a recordings update will always occur regardless of the update mode. Choose from one of the following two modes: [B]Timers and Recordings[/B] Update all timers and recordings; [B]Timers only[/B] Only update the timers. If it's important to not spin up the HDD on your STB use this option. The HDD should then only spin up when a timer event occurs."
-msgstr ""
+msgstr "Način koji se koristi kada je razdoblje nadopune dosegnuto. Zapamtite ako je otkrivena bilo kakva promjena zakazanog snimanja nadopuna snimki će uvijek nastati unatoč načinu nadopune. Odaberite jednu od sljedeća dva načina: [B]Zakazana snimanja i snimke[/B] Nadopuni sva zakazana snimanja i snimke; [B]Samo zakazana snimanja[/B] nadopuni samo zakazana snimanja. Ako je ovo potrebno da se ne okreće HDD na vašem STB koristite ovu mogućnost. HDD bi se trebao okretati samo kada nastane događaj zakazanog snimanja."
 
 #. help: General - channelandgroupupdatemode
 msgctxt "#30627"
 msgid "The mode used when the hour in the next settings is reached. Choose from one of the following three modes: [B]Disabled[/B] Never check for channel and group changes; [B]Notify on UI and Log[/B] Display a notice in the UI and log the fact that a change was detectetd[/B]; [B]Reload Channels and Groups[/B] Disconnect and reconnect with E2 device to reload channels only if a change is detected."
-msgstr ""
+msgstr "Način koji se koristi kada je sat u sljedećoj postavci dosegnut. Odaberite jedan od sljedeća tri načina: [B]Onemogućeno[/B] Nikada ne provjeravaj promjene grupa i programa; [B]Obavijesti pri korisničkom sučelju i prijavi[/B] Prikaži obavijest u korisničkom sučelju, zapisu i činjenicu da je promjena otkrivena[/B]; [B]Ponovno učitaj programe i grupe[/B] Prekini povezivanje i ponovno poveži s E2 uređajem za ponovno učitavanje programa samo ako je promjena otkrivena."
 
 #. help: General - channelandgroupupdatehour
 msgctxt "#30628"
 msgid "The hour of the day when the check for new channels should occur. Default is 4h as the Auto Bouquet Maker (ABM) on the E2 device defaults to 3AM."
-msgstr ""
+msgstr "Sat u danu kada se treba pokrenuti provjera novih programa. Zadano je 4h kao Automatski stvaratelj buketa (ABM) na E2 uređaju zadano na 3 sati."
 
 #. help: Channels - setprogramid
 msgctxt "#30629"
 msgid "Some TV Providers (e.g. Nos - Portugal) using MPTS send extra program stream information. Setting the program id allows kodi to select the correct stream and therefore makes the channel/recording playable. Note that it takes approx 33% longer to open any stream with this option enabled."
-msgstr ""
+msgstr "Pojedini TV pružatelji usluge (npr. Nos - Portugal) koriste MPTS slanje dodatnih informacija strujanja programa. Postavljanje id programa dopušta Kodiju da odabere ispravno strujanje i čini moguću reprodukciju programa/snimki. Zapamtite da traje približno 33% dulje otvaranje strujanja s omogućenom ovom mogućnosti."
 
 # empty strings from id 30630 to 30639
 #. help info - Channels
 #. help-category: channels
 msgctxt "#30640"
 msgid "This category cotains the settings for channels. When changing bouquets you may need to clear the channel cache to the settings to take effect. You can do this by going to the following in Kodi settings: 'Settings->PVR & Live TV->General->Clear cache'."
-msgstr ""
+msgstr "Ova kategorija sadrži postavke za programe. Kada mijenjate bukete možda trebate ukloniti predmemoriju programa u postavkama kako bi imalo efekta. To možete učiniti u sljedećim Kodi postavkama: 'Postavke->PVR i televizija->Općenito->Obriši podatke'."
 
 #. help: Channels - usestandardserviceref
 msgctxt "#30641"
 msgid "Usually service reference's for the channels are in a standard format like '1:0:1:27F6:806:2:11A0000:0:0:0:'. On occasion depending on provider they can be extended with some text e.g. '1:0:1:27F6:806:2:11A0000:0:0:0::UTV' or '1:0:1:27F6:806:2:11A0000:0:0:0::UTV + 1'. If this option is enabled then all read service reference's will be read as standard. This is default behaviour. Functionality like autotimers will always convert to a standard reference."
-msgstr ""
+msgstr "Uobičajeno preporuke usluge za programe su u standardnom formatu poput '1:0:1:27F6:806:2:11A0000:0:0:0:'. Povremeno ovisno o pružatelju usluge mogu bit proširene određenim tekstom npr. '1:0:1:27F6:806:2:11A0000:0:0:0::UTV' ili '1:0:1:27F6:806:2:11A0000:0:0:0::UTV + 1'. Ako je ova mogućnost omogućena tada će se sve preporuke čitanja usluge biti čitane kao standardan format. Ovo je zadano ponašanje. Funkcionalnosti poput automatskih zakazanih snimanja će se uvijek pretvoriti u standardnu preporuku."
 
 #. help: Channels - zap
 msgctxt "#30642"
 msgid "When using the addon with a single tuner box it may be necessary that the addon needs to be able to zap to another channel on the set-top box. If this option is enabled each channel switch in Kodi will also result in a channel switch on the set-top box. Please note that [B]allow channel switching[/B] needs to be enabled in the webinterface on the set-top box."
-msgstr ""
+msgstr "Kada se koristi dodatak s jednim prijemnikom možda je potrebno da dodatak treba imati mogućnost prebacivanja na drugi program u set-top boxu. Ako je ova mogućnost omogućena svako prebacivanje programa u Kodiju će rezultirati prebacivanjem programa na set-top boxu. Zapamtite da [B]dopuštanje prebacivanja programa[/B] treba biti omogućeno u web sučelju u set-top boxu."
 
 #. help: Channels - tvgroupmode
 msgctxt "#30643"
 msgid "Choose from one of the following three modes: [B]All bouquets[/B] Fetch all TV bouquets from the set-top box; [B]Some bouquets[/B] Only fetch the bouquets specified in the next options; [B]Favourites group[/B] Only fetch the system bouquet for TV favourites; [B]Custom groups[/B] Fetch a set of bouquets from the Set-top box whose names are loaded from an XML file."
-msgstr ""
+msgstr "Odaberite jedan od sljedećih načina: [B]Svi buketi[/B] Preuzima sve TV bukete iz set-top boxa; [B]Pojedini buketi[/B] Samo preuzima bukete određene u sljedećim mogućnostima; [B]Omiljena grupa[/B] Samo preuzima bukete sustava za omiljeni TV; [B]Prilagođena grupa[/B] Preuzima skup buketa iz Set-top boxa čiji su nazivi učitani iz XML datoteke."
 
 #. help: Channels - onetvgroup
 #. help: Channels - twotvgroup
@@ -1081,22 +1082,22 @@ msgstr ""
 #. help: Channels - fivetvgroup
 msgctxt "#30644"
 msgid "If the previous option has been has been set to 'Some bouquets' you need to specify a TV bouquet to be fetched from the set-top box. Please note that this is the bouquet-name as shown on the set-top box (i.e. 'Favourites (TV)'). This setting is case-sensitive."
-msgstr ""
+msgstr "Ako je prijašnja mogućnost postavljena na 'Pojedini buketi' morate odrediti TV buket koji treba preuzeti sa set-top boxa. Zapamtite da je to bouquet-name kao što je prikazano u set-top boxu (npr. 'Omiljeni (TV)'). Ova mogućnost je osjetljiva na mala i velika slova."
 
 #. help: Channels - tvfavouritesmode
 msgctxt "#30645"
 msgid "If the fetch mode is 'All bouquets' or 'Some bouquets' depending on your Enigma2 image you may need to explicitly fetch favourites if you require them. The options are: [B]Disabled[/B] Don't explicitly fetch TV favourites; [B]As first bouquet[/B] Explicitly fetch them as the first bouquet; [B]As last bouquet[/B] Explicitly fetch them as the last bouquet."
-msgstr ""
+msgstr "Ako je način preuzimanja 'Svi buketi' ili 'Pojedini buketi' ovisno o vašoj Enigma2 slici, možda trebate izričito preuzeti omiljene ako su potrebni. Mogućnosti su: [B]Onemogućeno[/B] Ne preuzimaj izričito omiljeni TV; [B]Kao prvi buket[/B] Izričito ih preuzmi kako prvi buket; [B]Kao posljednji buket[/B] Izričito ih preuzmi kako posljednji buket."
 
 #. help: Channels - excludelastscannedtv
 msgctxt "#30646"
 msgid "Last scanned is a system bouquet containing all the TV and Radio channels found in the last scan. Any TV channels found in the Last Scanned bouquet can be displayed as a group called 'Last Scanned (TV)' in Kodi. For TV this group is excluded by default. Disable this option to exclude this group. Note that if no TV groups are loaded the Last Scanned group for TV will be loaded by default regardless of this setting."
-msgstr ""
+msgstr "Posljednji pretraženi je buket sustava koji sadrži sve TV i Radio programe pronađene pri posljednjoj pretrazi. Svi TV programi pronađeni u posljednjem pretraženom buketu mogu biti prikazani kao grupa nazvana 'Posljednja pretraga (TV)' u Kodiju. Za TV ova grupa je izuzeta po zadanome. Onemogućite ovu mogućnost za izuzimanje ove grupe. Zapamtite da ako nema učitanih grupa, Posljednja pretraga TV grupa će biti učitana po zadanome unatoč ovoj postavki."
 
 #. help: Channels - radiogroupmode
 msgctxt "#30647"
 msgid "Choose from one of the following three modes: [B]All bouquets[/B] Fetch all Radio bouquets from the set-top box[/B]; [B]Some bouquets[/B] Only fetch the bouquets specified in the next options; [B]Favourites group[/B] Only fetch the system bouquet for Radio favourites; [B]Custom groups[/B] Fetch a set of bouquets from the Set-top box whose names are loaded from an XML file."
-msgstr ""
+msgstr "Odaberite jedan od sljedeća tri načina: [B]Svi buketi[/B] Preuzmi sve Radio bukete iz set-top boxa[/B]; [B]Pojedini buketi[/B] Samo preuzmi bukete određene su sljedećim mogućnostima; [B]Omiljena grupa[/B] Samo preuzmi buket sustava za omiljeni Radio; [B]Prilagođena grupa[/B] Preuzmi skup buketa iz Set-top boxa čiji su nazivi učitani iz XML datoteke."
 
 #. help: Channels - oneradiogroup
 #. help: Channels - tworadiogroup
@@ -1105,324 +1106,324 @@ msgstr ""
 #. help: Channels - fiveradiogroup
 msgctxt "#30648"
 msgid "If the previous option has been has been set to 'Some bouquets' you need to specify a Radio bouquet to be fetched from the set-top box. Please note that this is the bouquet-name as shown on the set-top box (i.e. 'Favourites (Radio)'). This setting is case-sensitive."
-msgstr ""
+msgstr "Ako je prijašnja mogućnost postavljena na 'Pojedini buketi' morate odrediti Radio buket koji treba preuzeti sa set-top boxa. Zapamtite da je to bouquet-name kao što je prikazano u set-top boxu (npr. 'Omiljeni (Radio)'). Ova mogućnost je osjetljiva na mala i velika slova."
 
 #. help: Channels - radiofavouritesmode
 msgctxt "#30649"
 msgid "If the fetch mode is 'All bouquets' or 'Some bouquets' depending on your Enigma2 image you may need to explicitly fetch favourites if you require them. The options are: [B]Disabled[/B] Don't explicitly fetch Radio favourites; [B]As first bouquet[/B] Explicitly fetch them as the first bouquet; [B]As last bouquet[/B] Explicitly fetch them as the last bouquet."
-msgstr ""
+msgstr "Ako je način preuzimanja 'Svi buketi' ili 'Pojedini buketi' ovisno o vašoj Enigma2 slici, možda trebate izričito preuzeti omiljene ako su potrebni. Mogućnosti su: [B]Onemogućeno[/B] Ne preuzimaj izričito omiljeni Radio; [B]Kao prvi buket[/B] Izričito ih preuzmi kako prvi buket; [B]Kao posljednji buket[/B] Izričito ih preuzmi kako posljednji buket."
 
 #. help: Channels - excludelastscannedradio
 msgctxt "#30650"
 msgid "Last scanned is a system bouquet containing all the TV and Radio channels found in the last scan. Any Radio channels found in the Last Scanned bouquet can be displayed as a group called 'Last Scanned (Radio)' in Kodi. For Radio this group is excluded by default. Disable this option to show this group."
-msgstr ""
+msgstr "Posljednji pretraženi je buket sustava koji sadrži sve TV i Radio programe pronađene pri posljednjoj pretrazi. Svi Radio programi pronađeni u posljednjem pretraženom buketu mogu biti prikazani kao grupa nazvana 'Posljednja pretraga (Radio)' u Kodiju. Za Radio ova grupa je izuzeta po zadanome. Onemogućite ovu mogućnost za prikaz ove grupe."
 
 #. help: Channels - customtvgroupsfile
 msgctxt "#30651"
 msgid "The file used to load the custom TV bouquets (groups). If no groups can be matched the channel list will default to 'Last Scanned (TV)'. The default file is `customTVGroups-example.xml`."
-msgstr ""
+msgstr "Datoteka koja se koristi za učitavanje prilagođenih TV buketa (grupa). Ako se grupe ne podudaraju s popisom programa, biti će zadano 'Posljednja pretraga (TV)'. Zadana datoteka je `customTVGroups-example.xml`."
 
 #. help: Channels - customradiogroupsfile
 msgctxt "#30652"
 msgid "The file used to load the custom Radio bouquets (groups). If no groups can be matched the channel list will default to 'Last Scanned (Radio)'. The default file is `customRadioGroups-example.xml`."
-msgstr ""
+msgstr "Datoteka koja se koristi za učitavanje prilagođenih Radio buketa (grupa). Ako se grupe ne podudaraju s popisom programa, biti će zadano 'Posljednja pretraga (Radio)'. Zadana datoteka je `customRadioGroups-example.xml`."
 
 #. help: Channels - numtvgroups
 msgctxt "#30653"
 msgid "The number of TV bouquets to load when `Some bouquets` is the selected fetch mode. Up to 5 can be chosen. If more than 5 are required the 'Custom bouquets' fetch mode should be used instead."
-msgstr ""
+msgstr "Broj TV buketa za učitavanje kada je `Pojedini buketi` odabran način preuzimanja. Do 5 se može odabrati. Ako je potrebno više od 5 'Prilagođeni buketi' način preuzimanja se umjesto treba koristiti."
 
 #. help: Channels - numradiogroups
 msgctxt "#30654"
 msgid "The number of Radio bouquets to load when `Some bouquets` is the selected fetch mode. Up to 5 can be chosen. If more than 5 are required the 'Custom bouquets' fetch mode should be used instead."
-msgstr ""
+msgstr "Broj Radio buketa za učitavanje kada je `Pojedini buketi` odabran način preuzimanja. Do 5 se može odabrati. Ako je potrebno više od 5 'Prilagođeni buketi' način preuzimanja se umjesto treba koristiti."
 
 #. help: Channels - usegroupspecificnumbers
 msgctxt "#30655"
 msgid "If this option is enabled then each group in kodi will match the exact channel numbers used on the backend bouquets. If disabled (default) each channel will only have a single backend channel number (first occurence when loaded)."
-msgstr ""
+msgstr "Ako je ova mogućnost omogućena tada će se svaka grupa u kodiju podudarati s istim brojem programa korištenim na buketu pozadinskog softvera. Ako je onemogućeno (zadano) svaki program će imati samo jedan broj iz pozadinskog softvera (prvo pojavljivanje kada se učitava)."
 
 #. help: Channels - retrieveprovidername
 msgctxt "#30656"
 msgid "Retrieve provider name from the backend when fetching channels. Default is enabled but disabling can speed up fetch times on older devices."
-msgstr ""
+msgstr "Preuzmi naziv pružatelja usluge iz pozadinskog softvera pri preuzimanju programa. Omogućeno je po zadanome, ali onemogućavanje može ubrzati preuzimanje vremena na starijim uređajima."
 
 # empty strings from id 30657 to 30659
 #. help info - EPG
 #. help-category: epg
 msgctxt "#30660"
 msgid "This category cotains the settings for EPG (Electronic Programme Guide). Excluding logging missing genre text mappings all other options will require clearing the EPG cache to take effect. This can be done by going to 'Settings->PVR & Live TV->Guide->Clear cache' in Kodi after the addon restarts."
-msgstr ""
+msgstr "Ova kategorija sadrži postavke za EPG (Elektronski programski vodič). Izuzimanje zapisivanja nedostajućih mapiranja teksta žanra, sve ostale mogućnosti će zahtijevati uklanjanje EPG predmemorije kako bi imale efekta. To možete učiniti u sljedećim Kodi postavkama: 'Postavke->PVR i televizija->EPG vodič->Obriši podatke'."
 
 #. help: EPG - extractshowinfoenabled
 msgctxt "#30661"
 msgid "Check the description fields in the EPG data and attempt to extract season, episode and year info where possible. In addtion can also extract properties like new, live and premiere info."
-msgstr ""
+msgstr "Provjeri polja opisa u EPG podacima i pokušaj izdvojiti informacije sezone, epizode i godine gdje je moguće. Kao dodatak može izdvojiti svojstvo poput novo, uživo, i informacije premijere."
 
 #. help: EPG - extractshowinfofile
 msgctxt "#30662"
 msgid "The config used to extract season, episode and year information. The default file is `English-ShowInfo.xml`."
-msgstr ""
+msgstr "Podešavanje koje se koristi za izdvajanje informacija sezone, epizode i godine. Zadana datoteka je `English-ShowInfo.xml`."
 
 #. help: EPG - genreidmapenabled
 msgctxt "#30663"
 msgid "If the genre IDs sent with EPG data from your set-top box are not using the DVB standard, map from these to the DVB standard IDs. Sky UK for instance uses OpenTV, in that case without this option set the genre colouring and text would be incorrect in Kodi."
-msgstr ""
+msgstr "Ako ID-ovi žanra poslani s EPG podacima iz vašeg set-top boxa ne koriste DVB standard, mapiraj iz njih u ID-ove DVB standarda. Sky U.K. na primjer koristi OpenTV, u tome slučaju bez ove mogućnosti postavljanje boje žanra i teksta biti će neispravno u Kodiju."
 
 #. help: EPG - genreidmapfile
 msgctxt "#30664"
 msgid "The config used to map set-top box EPG genre IDs to DVB standard IDs. The default file is `Sky-UK.xml`."
-msgstr ""
+msgstr "Podešavanje korišteno za mapiranje set-top box ID-ova EPG žanra u ID-ove DVB standarda. Zadana datoteka je `Sky-UK.xml`."
 
 #. help: EPG - rytecgenretextmapenabled
 msgctxt "#30665"
 msgid "If you use Rytec XMLTV EPG data this option can be used to map the text genres to DVB standard IDs."
-msgstr ""
+msgstr "Ako koristite Rytec XMLTV EPG podatke ova mogućnost se može koristiti za mapiranje teksta žanra u ID-ove DVB standarda."
 
 #. help: EPG - rytecgenretextmapfile
 msgctxt "#30666"
 msgid "The config used to map Rytec Genre Text to DVB IDs. The default file is `Rytec-UK-Ireland.xml`."
-msgstr ""
+msgstr "Podešavanje korišteno za mapiranje Rytec teksta žanra u DVB ID-ove. Zadana datoteka je `Rytec-UK-Ireland.xml`."
 
 #. help: EPG - logmissinggenremapping
 msgctxt "#30667"
 msgid "If you would like missing genre mappings to be logged so you can report them enable this option. Note: any genres found that don't have a mapping will still be extracted and sent to Kodi as strings. Currently genres are extracted by looking for text between square brackets, e.g. [B]TV Drama[/B], or for major, minor genres using a dot (.) to separate [B]TV Drama. Soap Opera[/B]"
-msgstr ""
+msgstr "Ako želite propustiti mapiranja žanra da budu prijavljena tako da ih možete prijaviti, omogućite ovu mogućnost. Napomena: svaki žanrovi pronađeni da nemaju mapiranja biti će isto izdvojeni i poslani u Kodi kao izraz. Trenutni žanrovi su izdvojeni pretražujući tekst između uglatih zagrada, npr. [B]TV Drama[/B], ili za glavne i sporedne žanrove koristeći točku (.) za odvajanje [B]TV Drama. Sapunica Opera[/B]"
 
 #. help: EPG - epgdelayperchannel
 msgctxt "#30668"
 msgid "For older Enigma2 devices EPG updates can effect streaming quality (such as buffer timeouts). A delay of between 250ms and 5000ms can be introduced to improve quality. Only recommended for older devices. Choose the lowest value that avoids buffer timeouts."
-msgstr ""
+msgstr "Za starije Enigma2 uređaje EPG nadopune mogu imati utjecaja na kvalitetu strujanja (poput trajanja međuspremnika). Odgoda između 250ms i 5000ms može se koristiti za poboljšanje kvalitete. Preporučuje se samo za starije uređaje. Odaberite manju vrijednost koja izbjegava čekanje međuspremnika."
 
 #. help: EPG - skipinitialepg
 msgctxt "#30669"
 msgid "Ignore the intial EPG load (now and next). Enabled by default to prevent crash issues on LibreElec/CoreElec."
-msgstr ""
+msgstr "Zanemari početno EPG učitavanje (trenutno i sljedeće). Omogućeno po zadanome kako bi se spriječili problemi s rušenjem na LibreElecu/CoreElecu."
 
 # empty strings from id 30670 to 30679
 #. help info - Recordings
 #. help-category: recordings
 msgctxt "#30680"
 msgid "This category cotains the settings for recordings"
-msgstr ""
+msgstr "Ova kategorija sadrži postavke za snimanje"
 
 #. help: Recordings - storeextrarecordinginfo
 msgctxt "#30681"
 msgid "Store last played position and count on the backend so they can be shared across kodi instances. Only supported on OpenWebIf version 1.3.6+."
-msgstr ""
+msgstr "Spremi posljednje reporducirani položaj i broj na pozadinskom softveru kako bi se mogli dijeliti na kodi primjercima. Podržano samo na OpenWebIf inačici 1.3.6+."
 
 #. help: Recordings - sharerecordinglastplayed
 msgctxt "#30682"
 msgid "The options are: [B]Kodi instances[/B] Only use the value in kodi and will not affect last played on the E2 device; [B]Kodi/E2 instances[/B] Use the value across kodi and the E2 device so they stay in sync. Last played will be synced with the E2 device once every 5-10 minutes per recording if the PVR menus are in use. Note that only a single kodi instance is required to have this option enabled."
-msgstr ""
+msgstr "Mogućnosti su: [B]Kodi primjerci[/B] Koristi samo vrijednost u kodiju i neće imati utjecaja na posljednju reprodukciju na E2 uređaju; [B]Kodi/E2 primjerci[/B] Koristi vrijednosti diljem kodija i E2 uređaja kako bi ostali usklađeni. Posljednje reproducirano će ostati usklađeno s E2 uređajem jednom svakih 5-10 minuta po snimci ako se koriste PVR izbornici. Zapamtite da je potrebno imati samo jedan kodi primjerak kako bi ova mogućnost bila omogućena."
 
 #. help: Timers - recordingpath
 msgctxt "#30683"
 msgid "Per default the addon does not specify the recording folder in newly created timers, so the default set in the set-top box will be used. If you want to specify a different folder (i.e. because you want all recordings scheduled via Kodi to be stored in a separate folder), then you need to set this option."
-msgstr ""
+msgstr "Po zadanome dodatak ne određuje mapu snimke za novo stvorena zakazana snimanja, stoga zadana postavka iz set-top boxa će se koristiti. Ako želite odrediti drugu mapu (npr. zato jer želite da sva snimanja zakazana putem Kodija budu spremljena u zasebnoj mapi), tada morate postaviti ovu mogućnost."
 
 #. help: Recordings - onlycurrent
 msgctxt "#30684"
 msgid "If this option is not set the addon will fetch all available recordings from all configured paths from the set-top box. If this option is set then it will only list recordings that are stored within the 'current recording path' on the set-top box."
-msgstr ""
+msgstr "Ako ova mogućnost nije postavljena dodatak će preuzeti sva dostupna snimanja sa svih podešenih putanja iz set-top boxa. Ako je ova mogućnost postavljena tada će se samo prikazati snimke koje su spremljene u 'trenutnoj putanji snimanja' na the set-top boxu."
 
 #. help: Recordings - keepfolders
 msgctxt "#30685"
 msgid "If enabled use the real path from the backend to dictate the folder structure."
-msgstr ""
+msgstr "Ako je omogućeno, koristi stvarnu putanju iz pozadinskog softvera za utvrđivanje strukture mape."
 
 #. help: Recordings - enablerecordingedls
 msgctxt "#30686"
 msgid "EDLs are used to define commericals etc. in recordings. If a tool like Comskip is used to generate EDL files enabling this will allow Kodi PVR to use them. E.g. if there is a file called 'my recording.ts' the EDL file should be call 'my recording.edl'. Note: enabling this setting has no effect if the files are not present."
-msgstr ""
+msgstr "EDL-ovi se koriste za utvrđivanje oglašavanja itd. u snimkama. Ako se alat poput Comskipa koristi za stvaranje EDL datoteka, omogućavanje ovog će dopustiti Kodi PVR-u da ih koristi. Npr. ako postoji datoteka naziva 'moja snimka.ts' EDL datoteka bi se trebala zvati 'moja snimka.edl'. Napomena: omogućavanje ove postavke nema utjecaja ako datoteke nisu prisutne."
 
 #. help: Recordings - edlpaddingstart
 msgctxt "#30687"
 msgid "Padding to use at an EDL stop. I.e. use a negative number to start the cut earlier and positive to start the cut later. Default 0."
-msgstr ""
+msgstr "Dodatno vrijeme za korištenje pri EDL završetku. Npr. Koristite negativan broj za početak ranijeg izrezivanja i pozitivan broj za pokretanje kasnijeg izrezivanja. Zadano je 0."
 
 #. help: Recordings - edlpaddingstop
 msgctxt "#30688"
 msgid "Padding to use at an EDL stop. I.e. use a negative number to stop the cut earlier and positive to stop the cut later. Default 0."
-msgstr ""
+msgstr "Dodatno vrijeme za korištenje pri EDL završetku. Npr. Koristite negativan broj za početak ranijeg izrezivanja i pozitivan broj za pokretanje kasnijeg izrezivanja. Zadano je 0."
 
 #. help: Recordings - recordingsrecursive
 msgctxt "#30689"
 msgid "By default only the root of the location will be used to list recordings. When enabled the contents of child folders will be included."
-msgstr ""
+msgstr "Po zadanome se samo koristi korijenska lokacija za prikaz snimaka. Kada je omogućeno prikaz sadržanih mapa će biti obuhvaćen."
 
 #. help: Recordings - keepfoldersomitlocation
 msgctxt "#30690"
 msgid "When using the folder structure from the backend omit the location path from the directory. Useful as it can remove the need to traverse unused folders each time recordings are accessed."
-msgstr ""
+msgstr "Kada se koristi struktura mapa iz pozadinskog softvera izostavi putanju lokacije iz direktorija. Korisno jer može ukloniti potrebu za kretanjem kroz neiskorištene mape svaki put kada se pristupi snimkama."
 
 #. help: Recordings - virtualfolders
 msgctxt "#30691"
 msgid "Create a virtual structure grouping recordings with the same name into folders. Will be applied to all recordings unless keeping the folder structure on the backend. In that case it will only be applied to the recordings in the root of each recording location."
-msgstr ""
+msgstr "Stvori grupiranje virtualne strukture snimaka s istim nazivom u mapama. Biti će primijenjeno na sve snimke dok se ne održi struktura mape na pozadinskom softveru. U tome slučaju biti će samo primijenjena na snimke u korijenu svake lokacije snimanja."
 
 # empty strings from id 30692 to 30699
 #. help info - Timers
 #. help-category: timers
 msgctxt "#30700"
 msgid "This category cotains the settings for timers (regular and auto)"
-msgstr ""
+msgstr "Ova kategorija sadrži postavke za zakazana snimanja (uobičajena i automatska)"
 
 #. help: Timers - enablegenrepeattimers
 msgctxt "#30701"
 msgid "Repeat timers will display as timer rules. Enabling this will make Kodi generate regular timers to match the repeat timer rules so the UI can show what's scheduled and currently recording for each repeat timer."
-msgstr ""
+msgstr "Ponavljajuća zakazana snimanja biti će prikazana kao pravilo zakazanog snimanja. Ovim omogućavanjem Kodi će stvoriti uobičajena pravila zakazanog snimanja tako da se u korisničkom sučelju može prikazati što je trenutno na rasporedu i trenutno se snima za svako pojedino ponavaljajuće zakazano snimanje."
 
 #. help: Timers - numgenrepeattimers
 msgctxt "#30702"
 msgid "The number of Kodi PVR timers to generate."
-msgstr ""
+msgstr "Broj Kodi PVR zakazanih snimanja za stvoriti."
 
 #. help: Timers - timerlistcleanup
 msgctxt "#30703"
 msgid "If this option is set then the addon will send the command to delete completed timers from the set-top box after each update interval."
-msgstr ""
+msgstr "Ako je ova mogućnost postavljena tada će dodatak poslati naredbu za brisanje završenih zakazanih snimanja iz set-top boxa nakon svakog razdoblja osvježavanja."
 
 #. help: Timers - enableautotimers
 msgctxt "#30704"
 msgid "When this is enabled there are some settings required on the set-top box to enable linking of AutoTimers (Timer Rules) to Timers in the Kodi UI. The addon attempts to set these automatically on boot."
-msgstr ""
+msgstr "Kada je ovo omogućeno postoje pojedine postavke potrebne na set-top boxu za omogućavanje povezivanja Automatskih zakazanih snimanja (Pravila zakazanih snimanja) u Zakazanim snimanjima u Kodi korisničkom sučelju. Dodatak ih pokušava postaviti automatski pri pokretanju."
 
 #. help: Timers - limitanychannelautotimers
 msgctxt "#30705"
 msgid "If last scanned groups are excluded attempt to limit new autotimers to either TV or Radio (dependent on channel used to create the autotimer). Note that if last scanned groups are enabled this is not possible and the setting will be ignored."
-msgstr ""
+msgstr "Ako su posljednje pretražene grupe izuzete pokušaj ograničiti nova automatska zakazana snimanja ili na TV ili na Radio (Ovisno o programu koji se koristi za stvaranje automatskog zakazanog snimanja). Zapamtite da ako je posljednja pretražena grupa omogućena ovo nije moguće i postavka će bit zanemarena."
 
 #. help: Timers - limitanychannelautotimerstogroups
 msgctxt "#30706"
 msgid "For the channel used to create the autotimer limit to channel groups that this channel is a member of."
-msgstr ""
+msgstr "Za program korišten za stvaranje ograničenja automatskog zakazanog snimanja na grupe programa kojih je ovaj program član."
 
 # empty strings from id 30707 to 30719
 #. help info - Timeshift
 #. help-category: timeshift
 msgctxt "#30720"
 msgid "This category cotains the settings for timeshift. Timeshifting allows you to pause live TV as well as move back and forward from your current position similar to playing back a recording. The buffer is deleted each time a channel is changed or stopped."
-msgstr ""
+msgstr "Ova kategorija sadrži postavke za vremensko premotavanje. Vremensko premotavanje vam omogućuje pauziranje TV uživo kao i premotavanje unatrag i unaprijed iz vašeg trenutnog položaja, slično kao i kod gledanja snimaka. Međuspremnik se briše svaki puta kada se program promijeni ili zaustavi."
 
 #. help: Timeshift - enabletimeshift
 msgctxt "#30721"
 msgid "What timeshift option do you want: [B]Disabled[/B] No timeshifting; [B]On Pause[/B] Timeshifting starts when a live stream is paused. E.g. you want to continue from where you were at after pausing; [B]On Playback[/B] Timeshifting starts when a live stream is opened. E.g. You can go to any point in the stream since it was opened."
-msgstr ""
+msgstr "Koje mogućnosti vremenskog premotavanja želite: [B]Onemogućeno[/B] Bez vremenskog premotavanja; [B]Pri pauzi[/B] Vremensko premotavanje započinje kada je TV uživo puziran. Npr. želite nastaviti gledanje od gdje ste stali nakon pauze; [B]Pri repordukciji[/B] Vremensko premotavanje započinje kada se započne gledati TV uživo. Npr. možete prestati gledati bilo kada budući da je program u tijeku."
 
 #. help: Timeshift - timeshiftbufferpath
 msgctxt "#30722"
 msgid "The path used to store the timeshift buffer. The default is the `addon_data/pvr.vuplus` folder in userdata."
-msgstr ""
+msgstr "Putanja koja se koristi za spremanje međuspremnika vremenskog premotavanja. Zadana je `addon_data/pvr.vuplus` mapa u userdata."
 
 #. help: Timeshift - timeshiftEnabled
 msgctxt "#30723"
 msgid "Enable the timeshift feature for IPTV streams using inputstream.ffmpegdirect. Note that this feature only works on playback and will ignore the timeshift mode used for regular channel playback."
-msgstr ""
+msgstr "Omogući značajku vremenskog premotavanja za IPTV strujanja koristeći inputstream.ffmpegdirect. Zapamtite da ova značajka radi samo pri reprodukciji i zanemarit će način vremenskog premotavanja korištenog za repordukciju uobičajenih programa."
 
 #. help: Timeshift - useFFmpegReconnect
 msgctxt "#30724"
 msgid "Note this can only apply to http/https streams that are processed by libavformat (e.g. M3u8/HLS)."
-msgstr ""
+msgstr "Zapamtite da se ovo samo primijenjuje na http/https strujanja koja su obrađena libavformat bibliotekom (npr. M3u8/HLS)."
 
 #. help: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30725"
 msgid "If the type of stream cannot be determined assume it's an MPEG TS stream."
-msgstr ""
+msgstr "Ako se vrsta strujanja ne može otkriti pretpostavi da je MPEG TS strujanje."
 
 #. help: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30726"
 msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
-msgstr ""
+msgstr "Otvori dijalog postavki za inputstream.ffmpegdirect za promjenu vremenskog premotavanja i ostalih postavki."
 
 #. help: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30727"
 msgid "For devices with limited disk space a limit in Gigabytes can be set whereby timeshift will be switched off and playback will return to the live stream. Note that for timeshift on playback it will not be possible to timeshift again until a stream is restarted once this limit is reached."
-msgstr ""
+msgstr "Za uređaje s ograničenim diskovnim prostorom ograničenje u Gigabajtima se može postaviti gdje će vremensko premotavanje biti isključeno a reprodukcija će se vratiti na TV uživo. Zapamtite da vremensko premotavanje pri reprodukciji neće biti moguće dok se strujanje ponovno ne pokrene jednom kada se ograničenje dostigne."
 
 #. help: Timeshift - timeshiftdisklimit
 msgctxt "#30728"
 msgid "The disk space limit to use for the timeshift buffer in Gigabytes."
-msgstr ""
+msgstr "Ograničenje diskovnog prostora koji se koristi za međuspremnik vremenskog premotavanje u Gigabajtima."
 
 # empty strings from id 30729 to 30739
 #. help info - Advanced
 #. help-category: advanced
 msgctxt "#30740"
 msgid "This category cotains advanced/expert settings"
-msgstr ""
+msgstr "Ova kategorija sadrži napredne/stručne postavke"
 
 #. help: Advanced - prependoutline
 msgctxt "#30741"
 msgid "By default plot outline (short description on Enigma2) is not displayed in the UI. Can be displayed in EPG, Recordings or both. After changing this option you will need to clear the EPG cache `Settings->PVR & Live TV->Guide->Clear cache` for it to take effect."
-msgstr ""
+msgstr "Po zadanome sadržaj zapleta (kratak opis na Enigma2 uređaju) nije prikazan u korisničkom sučelju. Može biti prikazan u EPG vodiču, Snimkama ili obje. Nakon promjene ove mogućnosti morat ćete obrisati EPG predmemoriju `Postavke->PVR i televizija->Epg vodič->Obriši podatke` kako bi imalo efekta."
 
 #. help: Advanced - powerstatemode
 msgctxt "#30742"
 msgid "If this option is set to a value other than `Disabled` then the addon will send a Powerstate command to the set-top box when Kodi will be closed (or the addon will be deactivated): [B]Disabled[/B] No command sent when the addon exits; [B]Standby[/B] Send the standby command on exit; [B]Deep standby[/B] Send the deep standby command on exit. Note, the set-top box will not respond to Kodi after this command is sent; [B]Wakeup, then standby[/B] Similar to standby but first sends a wakeup command. Can be useful if you want to ensure all streams have stopped. Note: if you use CEC this could cause your TV to wake."
-msgstr ""
+msgstr "Ako je ova mogućnost postavljena na vrijednost drugačiju od `Onemogućeno` tada će dodatak poslati naredbu stanja energije u set-top box kada se Kodi zatvori (ili će se dodatak deaktivirati): [B]Onemogućeno[/B] Neće se poslati naredba kada dodatak postoji; [B]Pripravnost[/B] pošalji naredbu pripravnosti pri izlazu; [B]Duboka pripravnost[/B] Pošalji naredbu duboke pripravnosti pri izlazu. Zapamtite, set-top box neće odgovoriti Kodiju nakon što je ova naredba poslana; [B]Buđenje, zatim pripravnost[/B] slično pripravnosti ali prvo šalje naredbu buđenja. Može biti korisno ako se želite pobrinuti da su sva strujanja zaustavljena. Napomena: ako koristite CEC to može prouzrokovati uključivanje vašeg TV-a."
 
 #. help: Advanced - readtimeout
 msgctxt "#30743"
 msgid "The timemout to use when trying to read live streams. Default for live streams is 0. Default for for timeshifting is 10 seconds."
-msgstr ""
+msgstr "Vrijeme čekanja koje se koristi pri pokušaju čitanja strujanja TV-a uživo. Zadano za strujanja TV-a uživo je 0. Zadano za vremensko premotavanje je 10 sekundi."
 
 #. help: Advanced - streamreadchunksize
 msgctxt "#30744"
 msgid "The chunk size used by Kodi for streams. Default at 0 to leave it to Kodi to decide. Can be useful to set manually when viewing streams remotely where buffering can occur as PVR is optimised for a local network."
-msgstr ""
+msgstr "Veličina djelića koju koristi Kodi za strujanja. Zadano 0 znači da Kodi određuje. Može bit korisno za ručno postavljanje pri gledanju strujanja udaljeno gdje može nastati međuspremanje jer je PVR optimiziran za lokalnu mrežu."
 
 #. help: Advanced - debugnormal
 msgctxt "#30745"
 msgid "Debug log statements will display for the addon even though debug logging may not be enabled in Kodi. Note that all debug log statements will display at NOTICE level."
-msgstr ""
+msgstr "Izjave zapisa otklanjanja grešaka će se prikazati za dodatak čak iako zapisivanje otklanjanja grešaka možda nije omogućeno u Kodiju. Zapamtite da sve izjave zapisa otklanjanja grešaka biti će prikazane na razini OBAVIJESTI."
 
 #. help: Advanced - tracedebug
 msgctxt "#30746"
 msgid "Very detailed and verbose log statements will display in addition to standard debug statements. If enabled along with `Enable debug logging in normal mode` both trace and debug will display without debug logging enabled. In this case both debug and trace log statements will display at NOTICE level."
-msgstr ""
+msgstr "Vrlo opširne izjave zapisa biti će prikazane kao dodatak standardnoj izjavi otklanjanja grešaka. Ako je omogućeno s `Omogući zapisivanje otklanjanja grešaka u normalnom načinu`, oboje praćenje i otklanjanje grešaka biti će prikazani bez da je omogućeno zapisivanje otklanjanja grešaka. U tome slučaju oboje, zapis izjave otklanjanje grešaka i praćenja biti će prikazani na razini OBAVIJESTI."
 
 #. help: Advanced - ignoredebug
 msgctxt "#30747"
 msgid "Debug log statements will not be displayed for the addon even though debug logging is enabled in Kodi. This can be useful when trying to debug an issue in Kodi which is not addon related."
-msgstr ""
+msgstr "Izjava zapisa otklanjanja grešaka neće biti prikazana za dodatak čak iako je zapisivanje otklanjanja grešaka omogućeno u Kodiju. Ovo može biti korisno kada otklanjate greške s problemom u Kodiju koji nije povezan s dodatkom."
 
 # empty strings from id 30748 to 30759
 #. help info - Backend
 #. help-category: backend
 msgctxt "#30760"
 msgid "This category contains information and settings on/about the Enigma2 STB."
-msgstr ""
+msgstr "Ova kategorija sadrži informacije i postavke na/o Enigma2 STB."
 
 #. help: Backend - webifversion
 msgctxt "#30761"
 msgid "webifversion"
-msgstr ""
+msgstr "webif inačica"
 
 #. help: Backend - autotimertagintags
 msgctxt "#30762"
 msgid "autotimertagintags"
-msgstr ""
+msgstr "oznakaautomatskogzakazanogsnimanjauoznacima"
 
 #. help: Backend - autotimernameintags
 msgctxt "#30763"
 msgid "autotimernameintags"
-msgstr ""
+msgstr "nazivautmatskogzakazanogsnimanjauoznacima"
 
 #. help: Backend - globalstartpaddingstb
 msgctxt "#30764"
 msgid "This value reflects the backend setting [B]Margin before recording[/B]. It will be applied to the start of all new regular timers created including those created from Autotimers. Note that if a padding/margin is set on an Autotimer it will be custom for that Autotimer and will override this value."
-msgstr ""
+msgstr "Ova vrijednost utječe na pozadinsku postavku [B]Granica prije snimanja[/B]. Biti će primijenjena na početak svih uobičajenih stvorenih zakazanih snimanja uključujući stvorene Automatskim zakazanim snimanjem. Zapamtite da dodatno vrijeme/granica postavljeno na Automatskom zakazanom snimanju biti će prilagođeno za to Automatsko zakazano snimanje i zaobići će ovu vrijednost."
 
 #. help: Backend - globalendpaddingstb
 msgctxt "#30765"
 msgid "This value reflects the backend setting [B]Margin after recording[/B]. It will be applied to the end of all new regular timers created including those created from Autotimers. Note that if a padding/margin is set on an Autotimer it will be custom for that Autotimer and will override this value."
-msgstr ""
+msgstr "Ova vrijednost utječe na pozadinsku postavku [B]Granica nakon snimanja[/B]. Biti će primijenjena na završetak svih uobičajenih stvorenih zakazanih snimanja uključujući stvorene Automatskim zakazanim snimanjem. Zapamtite da dodatno vrijeme/granica postavljeno na Automatskom zakazanom snimanju biti će prilagođeno za to Automatsko zakazano snimanje i zaobići će ovu vrijednost."
 
 #. label: Backend - wakeonlanmac
 msgctxt "#30766"
 msgid "The MAC address of the Engima2 STB to be used for WoL (Wake On LAN)."
-msgstr ""
+msgstr "MAC adresa Engima2 STB koja se koristi za WoL (Buđenje putem LAN-a)."
 
 #~ msgctxt "#30017"
 #~ msgid "Use only the DVB boxes' current recording path"
diff --git a/pvr.vuplus/resources/language/resource.language.it_it/strings.po b/pvr.vuplus/resources/language/resource.language.it_it/strings.po
index 7bb81d6..7557834 100644
--- a/pvr.vuplus/resources/language/resource.language.it_it/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.it_it/strings.po
@@ -5,29 +5,29 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-06-28 08:29+0000\n"
-"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"PO-Revision-Date: 2023-02-02 10:59+0000\n"
+"Last-Translator: Massimo Pissarello <mapi68@gmail.com>\n"
 "Language-Team: Italian <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/it_it/>\n"
 "Language: it_it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7\n"
+"X-Generator: Weblate 4.15.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
-msgstr "Frontend con Kodi per i settop box basati su VU+ / Enigma2"
+msgstr "Frontend Kodi per ricevitori basati su Enigma2"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "Frontend VU+; supporta EPG, i timer e lo streaming della TV dal vivo e delle registrazioni."
+msgstr "Frontend Enigma2: supporta lo stream e la registrazione di Live TV, EPG, timer, timer automatici. Per la documentazione visita: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
-msgstr "Questo software è instabile! Gli autori non sono in alcun modo responsabile per le fallite registrazioni, timer non corretti, ore perse o qualsiasi altro effetto non desiderato..."
+msgstr "Questo è un software instabile! Gli autori non sono in alcun modo responsabili per registrazioni fallite, timer errati, ore sprecate o qualsiasi altro effetto indesiderato."
 
 #. ##################
 #. settings labels #
@@ -35,13 +35,13 @@ msgstr "Questo software è instabile! Gli autori non sono in alcun modo responsa
 #. label: Connection - host
 msgctxt "#30000"
 msgid "Enigma2 hostname or IP address"
-msgstr ""
+msgstr "Nome host o indirizzo IP di Enigma2"
 
 # empty string with id 30001
 #. label: Connection - streamport
 msgctxt "#30002"
 msgid "Streaming port"
-msgstr ""
+msgstr "Porta streaming"
 
 #. label: Connection - user
 msgctxt "#30003"
@@ -66,38 +66,38 @@ msgstr "Icone"
 #. label-group: General - Program Streams
 msgctxt "#30007"
 msgid "Program Streams"
-msgstr ""
+msgstr "Stream programma"
 
 #. label: General - iconpath
 msgctxt "#30008"
 msgid "Icon path"
-msgstr ""
+msgstr "Percorso icona"
 
 #. label-group: General - Update Interval
 msgctxt "#30009"
 msgid "Update Interval"
-msgstr ""
+msgstr "Intervallo aggiornamento"
 
 # empty string with id 30010
 #. label: Timers - timerlistcleanup
 msgctxt "#30011"
 msgid "Automatic timerlist cleanup"
-msgstr ""
+msgstr "Pulizia automatica elenco timer"
 
 #. label: Connection - webport
 msgctxt "#30012"
 msgid "Web interface port"
-msgstr ""
+msgstr "Porta interfaccia web"
 
 #. label: Channels - zap
 msgctxt "#30013"
 msgid "Zap before channelswitch (i.e. for single tuner boxes)"
-msgstr ""
+msgstr "Zap prima del cambio canale (ricevitori singolo tuner)"
 
 #. label: Channels - setprogramid
 msgctxt "#30014"
 msgid "Set program id for live channel or recorded streams"
-msgstr ""
+msgstr "Imposta ID programma per canale live o stream registrati"
 
 #. label: General - updateint
 msgctxt "#30015"
@@ -107,12 +107,12 @@ msgstr "Intervallo aggiornamento"
 #. label: Channels - usegroupspecificnumbers
 msgctxt "#30016"
 msgid "Use bouquet specific channel numbers from backend"
-msgstr ""
+msgstr "Usa i numeri di canale specifici del bouquet dal backend"
 
 #. label: Recordings - onlycurrent
 msgctxt "#30017"
 msgid "Only use current recording path from backend"
-msgstr ""
+msgstr "Usa solo il percorso di registrazione attuale del backend"
 
 #. label-category: general
 #. label-group: Channels
@@ -135,52 +135,52 @@ msgstr "Avanzate"
 #. label: Recordings - recordingsrecursive
 msgctxt "#30022"
 msgid "Use recursive listing for recording locations"
-msgstr ""
+msgstr "Usa elenco ricorsivo per le posizioni di registrazione"
 
 #. label: Timers - recordingpath
 msgctxt "#30023"
 msgid "New timer default recording folder"
-msgstr ""
+msgstr "Nuova cartella di registrazione predefinita del timer"
 
 #. label: Advanced - powerstatemode
 msgctxt "#30024"
 msgid "Send powerstate mode on addon exit"
-msgstr ""
+msgstr "Invia lo stato di alimentazione all'uscita dall'add-on"
 
 #. label: Channels - tvgroupmode
 msgctxt "#30025"
 msgid "TV bouquet fetch mode"
-msgstr ""
+msgstr "Modalità recupero bouquet TV"
 
 #. label: Channels - onetvgroup
 msgctxt "#30026"
 msgid "TV bouquet 1"
-msgstr ""
+msgstr "TV bouquet 1"
 
 #. label: General - onlinepicons
 msgctxt "#30027"
 msgid "Fetch picons from web interface"
-msgstr ""
+msgstr "Recupera picon dall'interfaccia web"
 
 #. label: Connection - use_secure
 msgctxt "#30028"
 msgid "Use secure HTTP (https)"
-msgstr ""
+msgstr "Usa HTTP sicuro (https)"
 
 #. label: Connection - autoconfig
 msgctxt "#30029"
 msgid "Enable automatic configuration for live streams"
-msgstr "Abilita configurazione automatica per trasmissioni in diretta"
+msgstr "Abilita configurazione automatica per trasmissioni live"
 
 #. label: Recordings - keepfolders
 msgctxt "#30030"
 msgid "Keep folder structure for recordings"
-msgstr ""
+msgstr "Mantieni la struttura delle cartelle per le registrazioni"
 
 #. label-group: EPG - Seasons and Episodes
 msgctxt "#30031"
 msgid "Seasons and Episodes"
-msgstr ""
+msgstr "Stagioni ed episodi"
 
 #. label-category: epg
 msgctxt "#30032"
@@ -190,47 +190,47 @@ msgstr "EPG"
 #. label: EPG - extractshowinfoenabled
 msgctxt "#30033"
 msgid "Extract season, episode and year info where possible"
-msgstr ""
+msgstr "Estrai le informazioni su stagione, episodio e anno ove possibile"
 
 #. label: Timers - enableautotimers
 msgctxt "#30034"
 msgid "Enable autotimers"
-msgstr ""
+msgstr "Abilita timer automatici"
 
 #. label: General - usepiconseuformat
 msgctxt "#30035"
 msgid "Use picons.eu file format"
-msgstr ""
+msgstr "Usa formato file picons.eu"
 
 #. label: Timers - enablegenrepeattimers
 msgctxt "#30036"
 msgid "Enable generate repeat timers"
-msgstr ""
+msgstr "Abilita generazione di timer ripetuti"
 
 #. label: EPG - logmissinggenremapping
 msgctxt "#30037"
 msgid "Log missing genre text mappings"
-msgstr ""
+msgstr "Crea registro mappature di testo di generi mancanti"
 
 #. label-group: Connection - Web Interface
 msgctxt "#30038"
 msgid "Web Interface"
-msgstr ""
+msgstr "Interfaccia web"
 
 #. label-group: Connection - Streaming
 msgctxt "#30039"
 msgid "Streaming"
-msgstr ""
+msgstr "Streaming"
 
 #. label: Advanced - prependoutline
 msgctxt "#30040"
 msgid "Put outline (e.g. sub-title) before plot"
-msgstr ""
+msgstr "Metti il contorno (ad es. il sottotitolo) prima della trama"
 
 #. label: Advanced - streamreadchunksize
 msgctxt "#30041"
 msgid "Stream read chunk size"
-msgstr ""
+msgstr "Dimensione blocco di lettura stream"
 
 #. label - Advanced - prependoutline
 msgctxt "#30042"
@@ -255,27 +255,27 @@ msgstr "Sempre"
 #. label: EPG - extractshowinfofile
 msgctxt "#30046"
 msgid "Extract show info file"
-msgstr ""
+msgstr "Estrai file di informazioni sullo spettacolo"
 
 #. label-group: EPG - Rytec genre text Mappings
 msgctxt "#30047"
 msgid "Rytec genre text Mappings"
-msgstr ""
+msgstr "Mappature testo genere Rytec"
 
 #. label: EPG - rytecgenretextmapenabled
 msgctxt "#30048"
 msgid "Enable Rytec genre text mappings"
-msgstr ""
+msgstr "Abilita mappature testo genere Rytec"
 
 #. label: EPG - rytecgenretextmapfile
 msgctxt "#30049"
 msgid "Rytec genre text mappings file"
-msgstr ""
+msgstr "File mappature testo genere Rytec"
 
 #. label: Advanced - readtimeout
 msgctxt "#30050"
 msgid "Custom live TV timeout (0 to use default)"
-msgstr ""
+msgstr "Timeout Live TV personalizzato (0 è l'impostazione predefinita)"
 
 #. label-group: Connection - Login
 msgctxt "#30051"
@@ -290,17 +290,17 @@ msgstr "Varie"
 #. label-group: EPG - Genre ID Mappings
 msgctxt "#30053"
 msgid "Genre ID Mappings"
-msgstr ""
+msgstr "Mappature genere ID"
 
 #. label: EPG - genreidmapenabled
 msgctxt "#30054"
 msgid "Enable genre ID Mappings"
-msgstr ""
+msgstr "Abilita mappature genere ID"
 
 #. label: EPG - genreidmapfile
 msgctxt "#30055"
 msgid "Genre ID mappings file"
-msgstr ""
+msgstr "File mappature genere ID"
 
 #. label-group: Channels - TV
 msgctxt "#30056"
@@ -315,12 +315,12 @@ msgstr "Radio"
 #. label: Channels - radiogroupmode
 msgctxt "#30058"
 msgid "Radio bouquet fetch mode"
-msgstr ""
+msgstr "Modalità recupero bouquet Radio"
 
 #. label: Channels - oneradiogroup
 msgctxt "#30059"
 msgid "Radio bouquet 1"
-msgstr ""
+msgstr "Radio bouquet 1"
 
 #. label-category: timeshift
 #. label-group: Timeshift - Timeshift
@@ -331,12 +331,12 @@ msgstr "Timeshift"
 #. label: Timeshift - enabletimeshift
 msgctxt "#30061"
 msgid "Enable timeshift"
-msgstr ""
+msgstr "Abilita timeshift"
 
 #. label: Timeshift - timeshiftbufferpath
 msgctxt "#30062"
 msgid "Timeshift buffer path"
-msgstr "Path per il buffer del timeshift"
+msgstr "Percorso buffer timeshift"
 
 #. label-option: Timeshift - enabletimeshift
 msgctxt "#30063"
@@ -356,22 +356,22 @@ msgstr "In pausa"
 #. label: Connection - use_secure_stream
 msgctxt "#30066"
 msgid "Use secure HTTP (https) for streams"
-msgstr ""
+msgstr "Usa HTTP sicuro (https) per lo stream"
 
 #. label: Connection - use_login_stream
 msgctxt "#30067"
 msgid "Use login for streams"
-msgstr ""
+msgstr "Usa il login per gli stream"
 
 #. label: Channels - tvfavouritesmode
 msgctxt "#30068"
 msgid "Fetch TV favourites bouquet"
-msgstr ""
+msgstr "Recupera bouquet dai preferiti della TV"
 
 #. label: Channels - radiofavouritesmode
 msgctxt "#30069"
 msgid "Fetch radio favourites bouquet"
-msgstr ""
+msgstr "Recupera bouquet dai preferiti della Radio"
 
 #. label-category: recordings
 msgctxt "#30070"
@@ -392,118 +392,118 @@ msgstr "Timer"
 #. label: Timers - numgenrepeattimers
 msgctxt "#30073"
 msgid "Number of repeat timers to generate"
-msgstr ""
+msgstr "Numero di ripetizioni dei timer da creare"
 
 #. label-option: Channels - tvgroupmode
 #. label-option: Channels - radiogroupmode
 msgctxt "#30074"
 msgid "All bouquets"
-msgstr ""
+msgstr "Tutti i bouquet"
 
 #. label-option: Channels - tvgroupmode
 #. label-option: Channels - radiogroupmode
 msgctxt "#30075"
 msgid "Some bouquets"
-msgstr ""
+msgstr "Alcuni bouquet"
 
 #. label-option: Channels - tvfavouritesmode
 #. label-option: Channels - radiofavouritesmode
 msgctxt "#30076"
 msgid "As first bouquet"
-msgstr ""
+msgstr "Come primo bouquet"
 
 #. label-option: Channels - tvfavouritesmode
 #. label-option: Channels - radiofavouritesmode
 msgctxt "#30077"
 msgid "As last bouquet"
-msgstr ""
+msgstr "Come ultimo bouquet"
 
 #. label-option: Channels - tvgroupmode
 #. label-option: Channels - radiogroupmode
 msgctxt "#30078"
 msgid "Favourites bouquet"
-msgstr ""
+msgstr "Bouquet preferiti"
 
 #. application: ChannelGroups
 msgctxt "#30079"
 msgid "Favourites (TV)"
-msgstr ""
+msgstr "Preferiti (TV)"
 
 #. application: ChannelGroups
 msgctxt "#30080"
 msgid "Favourites (Radio)"
-msgstr ""
+msgstr "Preferiti (Radio)"
 
 #. application: Client
 #. application: Admin
 msgctxt "#30081"
 msgid "unknown"
-msgstr ""
+msgstr "sconosciuto"
 
 #. application: Client
 msgctxt "#30082"
 msgid " (Not connected!)"
-msgstr ""
+msgstr " (Non connesso!)"
 
 #. application: Client
 msgctxt "#30083"
 msgid "addon error"
-msgstr ""
+msgstr "errore add-on"
 
 #. label: Recordings - keepfoldersomitlocation
 msgctxt "#30084"
 msgid "Omit location path from recording directory"
-msgstr ""
+msgstr "Ometti il percorso della posizione dalla directory di registrazione"
 
 #. label: Recordings - virtualfolders
 msgctxt "#30085"
 msgid "Group recordings into folders by title"
-msgstr ""
+msgstr "Raggruppa le registrazioni in cartelle per titolo"
 
 #. label-category: backend
 msgctxt "#30086"
 msgid "Backend"
-msgstr ""
+msgstr "Backend"
 
 #. label-group: Backend - Recording Padding
 msgctxt "#30087"
 msgid "Recording Padding"
-msgstr ""
+msgstr "Riempimento registrazione"
 
 #. label: Backend - globalstartpaddingstb
 msgctxt "#30088"
 msgid "Global start padding"
-msgstr ""
+msgstr "Riempimento globale all'inizio"
 
 #. label: Backend - globalendpaddingstb
 msgctxt "#30089"
 msgid "Global end padding"
-msgstr ""
+msgstr "Riempimento globale alla fine"
 
 #. label-group: Backend - Device Info
 msgctxt "#30090"
 msgid "Device Info"
-msgstr ""
+msgstr "Informazioni dispositivo"
 
 #. label: Backend - webifversion
 msgctxt "#30091"
 msgid "WebIf version"
-msgstr ""
+msgstr "Versione WebIf"
 
 #. label: Backend - autotimertagintags
 msgctxt "#30092"
 msgid "AutoTimer tag in timer tags"
-msgstr ""
+msgstr "Etichetta timer automatici in etichette timer"
 
 #. label: Backend - autotimernameintags
 msgctxt "#30093"
 msgid "AutoTimer name in timer tags"
-msgstr ""
+msgstr "Nome AutoTimer nei tag dei timer"
 
 #. application: Admin
 msgctxt "#30094"
 msgid "N/A"
-msgstr "N.D"
+msgstr "N.D."
 
 #. application: Admin
 msgctxt "#30095"
@@ -518,42 +518,42 @@ msgstr "Falso"
 #. label-option: Advanced - powerstatemode
 msgctxt "#30097"
 msgid "Standby"
-msgstr ""
+msgstr "Standby"
 
 #. label-option: Advanced - powerstatemode
 msgctxt "#30098"
 msgid "Deep standby"
-msgstr ""
+msgstr "Spegnimento"
 
 #. label-option: Advanced - powerstatemode
 msgctxt "#30099"
 msgid "Wakeup, then standby"
-msgstr ""
+msgstr "Sveglia, quindi standby"
 
 #. label: General - updatemode
 msgctxt "#30100"
 msgid "Update mode"
-msgstr ""
+msgstr "Modalità aggiornamento"
 
 #. label-option: General - updatemode
 msgctxt "#30101"
 msgid "Timers and recordings"
-msgstr ""
+msgstr "Timer e registrazioni"
 
 #. label-option: General - updatemode
 msgctxt "#30102"
 msgid "Timers only"
-msgstr ""
+msgstr "Solo timer"
 
 #. label: General - useopenwebifpiconpath
 msgctxt "#30103"
 msgid "Use OpenWebIf picon path"
-msgstr ""
+msgstr "Usa percorso picon di OpenWebIf"
 
 #. label: Advanced - tracedebug
 msgctxt "#30104"
 msgid "Enable trace logging in debug mode"
-msgstr ""
+msgstr "Abilita tracciamento log in modalità debug"
 
 #. label-group - EPG - Other
 msgctxt "#30105"
@@ -563,58 +563,58 @@ msgstr "Altro"
 #. label: EPG - epgdelayperchannel
 msgctxt "#30106"
 msgid "EPG update delay per channel"
-msgstr ""
+msgstr "Ritardo aggiornamento EPG per canale"
 
 #. label-group: Recordings - Recording EDLs (Edit Decision Lists)
 msgctxt "#30107"
 msgid "Recording EDLs (Edit Decision Lists)"
-msgstr ""
+msgstr "Registrazione EDL (modifica elenchi di decisioni)"
 
 #. label: Recordings - enablerecordingedls
 msgctxt "#30108"
 msgid "Enable EDLs support"
-msgstr ""
+msgstr "Abilita supporto EDL"
 
 #. label: Recordings - edlpaddingstart
 msgctxt "#30109"
 msgid "EDL start time padding"
-msgstr ""
+msgstr "Riempimento ora di inizio EDL"
 
 #. label: Recordings - edlpaddingstop
 msgctxt "#30110"
 msgid "EDL stop time padding"
-msgstr ""
+msgstr "Riempimento ora di fine EDL"
 
 #. label: Advanced - debugnormal
 msgctxt "#30111"
 msgid "Enable debug logging in normal mode"
-msgstr ""
+msgstr "Abilita registrazione di debug in modalità normale"
 
 #. application: ChannelGroups
 msgctxt "#30112"
 msgid "Last Scanned (TV)"
-msgstr ""
+msgstr "Last Scanned (TV)"
 
 #. application: ChannelGroups
 msgctxt "#30113"
 msgid "Last Scanned (Radio)"
-msgstr ""
+msgstr "Last Scanned (Radio)"
 
 #. label: Channels - excludelastscannedtv
 #. label: Channels - excludelastscannedradio
 msgctxt "#30114"
 msgid "Exclude last scanned bouquet"
-msgstr ""
+msgstr "Escludi bouquet Last Scanned"
 
 #. label: EPG - skipinitialepg
 msgctxt "#30115"
 msgid "Skip Initial EPG Load"
-msgstr ""
+msgstr "Salta caricamento EPG all'inizio"
 
 #. label: General - channelandgroupupdatemode
 msgctxt "#30116"
 msgid "Channels and groups update mode"
-msgstr ""
+msgstr "Modalità aggiornamento canali e gruppi"
 
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30117"
@@ -624,203 +624,203 @@ msgstr "Disabilitato"
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30118"
 msgid "Notify on UI and Log"
-msgstr ""
+msgstr "Notifica su interfaccia utente e log"
 
 #. label-option: General - channelandgroupupdatemode
 msgctxt "#30119"
 msgid "Reload Channels and Groups"
-msgstr ""
+msgstr "Ricarica canali e gruppi"
 
 #. label: General - channelandgroupupdatehour
 msgctxt "#30120"
 msgid "Channels and groups update hour (24h)"
-msgstr ""
+msgstr "Orario aggiornamento canali e gruppi (24h)"
 
 #. label: Connection - connectionchecktimeout
 msgctxt "#30121"
 msgid "Connection check timeout"
-msgstr ""
+msgstr "Timeout controllo connessione"
 
 #. label: Connection - connectioncheckinterval
 msgctxt "#30122"
 msgid "Connection check interval"
-msgstr ""
+msgstr "Intervallo controllo connessione"
 
 #. label: Timers - Autotimers
 msgctxt "#30123"
 msgid "Autotimers"
-msgstr ""
+msgstr "Timer automatici"
 
 #. label: Timers - limitanychannelautotimers
 msgctxt "#30124"
 msgid "Limit 'Any Channel' autotimers to TV or Radio"
-msgstr ""
+msgstr "Limita i timer automatici \"Qualsiasi canale\" a TV o Radio"
 
 #. label: Timers - limitanychannelautotimerstogroups
 msgctxt "#30125"
 msgid "Limit to groups of original EPG channel"
-msgstr ""
+msgstr "Limita ai gruppi del canale EPG originale"
 
 #. label: Channels - usestandardserviceref
 msgctxt "#30126"
 msgid "Use standard channel service reference"
-msgstr ""
+msgstr "Usa il canale standard come riferimento al servizio"
 
 #. label: Recordings - storeextrarecordinginfo
 msgctxt "#30127"
 msgid "Store last played/play count on the backend"
-msgstr ""
+msgstr "Memorizza ultima riproduzione/conta riproduzioni sul backend"
 
 #. label: Recordings - sharerecordinglastplayed
 msgctxt "#30128"
 msgid "Share last played across:"
-msgstr ""
+msgstr "Condividi l'ultima volta che hai riprodotto su:"
 
 #. label-option: Recordings - sharerecordinglastplayed
 msgctxt "#30129"
 msgid "Kodi instances"
-msgstr ""
+msgstr "Istanze di Kodi"
 
 #. label-option: Recordings - sharerecordinglastplayed
 msgctxt "#30130"
 msgid "Kodi/E2 instances"
-msgstr ""
+msgstr "Istanze Kodi/E2"
 
 #. label-option: Channels - tvgroupmode
 #. label-option: Channels - radiogroupmode
 msgctxt "#30131"
 msgid "Custom bouquets"
-msgstr ""
+msgstr "Bouquet personalizzati"
 
 #. label: Channels - customtvgroupsfile
 msgctxt "#30132"
 msgid "Custom TV bouquets file"
-msgstr ""
+msgstr "File bouquet TV personalizzati"
 
 #. label: Channels - customradiogroupsfile
 msgctxt "#30133"
 msgid "Custom Radio bouquets file"
-msgstr ""
+msgstr "File bouquet Radio personalizzati"
 
 #. label: Channels - numtvgroups
 msgctxt "#30134"
 msgid "Number of TV bouquets"
-msgstr ""
+msgstr "Numero di bouquet TV"
 
 #. label: Channels - twotvgroup
 msgctxt "#30135"
 msgid "TV bouquet 2"
-msgstr ""
+msgstr "TV bouquet 2"
 
 #. label: Channels - threetvgroup
 msgctxt "#30136"
 msgid "TV bouquet 3"
-msgstr ""
+msgstr "TV bouquet 3"
 
 #. label: Channels - fourtvgroup
 msgctxt "#30137"
 msgid "TV bouquet 4"
-msgstr ""
+msgstr "TV bouquet 4"
 
 #. label: Channels - fivetvgroup
 msgctxt "#30138"
 msgid "TV bouquet 5"
-msgstr ""
+msgstr "TV bouquet 5"
 
 #. label: Channels - numradiogroups
 msgctxt "#30139"
 msgid "Number of radio bouquets"
-msgstr ""
+msgstr "Numero di bouquet Radio"
 
 #. label: Channels - tworadiogroup
 msgctxt "#30140"
 msgid "Radio bouquet 2"
-msgstr ""
+msgstr "Radio bouquet 2"
 
 #. label: Channels - threeradiogroup
 msgctxt "#30141"
 msgid "Radio bouquet 3"
-msgstr ""
+msgstr "Radio bouquet 3"
 
 #. label: Channels - fourradiogroup
 msgctxt "#30142"
 msgid "Radio bouquet 4"
-msgstr ""
+msgstr "Radio bouquet 4"
 
 #. label: Channels - fiveradiogroup
 msgctxt "#30143"
 msgid "Radio bouquet 5"
-msgstr ""
+msgstr "Radio bouquet 5"
 
 #. label: Advanced - ignoredebug
 msgctxt "#30144"
 msgid "No addon debug logging in Kodi debug mode"
-msgstr ""
+msgstr "Nessun add-on registrazione debug nella modalità di debug di Kodi"
 
 #. label-group: Backend - Power Settings
 msgctxt "#30145"
 msgid "Power Settings"
-msgstr ""
+msgstr "Impostazioni alimentazione"
 
 #. label: Backend - wakeonlanmac
 msgctxt "#30146"
 msgid "Wake On LAN MAC"
-msgstr ""
+msgstr "Wake On LAN MAC"
 
 #. label: Timeshift - IPTV
 msgctxt "#30147"
 msgid "IPTV"
-msgstr ""
+msgstr "IPTV"
 
 #. label: Timeshift - timeshiftEnabled
 msgctxt "#30148"
 msgid "Enable timeshift for IPTV streams"
-msgstr ""
+msgstr "Abilita timeshift per stream IPTV"
 
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Usa le opzioni di riconnessione http di FFmpeg se possibile"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
 msgid "Use mpegts MIME type for unknown streams"
-msgstr ""
+msgstr "Usa il tipo MIME mpegts per stream sconosciuti"
 
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Modifica impostazioni di inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
 msgid "Retrieve provider name for channels"
-msgstr ""
+msgstr "Recupera nome provider per i canali"
 
 #. label: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30153"
 msgid "Enable timeshift disk limit"
-msgstr ""
+msgstr "Abilita limite disco timeshift"
 
 #. label: Timeshift - timeshiftdisklimit
 msgctxt "#30154"
 msgid "Timeshift disk limit"
-msgstr ""
+msgstr "Limite timeshift sul disco"
 
 #. format-label: Timeshift - timeshiftdisklimit
 msgctxt "#30155"
 msgid "{0:.1f} GiB"
-msgstr ""
+msgstr "{0:.1f} GiB"
 
 #. label-group: Recordings - Recording Paths
 msgctxt "#30157"
 msgid "Recording Paths"
-msgstr ""
+msgstr "Percorsi di registrazione"
 
 #. label-group: Recordings - Recording Locations
 msgctxt "#30158"
 msgid "Recording Locations"
-msgstr ""
+msgstr "Posizioni di registrazione"
 
 #. ##############
 #. application #
@@ -834,37 +834,37 @@ msgstr "Automatico"
 #. application: Timers
 msgctxt "#30420"
 msgid "Once off timer (auto)"
-msgstr ""
+msgstr "Timer una volta spento (auto)"
 
 #. application: Timers
 msgctxt "#30421"
 msgid "Once off timer (repeating)"
-msgstr ""
+msgstr "Timer una volta spento (ripetuto)"
 
 #. application: Timers
 msgctxt "#30422"
 msgid "Once off timer (channel)"
-msgstr ""
+msgstr "Timer una volta spento (canale)"
 
 #. application: Timers
 msgctxt "#30423"
 msgid "Repeating time/channel based"
-msgstr ""
+msgstr "Ripetizione basata su tempo/canale"
 
 #. application: Timers
 msgctxt "#30424"
 msgid "One time guide-based"
-msgstr ""
+msgstr "Una volta basata sulla guida"
 
 #. application: Timers
 msgctxt "#30425"
 msgid "Repeating guide-based"
-msgstr ""
+msgstr "Ripetizione basata sulla guida"
 
 #. application: Timers
 msgctxt "#30426"
 msgid "Auto guide-based"
-msgstr ""
+msgstr "Basata sulla guida automatica"
 
 #. label-option: Channels - tvfavouritesmode
 #. label-option: Channels - radiofavouritesmode
@@ -877,17 +877,17 @@ msgstr "Disabilitato"
 #. application: Timers
 msgctxt "#30431"
 msgid "Record if EPG title differs"
-msgstr ""
+msgstr "Registra se il titolo EPG è diverso"
 
 #. application: Timers
 msgctxt "#30432"
 msgid "Record if EPG title and short description differs"
-msgstr ""
+msgstr "Registra se il titolo EPG e la breve descrizione differiscono"
 
 #. application: Timers
 msgctxt "#30433"
 msgid "Record if EPG title and all descriptions differ"
-msgstr ""
+msgstr "Registra se il titolo EPG e tutte le descrizioni differiscono"
 
 # empty strings from id 30434 to 30513
 #. ################
@@ -896,48 +896,48 @@ msgstr ""
 #. notification: Client
 msgctxt "#30514"
 msgid "Timeshift buffer path does not exist"
-msgstr ""
+msgstr "Il percorso del buffer timeshift non esiste"
 
 #. notification: Enigma2
 msgctxt "#30515"
 msgid "Enigma2: Could not reach web interface"
-msgstr ""
+msgstr "Enigma2: impossibile raggiungere l'interfaccia web"
 
 #. notification: Enigma2
 msgctxt "#30516"
 msgid "Enigma2: No channel groups found"
-msgstr ""
+msgstr "Enigma2: nessun gruppo di canali trovato"
 
 #. notification: Enigma2
 msgctxt "#30517"
 msgid "Enigma2: No channels found"
-msgstr ""
+msgstr "Enigma2: nessun canale trovato"
 
 #. notification: Enigma2
 msgctxt "#30518"
 msgid "Enigma2: Channel group changes detected, please restart to load changes"
-msgstr ""
+msgstr "Enigma2: rilevate modifiche al gruppo di canali, riavvia per caricare le modifiche"
 
 #. notification: Enigma2
 msgctxt "#30519"
 msgid "Enigma2: Channel changes detected, please restart to load changes"
-msgstr ""
+msgstr "Enigma2: rilevate modifiche al canale, riavvia per caricare le modifiche"
 
 #. application: AutoTimer
 #. application: Timer
 msgctxt "#30520"
 msgid "Invalid Channel"
-msgstr ""
+msgstr "Canale non valido"
 
 #. notification: Enigma2
 msgctxt "#30521"
 msgid "Enigma2: Channel group changes detected, reloading..."
-msgstr ""
+msgstr "Enigma2: rilevate modifiche al gruppo di canali, ricarica in corso..."
 
 #. notification: Enigma2
 msgctxt "#30522"
 msgid "Enigma2: Channel changes detected, reloading..."
-msgstr ""
+msgstr "Enigma2: rilevate modifiche al canale, ricarica in corso..."
 
 # empty strings from id 30523 to 30599
 #. ############
@@ -947,136 +947,136 @@ msgstr ""
 #. help-category: connection
 msgctxt "#30600"
 msgid "This category cotains the settings for connecting to the Enigma2 device"
-msgstr ""
+msgstr "Questa categoria contiene le impostazioni per la connessione al dispositivo Enigma2"
 
 #. help: Connection - host
 msgctxt "#30601"
 msgid "The IP address or hostname of your enigma2 based set-top box."
-msgstr ""
+msgstr "L'indirizzo IP o il nome host del tuo ricevitore basato su Enigma2."
 
 #. help: Connection - webport
 msgctxt "#30602"
 msgid "The port used to connect to the web interface."
-msgstr ""
+msgstr "La porta utilizzata per la connessione all'interfaccia web."
 
 #. help: Connection - use_secure
 msgctxt "#30603"
 msgid "Use https to connect to the web interface."
-msgstr ""
+msgstr "Usa https per la connessione all'interfaccia web."
 
 #. help: Connection - user
 msgctxt "#30604"
 msgid "If the webinterface of the set-top box is protected with a username/password combination this needs to be set in this option."
-msgstr ""
+msgstr "Se l'interfaccia web del ricevitore è protetta con una combinazione nome utente/password, deve essere impostata in questa opzione."
 
 #. help: Connection - pass
 msgctxt "#30605"
 msgid "If the webinterface of the set-top box is protected with a username/password combination this needs to be set in this option."
-msgstr ""
+msgstr "Se l'interfaccia web del ricevitore è protetta con una combinazione nome utente/password, deve essere impostata in questa opzione."
 
 #. help: Connection - autoconfig
 msgctxt "#30606"
 msgid "When enabled the stream URL will be read from an M3U8 file. When disabled it is constructed based on the service reference of the channel. This option is rarely required and should not be enbaled unless you have a special use case. If viewing an IPTV Stream this option has no effect on those channels."
-msgstr ""
+msgstr "Se abilitato, l'URL del flusso verrà letto da un file M3U8. Quando disabilitato viene costruito in base al riferimento al servizio del canale. Questa opzione è raramente richiesta e non dovrebbe essere abilitata a meno che tu non abbia un caso d'uso speciale. Se stai visualizzando un flusso IPTV questa opzione non ha effetto su quei canali."
 
 #. help: Connection - streamport
 msgctxt "#30607"
 msgid "This option defines the streaming port the set-top box uses to stream live tv. The default is 8001 which should be fine if the user did not define a custom port within the webinterface."
-msgstr ""
+msgstr "Questa opzione definisce la porta di streaming utilizzata dal ricevitore per trasmettere in streaming la Live TV. L'impostazione predefinita è 8001, che dovrebbe andare bene se l'utente non ha definito una porta personalizzata all'interno dell'interfaccia web."
 
 #. help: Connection - use_secure_stream
 msgctxt "#30608"
 msgid "Use https to connect to streams."
-msgstr ""
+msgstr "Usa https per connetterti agli stream."
 
 #. help: Connection - use_login_stream
 msgctxt "#30609"
 msgid "Use the login username and password for streams."
-msgstr ""
+msgstr "Usa nome utente e password di accesso per gli stream."
 
 #. help: Connection - connectionchecktimeout
 msgctxt "#30610"
 msgid "The value in seconds to wait for a connection check to complete before failure. Useful for tuning on older Enigma2 devices. Note, this setting should rarely need to be changed. It's more likely the `Connection check interval` setting will have the desired effect. Default is 30 seconds."
-msgstr ""
+msgstr "Il valore in secondi per attendere il completamento di un controllo della connessione prima dell'errore. Utile per la messa a punto su vecchi dispositivi Enigma2. Nota, questa impostazione dovrebbe raramente essere modificata. È più probabile che l'impostazione \"Intervallo di controllo della connessione\" abbia l'effetto desiderato. L'impostazione predefinita è 30 secondi."
 
 #. help: Connection - connectioncheckinterval
 msgctxt "#30611"
 msgid "The value in seconds to wait between connection checks. Useful for tuning on older Enigma2 devices. Default is 10 seconds."
-msgstr ""
+msgstr "Il valore in secondi da attendere tra i controlli di connessione. Utile per la messa a punto su vecchi dispositivi Enigma2. L'impostazione predefinita è 10 secondi."
 
 # empty strings from id 30612 to 30619
 #. help info - General
 #. help-category: general
 msgctxt "#30620"
 msgid "This category cotains the settings whivh generally need to be set by the user"
-msgstr ""
+msgstr "Questa categoria contiene le impostazioni che generalmente devono essere impostate dall'utente"
 
 #. help: General - onlinepicons
 msgctxt "#30621"
 msgid "Fetch the picons straight from the Enigma 2 set-top box."
-msgstr ""
+msgstr "Recupera picon direttamente dal ricevitore Enigma2."
 
 #. help: General - useopenwebifpiconpath
 msgctxt "#30622"
 msgid "Fetch the picon path from OpenWebIf instead of constructing from ServiceRef. Requires OpenWebIf 1.3.5 or higher. There is no effect if used on a lower version of OpenWebIf."
-msgstr ""
+msgstr "Recupera il percorso picon da OpenWebIf invece che da ServiceRef. Richiede OpenWebIf 1.3.5 o versioni successive. Non vi è alcun effetto se utilizzato su una versione inferiore di OpenWebIf."
 
 #. help: General - usepiconseuformat
 msgctxt "#30623"
 msgid "Assume all picons files fetched from the set-top box start with '1_1_1_' and end with '_0_0_0'."
-msgstr ""
+msgstr "Si suppone che tutti i file picon recuperati dal ricevitore inizino con '1_1_1_' e terminino con '_0_0_0'."
 
 #. help: General - iconpath
 msgctxt "#30624"
 msgid "In order to have Kodi display channel logos you have to copy the picons from your set-top box onto your OpenELEC machine. You then need to specify this path in this property."
-msgstr ""
+msgstr "Per poter visualizzare i loghi dei canali di Kodi devi copiare i picon dal tuo ricevitore sulla tua macchina OpenELEC. È quindi necessario specificare questo percorso in questa proprietà."
 
 #. help: General - updateint
 msgctxt "#30625"
 msgid "As the set-top box can also be used to modify timers, delete recordings etc. and the set-top box does not notify the Kodi installation, the addon needs to regularly check for updates (new channels, new/changed/deletes timers, deleted recordings, etc.) This property defines how often the addon checks for updates. Please note that updating the recordings frequently can keep your receiver and it's harddisk from entering standby automatically."
-msgstr ""
+msgstr "Poiché il ricevitore può essere utilizzato anche per modificare i timer, eliminare le registrazioni ecc. e il ricevitore non notifica l'installazione di Kodi, l'add-on deve controllare regolarmente gli aggiornamenti (nuovi canali, nuovi/modificati/eliminare timer, registrazioni cancellate, ecc.) Questa proprietà definisce la frequenza con cui l'add-on controlla gli aggiornamenti. Si prega di notare che l'aggiornamento frequente delle registrazioni può impedire al ricevitore e al suo disco rigido di entrare automaticamente in standby."
 
 #. help: General - updatemode
 msgctxt "#30626"
 msgid "The mode used when the update interval is reached. Note that if there is any timer change detected a recordings update will always occur regardless of the update mode. Choose from one of the following two modes: [B]Timers and Recordings[/B] Update all timers and recordings; [B]Timers only[/B] Only update the timers. If it's important to not spin up the HDD on your STB use this option. The HDD should then only spin up when a timer event occurs."
-msgstr ""
+msgstr "La modalità utilizzata quando viene raggiunto l'intervallo di aggiornamento. Si noti che se viene rilevata una modifica del timer, si verificherà sempre un aggiornamento delle registrazioni indipendentemente dalla modalità di aggiornamento. Scegli tra una delle seguenti due modalità: [B]Timer e registrazioni[/B] Aggiorna tutti i timer e le registrazioni; [B]Solo timer[/B] Aggiorna solo i timer. Se è importante non far girare l'HDD sul tuo ricevitore, usa questa opzione. L'HDD dovrebbe quindi avviarsi solo quando si verifica un evento timer."
 
 #. help: General - channelandgroupupdatemode
 msgctxt "#30627"
 msgid "The mode used when the hour in the next settings is reached. Choose from one of the following three modes: [B]Disabled[/B] Never check for channel and group changes; [B]Notify on UI and Log[/B] Display a notice in the UI and log the fact that a change was detectetd[/B]; [B]Reload Channels and Groups[/B] Disconnect and reconnect with E2 device to reload channels only if a change is detected."
-msgstr ""
+msgstr "La modalità utilizzata quando viene raggiunta l'ora nelle impostazioni successive. Scegli tra una delle seguenti tre modalità: [B]Disabilitato[/B] Non controllare mai le modifiche ai canali e ai gruppi; [B]Notifica sull'interfaccia utente e registro[/B] Visualizza un avviso nell'interfaccia utente e registra il fatto che è stata rilevata una modifica[/B]; [B]Ricarica canali e gruppi[/B] Scollega e ricollega il dispositivo E2 per ricaricare i canali solo se viene rilevata una modifica."
 
 #. help: General - channelandgroupupdatehour
 msgctxt "#30628"
 msgid "The hour of the day when the check for new channels should occur. Default is 4h as the Auto Bouquet Maker (ABM) on the E2 device defaults to 3AM."
-msgstr ""
+msgstr "L'ora del giorno in cui dovrebbe verificarsi il controllo dei nuovi canali. L'impostazione predefinita è 4 ore poiché l'Auto Bouquet Maker (ABM) sul dispositivo E2 è impostato alle 3:00."
 
 #. help: Channels - setprogramid
 msgctxt "#30629"
 msgid "Some TV Providers (e.g. Nos - Portugal) using MPTS send extra program stream information. Setting the program id allows kodi to select the correct stream and therefore makes the channel/recording playable. Note that it takes approx 33% longer to open any stream with this option enabled."
-msgstr ""
+msgstr "Alcuni provider TV (ad es. Nos - Portogallo) che utilizzano MPTS inviano informazioni aggiuntive sul flusso del programma. L'impostazione dell'id del programma consente a Kodi di selezionare lo stream corretto e quindi rende riproducibile il canale/la registrazione. Tieni presente che ci vuole circa il 33% in più per aprire qualsiasi stream con questa opzione abilitata."
 
 # empty strings from id 30630 to 30639
 #. help info - Channels
 #. help-category: channels
 msgctxt "#30640"
 msgid "This category cotains the settings for channels. When changing bouquets you may need to clear the channel cache to the settings to take effect. You can do this by going to the following in Kodi settings: 'Settings->PVR & Live TV->General->Clear cache'."
-msgstr ""
+msgstr "Questa categoria contiene le impostazioni per i canali. Quando si modificano i bouquet potrebbe essere necessario svuotare la cache del canale per rendere effettive le impostazioni. Puoi farlo andando nelle seguenti impostazioni di Kodi: \"Impostazioni->PVR e Live TV->Generale->Svuota cache\"."
 
 #. help: Channels - usestandardserviceref
 msgctxt "#30641"
 msgid "Usually service reference's for the channels are in a standard format like '1:0:1:27F6:806:2:11A0000:0:0:0:'. On occasion depending on provider they can be extended with some text e.g. '1:0:1:27F6:806:2:11A0000:0:0:0::UTV' or '1:0:1:27F6:806:2:11A0000:0:0:0::UTV + 1'. If this option is enabled then all read service reference's will be read as standard. This is default behaviour. Functionality like autotimers will always convert to a standard reference."
-msgstr ""
+msgstr "Di solito i riferimenti del servizio per i canali sono in un formato standard come '1:0:1:27F6:806:2:11A0000:0:0:0:'. A volte, a seconda del provider, possono essere estesi con del testo, ad es. '1:0:1:27F6:806:2:11A0000:0:0:0::UTV' o '1:0:1:27F6:806:2:11A0000:0:0:0::UTV + 1 '. Se questa opzione è abilitata, tutti i riferimenti del servizio di lettura verranno letti come standard. Questo è il comportamento predefinito. Funzionalità come i timer automatici verranno sempre convertite in un riferimento standard."
 
 #. help: Channels - zap
 msgctxt "#30642"
 msgid "When using the addon with a single tuner box it may be necessary that the addon needs to be able to zap to another channel on the set-top box. If this option is enabled each channel switch in Kodi will also result in a channel switch on the set-top box. Please note that [B]allow channel switching[/B] needs to be enabled in the webinterface on the set-top box."
-msgstr ""
+msgstr "Quando si utilizza l'add-on con un ricevitore con un solo tuner, potrebbe essere necessario che l'add-on debba essere in grado di eseguire lo zap su un altro canale del ricevitore. Se questa opzione è abilitata, ogni cambio di canale in Kodi comporterà anche un cambio di canale sul ricevitore. Si noti che [B]Consenti cambio canale[/B] deve essere abilitato nell'interfaccia web del ricevitore."
 
 #. help: Channels - tvgroupmode
 msgctxt "#30643"
 msgid "Choose from one of the following three modes: [B]All bouquets[/B] Fetch all TV bouquets from the set-top box; [B]Some bouquets[/B] Only fetch the bouquets specified in the next options; [B]Favourites group[/B] Only fetch the system bouquet for TV favourites; [B]Custom groups[/B] Fetch a set of bouquets from the Set-top box whose names are loaded from an XML file."
-msgstr ""
+msgstr "Scegli tra una delle seguenti tre modalità: [B]Tutti i bouquet[/B] Recupera tutti i bouquet TV dal ricevitore; [B]Alcuni bouquet[/B] Recupera solo i bouquet specificati nelle opzioni successive; [B]Gruppo Preferiti[/B] Recupera il bouquet di sistema solo per i preferiti TV; [B]Gruppi personalizzati[/B] Recupera una serie di bouquet dal ricevitore i cui nomi sono caricati da un file XML."
 
 #. help: Channels - onetvgroup
 #. help: Channels - twotvgroup
@@ -1085,22 +1085,22 @@ msgstr ""
 #. help: Channels - fivetvgroup
 msgctxt "#30644"
 msgid "If the previous option has been has been set to 'Some bouquets' you need to specify a TV bouquet to be fetched from the set-top box. Please note that this is the bouquet-name as shown on the set-top box (i.e. 'Favourites (TV)'). This setting is case-sensitive."
-msgstr ""
+msgstr "Se l'opzione precedente è stata impostata su \"Alcuni bouquet\", è necessario specificare un bouquet TV da prelevare dal ricevitore. Si prega di notare che questo è il nome del bouquet come mostrato sul ricevitore (ad esempio \"Preferiti (TV)\"). Questa impostazione fa distinzione tra maiuscole e minuscole."
 
 #. help: Channels - tvfavouritesmode
 msgctxt "#30645"
 msgid "If the fetch mode is 'All bouquets' or 'Some bouquets' depending on your Enigma2 image you may need to explicitly fetch favourites if you require them. The options are: [B]Disabled[/B] Don't explicitly fetch TV favourites; [B]As first bouquet[/B] Explicitly fetch them as the first bouquet; [B]As last bouquet[/B] Explicitly fetch them as the last bouquet."
-msgstr ""
+msgstr "Se la modalità di recupero è \"Tutti i bouquet\" o \"Alcuni bouquet\", a seconda dell'immagine di Enigma2, potrebbe essere necessario recuperare esplicitamente i preferiti se ne hai bisogno. Le opzioni sono: [B]Disabilitato[/B] Non recuperare esplicitamente i preferiti TV; [B]Come primo bouquet[/B] Recuperali esplicitamente come primo bouquet; [B]Come ultimo bouquet[/B] Recuperali esplicitamente come ultimo bouquet."
 
 #. help: Channels - excludelastscannedtv
 msgctxt "#30646"
 msgid "Last scanned is a system bouquet containing all the TV and Radio channels found in the last scan. Any TV channels found in the Last Scanned bouquet can be displayed as a group called 'Last Scanned (TV)' in Kodi. For TV this group is excluded by default. Disable this option to exclude this group. Note that if no TV groups are loaded the Last Scanned group for TV will be loaded by default regardless of this setting."
-msgstr ""
+msgstr "L'ultima scansione è un bouquet di sistema contenente tutti i canali TV e radio trovati nell'ultima scansione. Tutti i canali TV trovati nel bouquet Last Scanned possono essere visualizzati come un gruppo chiamato \"Last Scanned (TV)\" in Kodi. Per la TV questo gruppo è escluso per impostazione predefinita. Disabilita questa opzione per escludere questo gruppo. Si noti che se non sono caricati gruppi TV, l'ultimo gruppo scansionato per TV verrà caricato per impostazione predefinita indipendentemente da questa impostazione."
 
 #. help: Channels - radiogroupmode
 msgctxt "#30647"
 msgid "Choose from one of the following three modes: [B]All bouquets[/B] Fetch all Radio bouquets from the set-top box[/B]; [B]Some bouquets[/B] Only fetch the bouquets specified in the next options; [B]Favourites group[/B] Only fetch the system bouquet for Radio favourites; [B]Custom groups[/B] Fetch a set of bouquets from the Set-top box whose names are loaded from an XML file."
-msgstr ""
+msgstr "Scegli tra una delle seguenti tre modalità: [B]Tutti i bouquet[/B] Recupera tutti i bouquet radio dal ricevitore[/B]; [B]Alcuni bouquet[/B] Recupera solo i bouquet specificati nelle opzioni successive; [B]Gruppo Preferiti[/B] Recupera il bouquet di sistema solo per i preferiti Radio; [B]Gruppi personalizzati[/B] Recupera una serie di bouquet dal Set-top box i cui nomi sono caricati da un file XML."
 
 #. help: Channels - oneradiogroup
 #. help: Channels - tworadiogroup
@@ -1109,324 +1109,324 @@ msgstr ""
 #. help: Channels - fiveradiogroup
 msgctxt "#30648"
 msgid "If the previous option has been has been set to 'Some bouquets' you need to specify a Radio bouquet to be fetched from the set-top box. Please note that this is the bouquet-name as shown on the set-top box (i.e. 'Favourites (Radio)'). This setting is case-sensitive."
-msgstr ""
+msgstr "Se l'opzione precedente è stata impostata su 'Alcuni bouquet' è necessario specificare un bouquet Radio da prelevare dal ricevitore. Si prega di notare che questo è il nome del bouquet come mostrato sul ricevitore (cioè \"Preferiti (Radio)\"). Questa impostazione fa distinzione tra maiuscole e minuscole."
 
 #. help: Channels - radiofavouritesmode
 msgctxt "#30649"
 msgid "If the fetch mode is 'All bouquets' or 'Some bouquets' depending on your Enigma2 image you may need to explicitly fetch favourites if you require them. The options are: [B]Disabled[/B] Don't explicitly fetch Radio favourites; [B]As first bouquet[/B] Explicitly fetch them as the first bouquet; [B]As last bouquet[/B] Explicitly fetch them as the last bouquet."
-msgstr ""
+msgstr "Se la modalità di recupero è \"Tutti i bouquet\" o \"Alcuni bouquet\", a seconda dell'immagine di Enigma2, potrebbe essere necessario recuperare esplicitamente i preferiti se ne hai bisogno. Le opzioni sono: [B]Disabilitato[/B] Non recuperare esplicitamente i preferiti Radio; [B]Come primo bouquet[/B] Recuperali esplicitamente come primo bouquet; [B]Come ultimo bouquet[/B] Recuperali esplicitamente come ultimo bouquet."
 
 #. help: Channels - excludelastscannedradio
 msgctxt "#30650"
 msgid "Last scanned is a system bouquet containing all the TV and Radio channels found in the last scan. Any Radio channels found in the Last Scanned bouquet can be displayed as a group called 'Last Scanned (Radio)' in Kodi. For Radio this group is excluded by default. Disable this option to show this group."
-msgstr ""
+msgstr "L'ultima scansione è un bouquet di sistema contenente tutti i canali TV e radio trovati nell'ultima scansione. Tutti i canali radio trovati nel bouquet Last Scanned possono essere visualizzati come un gruppo chiamato \"Last Scanned (Radio)\" in Kodi. Per Radio questo gruppo è escluso per impostazione predefinita. Disabilita questa opzione per mostrare questo gruppo."
 
 #. help: Channels - customtvgroupsfile
 msgctxt "#30651"
 msgid "The file used to load the custom TV bouquets (groups). If no groups can be matched the channel list will default to 'Last Scanned (TV)'. The default file is `customTVGroups-example.xml`."
-msgstr ""
+msgstr "Il file utilizzato per caricare i bouquet TV personalizzati (gruppi). Se nessun gruppo può essere abbinato, l'elenco dei canali verrà impostato automaticamente su \"Last Scanned (TV)\". Il file predefinito è \"customTVGroups-example.xml\"."
 
 #. help: Channels - customradiogroupsfile
 msgctxt "#30652"
 msgid "The file used to load the custom Radio bouquets (groups). If no groups can be matched the channel list will default to 'Last Scanned (Radio)'. The default file is `customRadioGroups-example.xml`."
-msgstr ""
+msgstr "Il file utilizzato per caricare i bouquet Radio personalizzati (gruppi). Se nessun gruppo può essere abbinato, l'elenco dei canali verrà impostato automaticamente su \"Last Scanned (Radio)\". Il file predefinito è \"customRadioGroups-example.xml\"."
 
 #. help: Channels - numtvgroups
 msgctxt "#30653"
 msgid "The number of TV bouquets to load when `Some bouquets` is the selected fetch mode. Up to 5 can be chosen. If more than 5 are required the 'Custom bouquets' fetch mode should be used instead."
-msgstr ""
+msgstr "Il numero di bouquet TV da caricare quando \"Alcuni bouquet\" è la modalità di recupero selezionata. Se ne possono scegliere fino a 5. Se sono richiesti più di 5, è necessario utilizzare invece la modalità di recupero \"Bouquet personalizzati\"."
 
 #. help: Channels - numradiogroups
 msgctxt "#30654"
 msgid "The number of Radio bouquets to load when `Some bouquets` is the selected fetch mode. Up to 5 can be chosen. If more than 5 are required the 'Custom bouquets' fetch mode should be used instead."
-msgstr ""
+msgstr "Il numero di bouquet Radio da caricare quando \"Alcuni bouquet\" è la modalità di recupero selezionata. Se ne possono scegliere fino a 5. Se sono richiesti più di 5, è necessario utilizzare invece la modalità di recupero \"Bouquet personalizzati\"."
 
 #. help: Channels - usegroupspecificnumbers
 msgctxt "#30655"
 msgid "If this option is enabled then each group in kodi will match the exact channel numbers used on the backend bouquets. If disabled (default) each channel will only have a single backend channel number (first occurence when loaded)."
-msgstr ""
+msgstr "Se questa opzione è abilitata, ogni gruppo in Kodi corrisponderà ai numeri di canale esatti utilizzati sui bouquet di backend. Se disabilitato (predefinito), ogni canale avrà un solo numero di canale di backend (prima occorrenza quando viene caricato)."
 
 #. help: Channels - retrieveprovidername
 msgctxt "#30656"
 msgid "Retrieve provider name from the backend when fetching channels. Default is enabled but disabling can speed up fetch times on older devices."
-msgstr ""
+msgstr "Recupera il nome del provider dal backend durante il recupero dei canali. L'impostazione predefinita è abilitata, ma disabilitarla può accelerare i tempi di recupero sui dispositivi meno recenti."
 
 # empty strings from id 30657 to 30659
 #. help info - EPG
 #. help-category: epg
 msgctxt "#30660"
 msgid "This category cotains the settings for EPG (Electronic Programme Guide). Excluding logging missing genre text mappings all other options will require clearing the EPG cache to take effect. This can be done by going to 'Settings->PVR & Live TV->Guide->Clear cache' in Kodi after the addon restarts."
-msgstr ""
+msgstr "Questa categoria contiene le impostazioni per EPG (Guida elettronica ai programmi). Escludendo la registrazione delle mappature di testo di genere mancanti, tutte le altre opzioni richiederanno la cancellazione della cache EPG per avere effetto. Questo può essere fatto andando su \"Impostazioni-> PVR e Live TV-> Guida-> Cancella cache\" in Kodi dopo il riavvio del componente aggiuntivo."
 
 #. help: EPG - extractshowinfoenabled
 msgctxt "#30661"
 msgid "Check the description fields in the EPG data and attempt to extract season, episode and year info where possible. In addtion can also extract properties like new, live and premiere info."
-msgstr ""
+msgstr "Controlla i campi della descrizione nei dati EPG e tenta di estrarre informazioni su stagione, episodio e anno ove possibile. Inoltre puoi anche estrarre proprietà come nuove informazioni, live e premiere."
 
 #. help: EPG - extractshowinfofile
 msgctxt "#30662"
 msgid "The config used to extract season, episode and year information. The default file is `English-ShowInfo.xml`."
-msgstr ""
+msgstr "La configurazione utilizzata per estrarre informazioni su stagione, episodio e anno. Il file predefinito è \"English-ShowInfo.xml\"."
 
 #. help: EPG - genreidmapenabled
 msgctxt "#30663"
 msgid "If the genre IDs sent with EPG data from your set-top box are not using the DVB standard, map from these to the DVB standard IDs. Sky UK for instance uses OpenTV, in that case without this option set the genre colouring and text would be incorrect in Kodi."
-msgstr ""
+msgstr "Se gli ID di genere inviati con i dati EPG dal ricevitore non utilizzano lo standard DVB, mappa da questi agli ID standard DVB. Sky UK, ad esempio, utilizza OpenTV, in tal caso senza questa opzione impostata la colorazione del genere e il testo non sarebbero corretti in Kodi."
 
 #. help: EPG - genreidmapfile
 msgctxt "#30664"
 msgid "The config used to map set-top box EPG genre IDs to DVB standard IDs. The default file is `Sky-UK.xml`."
-msgstr ""
+msgstr "La configurazione utilizzata per mappare gli ID di genere EPG del ricevitore su ID standard DVB. Il file predefinito è \"Sky-UK.xml\"."
 
 #. help: EPG - rytecgenretextmapenabled
 msgctxt "#30665"
 msgid "If you use Rytec XMLTV EPG data this option can be used to map the text genres to DVB standard IDs."
-msgstr ""
+msgstr "Se si utilizzano dati EPG Rytec XMLTV, questa opzione può essere utilizzata per mappare i generi di testo su ID standard DVB."
 
 #. help: EPG - rytecgenretextmapfile
 msgctxt "#30666"
 msgid "The config used to map Rytec Genre Text to DVB IDs. The default file is `Rytec-UK-Ireland.xml`."
-msgstr ""
+msgstr "La configurazione utilizzata per mappare il testo del genere Rytec sugli ID DVB. Il file predefinito è \"Rytec-UK-Ireland.xml\"."
 
 #. help: EPG - logmissinggenremapping
 msgctxt "#30667"
 msgid "If you would like missing genre mappings to be logged so you can report them enable this option. Note: any genres found that don't have a mapping will still be extracted and sent to Kodi as strings. Currently genres are extracted by looking for text between square brackets, e.g. [B]TV Drama[/B], or for major, minor genres using a dot (.) to separate [B]TV Drama. Soap Opera[/B]"
-msgstr ""
+msgstr "Se desideri che le mappature di genere mancanti vengano registrate in modo da poterle segnalare, abilita questa opzione. Nota: tutti i generi trovati che non hanno una mappatura verranno comunque estratti e inviati a Kodi come stringhe. Attualmente i generi vengono estratti cercando il testo tra parentesi quadre, ad es. [B]Drammatico TV[/B], o per i generi maggiori e minori utilizzando un punto (.) per separare [B]Drammatico TV. Soap opera[/B]"
 
 #. help: EPG - epgdelayperchannel
 msgctxt "#30668"
 msgid "For older Enigma2 devices EPG updates can effect streaming quality (such as buffer timeouts). A delay of between 250ms and 5000ms can be introduced to improve quality. Only recommended for older devices. Choose the lowest value that avoids buffer timeouts."
-msgstr ""
+msgstr "Per i dispositivi Enigma2 meno recenti, gli aggiornamenti EPG possono influire sulla qualità dello streaming (come i timeout del buffer). È possibile introdurre un ritardo compreso tra 250 ms e 5000 ms per migliorare la qualità. Consigliato solo per dispositivi meno recenti. Scegli il valore più basso che evita i timeout del buffer."
 
 #. help: EPG - skipinitialepg
 msgctxt "#30669"
 msgid "Ignore the intial EPG load (now and next). Enabled by default to prevent crash issues on LibreElec/CoreElec."
-msgstr ""
+msgstr "Ignora il caricamento EPG iniziale (ora e prossimo). Abilitato per impostazione predefinita per prevenire problemi di arresto anomalo su LibreElec/CoreElec."
 
 # empty strings from id 30670 to 30679
 #. help info - Recordings
 #. help-category: recordings
 msgctxt "#30680"
 msgid "This category cotains the settings for recordings"
-msgstr ""
+msgstr "Questa categoria contiene le impostazioni per le registrazioni"
 
 #. help: Recordings - storeextrarecordinginfo
 msgctxt "#30681"
 msgid "Store last played position and count on the backend so they can be shared across kodi instances. Only supported on OpenWebIf version 1.3.6+."
-msgstr ""
+msgstr "Memorizza l'ultima posizione riprodotta e l'aggiorna sul backend in modo che possano essere condivisi tra le istanze Kodi. Supportato solo su OpenWebIf versione 1.3.6+."
 
 #. help: Recordings - sharerecordinglastplayed
 msgctxt "#30682"
 msgid "The options are: [B]Kodi instances[/B] Only use the value in kodi and will not affect last played on the E2 device; [B]Kodi/E2 instances[/B] Use the value across kodi and the E2 device so they stay in sync. Last played will be synced with the E2 device once every 5-10 minutes per recording if the PVR menus are in use. Note that only a single kodi instance is required to have this option enabled."
-msgstr ""
+msgstr "Le opzioni sono: [B]Istanze Kodi[/B] Usa solo il valore in Kodi e non influirà sull'ultima riproduzione sul dispositivo E2; [B]Istanze Kodi/E2[/B] Usa il valore tra Kodi e il dispositivo E2 in modo che rimangano sincronizzati. L'ultima riproduzione verrà sincronizzata con il dispositivo E2 una volta ogni 5-10 minuti per registrazione se sono in uso i menu PVR. Nota che è necessaria solo una singola istanza di Kodi per abilitare questa opzione."
 
 #. help: Timers - recordingpath
 msgctxt "#30683"
 msgid "Per default the addon does not specify the recording folder in newly created timers, so the default set in the set-top box will be used. If you want to specify a different folder (i.e. because you want all recordings scheduled via Kodi to be stored in a separate folder), then you need to set this option."
-msgstr ""
+msgstr "Per impostazione predefinita, l'add-on non specifica la cartella di registrazione nei timer appena creati, quindi verrà utilizzata l'impostazione predefinita nel ricevitore. Se desideri specificare una cartella diversa (ovvero perché desideri che tutte le registrazioni programmate tramite Kodi vengano archiviate in una cartella separata), devi impostare questa opzione."
 
 #. help: Recordings - onlycurrent
 msgctxt "#30684"
 msgid "If this option is not set the addon will fetch all available recordings from all configured paths from the set-top box. If this option is set then it will only list recordings that are stored within the 'current recording path' on the set-top box."
-msgstr ""
+msgstr "Se questa opzione non è impostata, l'add-on recupererà tutte le registrazioni disponibili da tutti i percorsi configurati dal ricevitore. Se questa opzione è impostata, elencherà solo le registrazioni che sono memorizzate all'interno del \"percorso di registrazione corrente\" sul ricevitore."
 
 #. help: Recordings - keepfolders
 msgctxt "#30685"
 msgid "If enabled use the real path from the backend to dictate the folder structure."
-msgstr ""
+msgstr "Se abilitato, usa il percorso reale dal backend per dettare la struttura delle cartelle."
 
 #. help: Recordings - enablerecordingedls
 msgctxt "#30686"
 msgid "EDLs are used to define commericals etc. in recordings. If a tool like Comskip is used to generate EDL files enabling this will allow Kodi PVR to use them. E.g. if there is a file called 'my recording.ts' the EDL file should be call 'my recording.edl'. Note: enabling this setting has no effect if the files are not present."
-msgstr ""
+msgstr "Gli EDL sono usati per definire pubblicità ecc. nelle registrazioni. Se uno strumento come Comskip viene utilizzato per generare file EDL, l'abilitazione di questo consentirà a Kodi PVR di utilizzarli. Per esempio. se c'è un file chiamato 'my recording.ts' il file EDL dovrebbe essere chiamato 'my recording.edl'. Nota: l'abilitazione di questa impostazione non ha effetto se i file non sono presenti."
 
 #. help: Recordings - edlpaddingstart
 msgctxt "#30687"
 msgid "Padding to use at an EDL stop. I.e. use a negative number to start the cut earlier and positive to start the cut later. Default 0."
-msgstr ""
+msgstr "Riempimento da utilizzare in uno stop EDL. Utilizza un numero negativo per iniziare il taglio prima e positivo per iniziare il taglio più tardi. Predefinito 0."
 
 #. help: Recordings - edlpaddingstop
 msgctxt "#30688"
 msgid "Padding to use at an EDL stop. I.e. use a negative number to stop the cut earlier and positive to stop the cut later. Default 0."
-msgstr ""
+msgstr "Riempimento da utilizzare in uno stop EDL. Utilizza un numero negativo per iniziare il taglio prima e positivo per iniziare il taglio più tardi. Predefinito 0."
 
 #. help: Recordings - recordingsrecursive
 msgctxt "#30689"
 msgid "By default only the root of the location will be used to list recordings. When enabled the contents of child folders will be included."
-msgstr ""
+msgstr "Per impostazione predefinita, per elencare le registrazioni verrà utilizzata solo la radice della posizione. Quando abilitato, verrà incluso il contenuto delle cartelle figlie."
 
 #. help: Recordings - keepfoldersomitlocation
 msgctxt "#30690"
 msgid "When using the folder structure from the backend omit the location path from the directory. Useful as it can remove the need to traverse unused folders each time recordings are accessed."
-msgstr ""
+msgstr "Quando si utilizza la struttura delle cartelle dal backend, omette il percorso della posizione dalla directory. Utile in quanto può eliminare la necessità di attraversare cartelle inutilizzate ogni volta che si accede alle registrazioni."
 
 #. help: Recordings - virtualfolders
 msgctxt "#30691"
 msgid "Create a virtual structure grouping recordings with the same name into folders. Will be applied to all recordings unless keeping the folder structure on the backend. In that case it will only be applied to the recordings in the root of each recording location."
-msgstr ""
+msgstr "Crea una struttura virtuale che raggruppa le registrazioni con lo stesso nome in cartelle. Verrà applicato a tutte le registrazioni a meno che non si mantenga la struttura delle cartelle sul backend. In tal caso verrà applicato solo alle registrazioni nella radice di ciascuna posizione di registrazione."
 
 # empty strings from id 30692 to 30699
 #. help info - Timers
 #. help-category: timers
 msgctxt "#30700"
 msgid "This category cotains the settings for timers (regular and auto)"
-msgstr ""
+msgstr "Questa categoria contiene le impostazioni per i timer (normali e automatici)"
 
 #. help: Timers - enablegenrepeattimers
 msgctxt "#30701"
 msgid "Repeat timers will display as timer rules. Enabling this will make Kodi generate regular timers to match the repeat timer rules so the UI can show what's scheduled and currently recording for each repeat timer."
-msgstr ""
+msgstr "I timer ripetuti verranno visualizzati come regole del timer. Abilitando questa opzione, Kodi genererà timer regolari in modo che corrispondano alle regole del timer ripetuto in modo che l'interfaccia utente possa mostrare cosa è programmato e cosa sta registrando attualmente per ogni timer ripetuto."
 
 #. help: Timers - numgenrepeattimers
 msgctxt "#30702"
 msgid "The number of Kodi PVR timers to generate."
-msgstr ""
+msgstr "Il numero di timer Kodi PVR da generare."
 
 #. help: Timers - timerlistcleanup
 msgctxt "#30703"
 msgid "If this option is set then the addon will send the command to delete completed timers from the set-top box after each update interval."
-msgstr ""
+msgstr "Se questa opzione è impostata, l'add-on invierà il comando per eliminare i timer completati dal ricevitore dopo ogni intervallo di aggiornamento."
 
 #. help: Timers - enableautotimers
 msgctxt "#30704"
 msgid "When this is enabled there are some settings required on the set-top box to enable linking of AutoTimers (Timer Rules) to Timers in the Kodi UI. The addon attempts to set these automatically on boot."
-msgstr ""
+msgstr "Quando è abilitato, sono necessarie alcune impostazioni sul ricevitore per abilitare il collegamento di AutoTimer (regole timer) a timer nell'interfaccia utente di Kodi. L'add-on tenta di impostarli automaticamente all'avvio."
 
 #. help: Timers - limitanychannelautotimers
 msgctxt "#30705"
 msgid "If last scanned groups are excluded attempt to limit new autotimers to either TV or Radio (dependent on channel used to create the autotimer). Note that if last scanned groups are enabled this is not possible and the setting will be ignored."
-msgstr ""
+msgstr "Se vengono esclusi gli ultimi gruppi scansionati, prova a limitare i nuovi timer automatici alla TV o alla Radio (a seconda del canale utilizzato per creare l'autotimer). Si noti che se sono abilitati gli ultimi gruppi scansionati, questo non è possibile e l'impostazione verrà ignorata."
 
 #. help: Timers - limitanychannelautotimerstogroups
 msgctxt "#30706"
 msgid "For the channel used to create the autotimer limit to channel groups that this channel is a member of."
-msgstr ""
+msgstr "Per il canale usato per creare il limite del timer automatico per i gruppi di canali di cui questo canale è membro."
 
 # empty strings from id 30707 to 30719
 #. help info - Timeshift
 #. help-category: timeshift
 msgctxt "#30720"
 msgid "This category cotains the settings for timeshift. Timeshifting allows you to pause live TV as well as move back and forward from your current position similar to playing back a recording. The buffer is deleted each time a channel is changed or stopped."
-msgstr ""
+msgstr "Questa categoria contiene le impostazioni per il timeshift. Il timeshift ti consente di mettere in pausa la Live TV e di spostarti avanti e indietro dalla posizione attuale in modo simile alla riproduzione di una registrazione. Il buffer viene cancellato ogni volta che un canale viene modificato o interrotto."
 
 #. help: Timeshift - enabletimeshift
 msgctxt "#30721"
 msgid "What timeshift option do you want: [B]Disabled[/B] No timeshifting; [B]On Pause[/B] Timeshifting starts when a live stream is paused. E.g. you want to continue from where you were at after pausing; [B]On Playback[/B] Timeshifting starts when a live stream is opened. E.g. You can go to any point in the stream since it was opened."
-msgstr ""
+msgstr "Quale opzione di timeshift desideri: [B]Disabilitato[/B] Nessun timeshift; [B]In pausa[/B] Il timeshift inizia quando un live streaming viene messo in pausa. Per esempio. vuoi continuare da dove eri dopo la pausa; [B]In riproduzione[/B] Il timeshift inizia quando viene aperto un live streaming. Per esempio puoi andare in qualsiasi punto dello stream da quando è stato aperto."
 
 #. help: Timeshift - timeshiftbufferpath
 msgctxt "#30722"
 msgid "The path used to store the timeshift buffer. The default is the `addon_data/pvr.vuplus` folder in userdata."
-msgstr ""
+msgstr "Il percorso utilizzato per memorizzare il buffer timeshift. L'impostazione predefinita è la cartella \"addon_data/pvr.vuplus\" in userdata."
 
 #. help: Timeshift - timeshiftEnabled
 msgctxt "#30723"
 msgid "Enable the timeshift feature for IPTV streams using inputstream.ffmpegdirect. Note that this feature only works on playback and will ignore the timeshift mode used for regular channel playback."
-msgstr ""
+msgstr "Abilita la funzione timeshift per i flussi IPTV utilizzando inputstream.ffmpegdirect. Si noti che questa funzione funziona solo durante la riproduzione e ignorerà la modalità timeshift utilizzata per la normale riproduzione del canale."
 
 #. help: Timeshift - useFFmpegReconnect
 msgctxt "#30724"
 msgid "Note this can only apply to http/https streams that are processed by libavformat (e.g. M3u8/HLS)."
-msgstr ""
+msgstr "Nota che questo può applicarsi solo ai flussi http/https elaborati da libavformat (ad es. M3u8/HLS)."
 
 #. help: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30725"
 msgid "If the type of stream cannot be determined assume it's an MPEG TS stream."
-msgstr ""
+msgstr "Se non è possibile determinare il tipo di flusso, supponiamo che sia un flusso MPEG TS."
 
 #. help: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30726"
 msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
-msgstr ""
+msgstr "Apre la finestra di dialogo delle impostazioni per inputstream.ffmpegdirect per modificare il timeshift e altre impostazioni."
 
 #. help: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30727"
 msgid "For devices with limited disk space a limit in Gigabytes can be set whereby timeshift will be switched off and playback will return to the live stream. Note that for timeshift on playback it will not be possible to timeshift again until a stream is restarted once this limit is reached."
-msgstr ""
+msgstr "Per i dispositivi con spazio su disco limitato è possibile impostare un limite in Gigabyte per cui il timeshift verrà disattivato e la riproduzione tornerà allo streaming live. Tieni presente che per il timeshift durante la riproduzione non sarà possibile eseguire nuovamente il timeshift fino a quando uno stream non viene riavviato una volta raggiunto questo limite."
 
 #. help: Timeshift - timeshiftdisklimit
 msgctxt "#30728"
 msgid "The disk space limit to use for the timeshift buffer in Gigabytes."
-msgstr ""
+msgstr "Il limite di spazio su disco da utilizzare per il buffer timeshift in Gigabyte."
 
 # empty strings from id 30729 to 30739
 #. help info - Advanced
 #. help-category: advanced
 msgctxt "#30740"
 msgid "This category cotains advanced/expert settings"
-msgstr ""
+msgstr "Questa categoria contiene impostazioni avanzate/esperte"
 
 #. help: Advanced - prependoutline
 msgctxt "#30741"
 msgid "By default plot outline (short description on Enigma2) is not displayed in the UI. Can be displayed in EPG, Recordings or both. After changing this option you will need to clear the EPG cache `Settings->PVR & Live TV->Guide->Clear cache` for it to take effect."
-msgstr ""
+msgstr "Per impostazione predefinita, il profilo della trama (breve descrizione su Enigma2) non viene visualizzato nell'interfaccia utente. Può essere visualizzato in EPG, Registrazioni o entrambi. Dopo aver modificato questa opzione, sarà necessario svuotare la cache EPG in \"Impostazioni->PVR e Live TV->Guida->Cancella cache\" affinché abbia effetto."
 
 #. help: Advanced - powerstatemode
 msgctxt "#30742"
 msgid "If this option is set to a value other than `Disabled` then the addon will send a Powerstate command to the set-top box when Kodi will be closed (or the addon will be deactivated): [B]Disabled[/B] No command sent when the addon exits; [B]Standby[/B] Send the standby command on exit; [B]Deep standby[/B] Send the deep standby command on exit. Note, the set-top box will not respond to Kodi after this command is sent; [B]Wakeup, then standby[/B] Similar to standby but first sends a wakeup command. Can be useful if you want to ensure all streams have stopped. Note: if you use CEC this could cause your TV to wake."
-msgstr ""
+msgstr "Se questa opzione è impostata su un valore diverso da \"Disabilitato\", l'add-on invierà un comando Powerstate al ricevitore quando Kodi verrà chiuso (o l'add-on sarà disattivato): [B]Disabilitato[/B] Nessun comando inviato all'uscita dell'add-on; [B]Standby[/B] Invia il comando di standby all'uscita; [B]Ricevitore spento[/B] Invia il comando di spegnimento all'uscita. Nota, il ricevitore non risponderà a Kodi dopo l'invio di questo comando; [B]Sveglia, quindi standby[/B] Simile allo standby ma invia prima un comando di riattivazione. Può essere utile se vuoi assicurarti che tutti gli stream siano stati interrotti. Nota: se utilizzi CEC, la TV potrebbe riattivarsi."
 
 #. help: Advanced - readtimeout
 msgctxt "#30743"
 msgid "The timemout to use when trying to read live streams. Default for live streams is 0. Default for for timeshifting is 10 seconds."
-msgstr ""
+msgstr "Il timeout da utilizzare quando si tenta di leggere i live streaming. Il valore predefinito per i live streaming è 0. Il valore predefinito per il timeshift è 10 secondi."
 
 #. help: Advanced - streamreadchunksize
 msgctxt "#30744"
 msgid "The chunk size used by Kodi for streams. Default at 0 to leave it to Kodi to decide. Can be useful to set manually when viewing streams remotely where buffering can occur as PVR is optimised for a local network."
-msgstr ""
+msgstr "La dimensione del blocco utilizzata da Kodi per i flussi. Il valore predefinito è 0 per lasciare che sia Kodi a decidere. Può essere utile impostare manualmente durante la visualizzazione di flussi in remoto in cui può verificarsi il buffering poiché il PVR è ottimizzato per una rete locale."
 
 #. help: Advanced - debugnormal
 msgctxt "#30745"
 msgid "Debug log statements will display for the addon even though debug logging may not be enabled in Kodi. Note that all debug log statements will display at NOTICE level."
-msgstr ""
+msgstr "Le istruzioni del registro di debug verranno visualizzate per l'add-on anche se la registrazione del debug potrebbe non essere abilitata in Kodi. Si noti che tutte le istruzioni del registro di debug verranno visualizzate a livello di AVVISO."
 
 #. help: Advanced - tracedebug
 msgctxt "#30746"
 msgid "Very detailed and verbose log statements will display in addition to standard debug statements. If enabled along with `Enable debug logging in normal mode` both trace and debug will display without debug logging enabled. In this case both debug and trace log statements will display at NOTICE level."
-msgstr ""
+msgstr "Oltre alle istruzioni di debug standard verranno visualizzate istruzioni di registro molto dettagliate e dettagliate. Se abilitato insieme a \"Abilita registrazione debug in modalità normale\", verranno visualizzati sia la traccia che il debug senza che la registrazione del debug sia abilitata. In questo caso, le istruzioni di debug e di registro di traccia verranno visualizzate a livello di AVVISO."
 
 #. help: Advanced - ignoredebug
 msgctxt "#30747"
 msgid "Debug log statements will not be displayed for the addon even though debug logging is enabled in Kodi. This can be useful when trying to debug an issue in Kodi which is not addon related."
-msgstr ""
+msgstr "Le istruzioni del registro di debug non verranno visualizzate per l'add-on anche se la registrazione del debug è abilitata in Kodi. Questo può essere utile quando si tenta di eseguire il debug di un problema in Kodi che non è correlato a componenti aggiuntivi."
 
 # empty strings from id 30748 to 30759
 #. help info - Backend
 #. help-category: backend
 msgctxt "#30760"
 msgid "This category contains information and settings on/about the Enigma2 STB."
-msgstr ""
+msgstr "Questa categoria contiene informazioni e impostazioni sul ricevitore Enigma2."
 
 #. help: Backend - webifversion
 msgctxt "#30761"
 msgid "webifversion"
-msgstr ""
+msgstr "webifversion"
 
 #. help: Backend - autotimertagintags
 msgctxt "#30762"
 msgid "autotimertagintags"
-msgstr ""
+msgstr "autotimertagintags"
 
 #. help: Backend - autotimernameintags
 msgctxt "#30763"
 msgid "autotimernameintags"
-msgstr ""
+msgstr "autotimernameintags"
 
 #. help: Backend - globalstartpaddingstb
 msgctxt "#30764"
 msgid "This value reflects the backend setting [B]Margin before recording[/B]. It will be applied to the start of all new regular timers created including those created from Autotimers. Note that if a padding/margin is set on an Autotimer it will be custom for that Autotimer and will override this value."
-msgstr ""
+msgstr "Questo valore riflette l'impostazione del backend [B]Margine prima della registrazione[/B]. Verrà applicato all'inizio di tutti i nuovi timer regolari creati, inclusi quelli creati da Autotimer. Si noti che se un riempimento/margine è impostato su un Autotimer, sarà personalizzato per quell'Autotimer e sostituirà questo valore."
 
 #. help: Backend - globalendpaddingstb
 msgctxt "#30765"
 msgid "This value reflects the backend setting [B]Margin after recording[/B]. It will be applied to the end of all new regular timers created including those created from Autotimers. Note that if a padding/margin is set on an Autotimer it will be custom for that Autotimer and will override this value."
-msgstr ""
+msgstr "Questo valore riflette l'impostazione del backend [B]Margine dopo la registrazione[/B]. Verrà applicato alla fine di tutti i nuovi timer regolari creati, inclusi quelli creati da Autotimer. Si noti che se un riempimento/margine è impostato su un Autotimer, sarà personalizzato per quell'Autotimer e sostituirà questo valore."
 
 #. label: Backend - wakeonlanmac
 msgctxt "#30766"
 msgid "The MAC address of the Engima2 STB to be used for WoL (Wake On LAN)."
-msgstr ""
+msgstr "Indirizzo MAC del ricevitore E2 da utilizzare per WoL (Wake On LAN)."
 
 #~ msgctxt "#30017"
 #~ msgid "Use only the DVB boxes' current recording path"
diff --git a/pvr.vuplus/resources/language/resource.language.ko_kr/strings.po b/pvr.vuplus/resources/language/resource.language.ko_kr/strings.po
index 0c1ccc3..0215107 100644
--- a/pvr.vuplus/resources/language/resource.language.ko_kr/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.ko_kr/strings.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: translations@kodi.tv\n"
+"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: 2021-09-06 13:29+0000\n"
 "Last-Translator: Minho Park <parkmino@gmail.com>\n"
diff --git a/pvr.vuplus/resources/language/resource.language.lt_lt/strings.po b/pvr.vuplus/resources/language/resource.language.lt_lt/strings.po
index b799d5d..27ec964 100644
--- a/pvr.vuplus/resources/language/resource.language.lt_lt/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.lt_lt/strings.po
@@ -7,14 +7,15 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/kodi-main/language/lt_LT/)\n"
-"Language: lt_LT\n"
+"PO-Revision-Date: 2022-03-27 01:17+0000\n"
+"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"Language-Team: Lithuanian <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/lt_lt/>\n"
+"Language: lt_lt\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Weblate 4.11.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -777,7 +778,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Naudoti FFmpeg http pakartotinio prisijungimo parinktis kai įmanoma"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
diff --git a/pvr.vuplus/resources/language/resource.language.pl_pl/strings.po b/pvr.vuplus/resources/language/resource.language.pl_pl/strings.po
index d5556b7..cede4e7 100644
--- a/pvr.vuplus/resources/language/resource.language.pl_pl/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.pl_pl/strings.po
@@ -7,14 +7,15 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/kodi-main/language/pl_PL/)\n"
-"Language: pl_PL\n"
+"PO-Revision-Date: 2022-03-30 10:57+0000\n"
+"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"Language-Team: Polish <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/pl_pl/>\n"
+"Language: pl_pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.11.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -777,7 +778,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Jeśli to możliwe, użyj opcji ponownego połączenia http FFmpeg"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
@@ -787,7 +788,7 @@ msgstr ""
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Zmodyfikuj ustawienia inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
@@ -1333,7 +1334,7 @@ msgstr ""
 #. help: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30726"
 msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
-msgstr ""
+msgstr "Otwórz okno ustawień dla inputstream.ffmpegdirect w celu modyfikacji timeshift i innych ustawień."
 
 #. help: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30727"
diff --git a/pvr.vuplus/resources/language/resource.language.pt_br/strings.po b/pvr.vuplus/resources/language/resource.language.pt_br/strings.po
index 96e915d..e921ace 100644
--- a/pvr.vuplus/resources/language/resource.language.pt_br/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.pt_br/strings.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: translations@kodi.tv\n"
+"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: 2021-12-05 04:13+0000\n"
 "Last-Translator: Fabio <fabioihle+kodi@alunos.utfpr.edu.br>\n"
diff --git a/pvr.vuplus/resources/language/resource.language.ro_ro/strings.po b/pvr.vuplus/resources/language/resource.language.ro_ro/strings.po
index 43af503..27ab49b 100644
--- a/pvr.vuplus/resources/language/resource.language.ro_ro/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.ro_ro/strings.po
@@ -5,20 +5,21 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/kodi-main/language/ro_RO/)\n"
-"Language: ro_RO\n"
+"PO-Revision-Date: 2022-09-30 11:15+0000\n"
+"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"Language-Team: Romanian <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/ro_ro/>\n"
+"Language: ro_ro\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
+"X-Generator: Weblate 4.14.1\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
-msgstr "Interfața Kodi pentru decodoare VU+ / Enigma2 "
+msgstr "Interfața Kodi pentru decodoare VU+ / Enigma2"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
diff --git a/pvr.vuplus/resources/language/resource.language.ru_ru/strings.po b/pvr.vuplus/resources/language/resource.language.ru_ru/strings.po
index 774760a..f3ff3d0 100644
--- a/pvr.vuplus/resources/language/resource.language.ru_ru/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.ru_ru/strings.po
@@ -7,15 +7,15 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-08-04 19:29+0000\n"
-"Last-Translator: homocomputeris <homocomputeris+git@gmail.com>\n"
+"PO-Revision-Date: 2022-02-27 09:13+0000\n"
+"Last-Translator: Christian Gade <gade@kodi.tv>\n"
 "Language-Team: Russian <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/ru_ru/>\n"
 "Language: ru_ru\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.11\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -778,7 +778,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "Использовать опцию http переподключения FFmpeg если это возможно"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
@@ -788,7 +788,7 @@ msgstr ""
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- Изменить настройки inputstream.ffmpegdirect..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
@@ -1334,7 +1334,7 @@ msgstr ""
 #. help: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30726"
 msgid "Open settings dialog for inputstream.ffmpegdirect for modification of timeshift and other settings."
-msgstr ""
+msgstr "Открыть меню настроек inputstream.ffmpegdirect для изменения timeshift и других настроек."
 
 #. help: Timeshift - enabletimeshiftdisklimit
 msgctxt "#30727"
diff --git a/pvr.vuplus/resources/language/resource.language.sk_sk/strings.po b/pvr.vuplus/resources/language/resource.language.sk_sk/strings.po
index e85eaac..b63c735 100644
--- a/pvr.vuplus/resources/language/resource.language.sk_sk/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.sk_sk/strings.po
@@ -7,14 +7,15 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/kodi-main/language/sk_SK/)\n"
-"Language: sk_SK\n"
+"PO-Revision-Date: 2022-02-04 23:13+0000\n"
+"Last-Translator: Patrik Špaňo <patrik.spano@gmail.com>\n"
+"Language-Team: Slovak <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/sk_sk/>\n"
+"Language: sk_sk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 4.10.1\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -22,7 +23,7 @@ msgstr "Rozhranie Kodi pre prijímače založené na platforme Enigma2"
 
 msgctxt "Addon Description"
 msgid "Enigma2 frontend - supporting streaming of Live TV & Recordings, EPG, Timers, Autotimers.[CR]    [CR]For documentation visit: https://github.com/kodi-pvr/pvr.vuplus/blob/Matrix/README.md[CR]    "
-msgstr "VU+ rozhranie; je podporované streamovanie živého televízneho vysielania a nahrávok, EPG, časovačov."
+msgstr "Rozhranie Enigma2 – podporuje streamovanie živého vysielania a nahrávanie, televízny program EPG, časovače, automatické časovače.[CR][CR]Pre dokumentáciu navštívte: https://github.com/kodi-pvr/pvr.vuplus/blob/master/README.md    "
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
diff --git a/pvr.vuplus/resources/language/resource.language.sv_se/strings.po b/pvr.vuplus/resources/language/resource.language.sv_se/strings.po
index 48bbfab..fe654f3 100644
--- a/pvr.vuplus/resources/language/resource.language.sv_se/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.sv_se/strings.po
@@ -5,17 +5,17 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
+"Report-Msgid-Bugs-To: translations@kodi.tv\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-06-28 08:29+0000\n"
-"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"PO-Revision-Date: 2022-09-08 07:53+0000\n"
+"Last-Translator: Sopor <sopor@hotmail.com>\n"
 "Language-Team: Swedish <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/sv_se/>\n"
 "Language: sv_se\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7\n"
+"X-Generator: Weblate 4.14\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
diff --git a/pvr.vuplus/resources/language/resource.language.uk_ua/strings.po b/pvr.vuplus/resources/language/resource.language.uk_ua/strings.po
index abfbe66..75eff47 100644
--- a/pvr.vuplus/resources/language/resource.language.uk_ua/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.uk_ua/strings.po
@@ -5,17 +5,17 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: translations@kodi.tv\n"
+"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2021-09-06 13:29+0000\n"
-"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"PO-Revision-Date: 2022-05-15 22:14+0000\n"
+"Last-Translator: A. <artem+weblate@molotov.work>\n"
 "Language-Team: Ukrainian <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/uk_ua/>\n"
 "Language: uk_ua\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.8\n"
+"X-Generator: Weblate 4.12.2\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -27,7 +27,7 @@ msgstr "Накладка VU+; підтримує потоки Live TV, запи
 
 msgctxt "Addon Disclaimer"
 msgid "This is unstable software! The authors are in no way responsible for failed recordings, incorrect timers, wasted hours, or any other undesirable effects.."
-msgstr "Це нестабільна програма! Автори не несуть відповідальності за попсуті записи, неправильні таймери, втрачений час та інші небажані ефекти."
+msgstr "Це нестабільна програма! Автори не несуть жодної відповідальності за зіпсуті записи, неправильні таймери, витрачений час та будь-які інші небажані ефекти.."
 
 #. ##################
 #. settings labels #
diff --git a/pvr.vuplus/resources/language/resource.language.zh_cn/strings.po b/pvr.vuplus/resources/language/resource.language.zh_cn/strings.po
index e55ca08..7964b39 100644
--- a/pvr.vuplus/resources/language/resource.language.zh_cn/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.zh_cn/strings.po
@@ -7,14 +7,15 @@ msgstr ""
 "Project-Id-Version: KODI Main\n"
 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Kodi Translation Team\n"
-"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/kodi-main/language/zh_CN/)\n"
-"Language: zh_CN\n"
+"PO-Revision-Date: 2022-02-27 09:13+0000\n"
+"Last-Translator: Christian Gade <gade@kodi.tv>\n"
+"Language-Team: Chinese (China) <https://kodi.weblate.cloud/projects/kodi-add-ons-pvr-clients/pvr-vuplus/zh_cn/>\n"
+"Language: zh_cn\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.11\n"
 
 msgctxt "Addon Summary"
 msgid "Kodi's frontend for Enigma2 based set-top boxes"
@@ -777,7 +778,7 @@ msgstr ""
 #. label: Timeshift - useFFmpegReconnect
 msgctxt "#30149"
 msgid "Use FFmpeg http reconnect options if possible"
-msgstr ""
+msgstr "尽可能使用 FFmepg http 重连选项"
 
 #. label: Timeshift - useMpegtsForUnknownStreams
 msgctxt "#30150"
@@ -787,7 +788,7 @@ msgstr ""
 #. label: Timeshift - timeshiftFFmpegdirectSettings
 msgctxt "#30151"
 msgid "- Modify inputstream.ffmpegdirect settings..."
-msgstr ""
+msgstr "- 修改 inputstream.ffmpegdirect 设置..."
 
 #. label: Channels - retrieveprovidername
 msgctxt "#30152"
diff --git a/pvr.vuplus/resources/language/resource.language.zh_tw/strings.po b/pvr.vuplus/resources/language/resource.language.zh_tw/strings.po
index 227bda5..f745638 100644
--- a/pvr.vuplus/resources/language/resource.language.zh_tw/strings.po
+++ b/pvr.vuplus/resources/language/resource.language.zh_tw/strings.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: KODI Main\n"
-"Report-Msgid-Bugs-To: translations@kodi.tv\n"
+"Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: 2021-11-14 13:06+0000\n"
 "Last-Translator: JuenTingShie <t104340042@ntut.org.tw>\n"
diff --git a/pvr.vuplus/resources/settings.xml b/pvr.vuplus/resources/settings.xml
index 23c73d8..7c13cf4 100644
--- a/pvr.vuplus/resources/settings.xml
+++ b/pvr.vuplus/resources/settings.xml
@@ -1,1048 +1,452 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <settings version="1">
-  <section id="pvr.vuplus">
+  <section id="addon" label="-1" help="-1">
 
-    <!-- Connection -->
-    <category id="connection" label="30005" help="30600">
-      <group id="1" label="30038">
-        <setting id="host" type="string" label="30000" help="30601">
-          <level>0</level>
-          <default>127.0.0.1</default>
-          <control type="edit" format="string" />
+    <!-- Advanced -->
+    <category id="advanced" label="30020" help="30740">
+      <group id="1" label="30115">
+        <setting id="nodebug" type="boolean" label="30144" help="30747">
+          <level>1</level>
+          <default>false</default>
+          <control type="toggle" />
         </setting>
-        <setting id="webport" type="integer" label="30012" help="30602">
-          <level>0</level>
-          <default>80</default>
-          <constraints>
-            <minimum>1</minimum>
-            <step>1</step>
-            <maximum>65535</maximum>
-          </constraints>
-          <control type="edit" format="integer" />
+        <setting id="debugnormal" type="boolean" parent="nodebug" label="30111" help="30745">
+          <level>1</level>
+          <default>false</default>
+          <dependencies>
+            <dependency type="enable" setting="nodebug">false</dependency>
+          </dependencies>
+          <control type="toggle" />
         </setting>
-        <setting id="use_secure" type="boolean" label="30028" help="30603">
+        <setting id="tracedebug" type="boolean" parent="nodebug" label="30104" help="30746">
           <level>1</level>
           <default>false</default>
+          <dependencies>
+            <dependency type="enable" setting="nodebug">false</dependency>
+          </dependencies>
           <control type="toggle" />
         </setting>
       </group>
-      <group id="2" label="30051">
-        <setting id="user" type="string" label="30003" help="30604">
-          <level>1</level>
+    </category>
+
+    <!-- Hidden category with all settings which were add-on settings before multi-instance
+         support was added to this add-on. Used for settings migration, which needs minimal
+         settings definition to work.
+
+         Note that empty default values still require an allowampty constraint -->
+    <category id="hidden_obsolete">
+      <group id="1" label="-1">
+        <setting id="host" type="string">
+          <level>4</level> <!-- hidden -->
+          <default>127.0.0.1</default>
+        </setting>
+        <setting id="webport" type="integer">
+          <level>4</level> <!-- hidden -->
+          <default>80</default>
+        </setting>
+        <setting id="use_secure" type="boolean">
+          <level>4</level> <!-- hidden -->
+          <default>false</default>
+        </setting>
+        <setting id="user" type="string">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="pass" type="string" label="30004" help="30605">
-          <level>1</level>
+        <setting id="pass" type="string">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <control type="edit" format="string">
-            <hidden>true</hidden>
-          </control>
         </setting>
-      </group>
-      <group id="3" label="30039">
-        <setting id="autoconfig" type="boolean" label="30029" help="30606">
-          <level>2</level>
+        <setting id="autoconfig" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-        <setting id="streamport" type="integer" label="30002" help="30607">
-          <level>2</level>
+        <setting id="streamport" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>8001</default>
-          <constraints>
-            <minimum>1</minimum>
-            <step>1</step>
-            <maximum>65535</maximum>
-          </constraints>
-          <dependencies>
-            <dependency type="enable" setting="autoconfig">false</dependency>
-          </dependencies>
-          <control type="edit" format="integer" />
         </setting>
-        <setting id="use_secure_stream" type="boolean" label="30066" help="30608">
-          <level>2</level>
+        <setting id="use_secure_stream" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <dependencies>
-            <dependency type="enable" setting="autoconfig">false</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-        <setting id="use_login_stream" type="boolean" label="30067" help="30609">
-          <level>2</level>
+        <setting id="use_login_stream" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <dependencies>
-            <dependency type="enable" setting="autoconfig">false</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-      </group>
-      <group id="4" label="30020">
-        <setting id="connectionchecktimeout" type="integer" label="30121" help="30610">
-          <level>3</level>
+        <setting id="connectionchecktimeout" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>30</default>
-          <constraints>
-            <minimum>10</minimum>
-            <step>10</step>
-            <maximum>60</maximum>
-          </constraints>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14045</formatlabel>
-          </control>
         </setting>
-        <setting id="connectioncheckinterval" type="integer" label="30122" help="30611">
-          <level>3</level>
+        <setting id="connectioncheckinterval" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>10</default>
-          <constraints>
-            <minimum>1</minimum>
-            <step>1</step>
-            <maximum>60</maximum>
-          </constraints>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14045</formatlabel>
-          </control>
         </setting>
-      </group>
-    </category>
 
-    <!-- General -->
-    <category id="general" label="30018" help="30620">
-      <group id="1" label="30007">
-        <setting id="setprogramid" type="boolean" label="30014" help="30629">
-          <level>0</level>
+        <!-- General -->
+        <setting id="setprogramid" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-      </group>
-
-      <group id="2" label="30006">
-        <setting id="onlinepicons" type="boolean" label="30027" help="30621">
-          <level>0</level>
+        <setting id="onlinepicons" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
         </setting>
-        <setting id="useopenwebifpiconpath" type="boolean" parent="onlinepicons" label="30103" help="30622">
-          <level>1</level>
+        <setting id="useopenwebifpiconpath" type="boolean" parent="onlinepicons">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <dependencies>
-            <dependency type="enable" setting="onlinepicons">true</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-        <setting id="usepiconseuformat" type="boolean" label="30035" help="30623">
-          <level>0</level>
+        <setting id="usepiconseuformat" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-        <setting id="iconpath" type="path" label="30008" help="30624">
-          <level>1</level>
+        <setting id="iconpath" type="path">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
-            <writable>true</writable>
           </constraints>
-          <dependencies>
-            <dependency type="enable" setting="onlinepicons">false</dependency>
-          </dependencies>
-          <control type="button" format="path">
-            <heading>657</heading>
-          </control>
         </setting>
-      </group>
-
-      <group id="3" label="30009">
-        <setting id="updateint" type="integer" label="30015" help="30625">
-          <level>1</level>
+        <setting id="updateint" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>2</default>
-          <constraints>
-            <minimum>1</minimum>
-            <step>1</step>
-            <maximum>1440</maximum>
-          </constraints>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14044</formatlabel>
-          </control>
         </setting>
-        <setting id="updatemode" type="integer" label="30100" help="30626">
-          <level>1</level>
+        <setting id="updatemode" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <options>
-              <option label="30101">0</option> <!-- TIMERS_AND_RECORDINGS -->
-              <option label="30102">1</option> <!-- TIMERS_ONLY -->
-            </options>
-          </constraints>
-          <control type="list" format="integer" />
         </setting>
-        <setting id="channelandgroupupdatemode" type="integer" label="30116" help="30627">
-          <level>2</level>
+        <setting id="channelandgroupupdatemode" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>2</default>
-          <constraints>
-            <options>
-              <option label="30117">0</option> <!-- DISABLED -->
-              <option label="30118">1</option> <!-- NOTIFY_AND_LOG -->
-              <option label="30119">2</option> <!-- RELOAD_CHANNELS_AND_GROUPS -->
-            </options>
-          </constraints>
-          <control type="list" format="integer" />
         </setting>
-        <setting id="channelandgroupupdatehour" type="integer" label="30120" help="30628">
-          <level>2</level>
+        <setting id="channelandgroupupdatehour" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>4</default>
-          <constraints>
-            <minimum>0</minimum>
-            <step>1</step>
-            <maximum>23</maximum>
-          </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <or>
-                <condition setting="channelandgroupupdatemode" operator="is">1</condition>
-                <condition setting="channelandgroupupdatemode" operator="is">2</condition>
-              </or>
-            </dependency>
-          </dependencies>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>17998</formatlabel>
-          </control>
         </setting>
-      </group>
-    </category>
 
-    <!-- Channels -->
-    <category id="channels" label="30019" help="30640">
-      <group id="1" label="30018">
-        <setting id="zap" type="boolean" label="30013" help="30642">
-          <level>0</level>
+        <!-- Channels -->
+        <setting id="zap" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-        <setting id="usegroupspecificnumbers" type="boolean" label="30016" help="30655">
-          <level>0</level>
+        <setting id="usegroupspecificnumbers" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-        <setting id="usestandardserviceref" type="boolean" label="30126" help="30641">
-          <level>3</level>
+        <setting id="usestandardserviceref" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
         </setting>
-      </group>
-      <group id="2" label="30161">
-        <setting id="defaultprovidername" type="string" label="30160" help="30658">
-          <level>2</level>
+        <setting id="defaultprovidername" type="string">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="providermapfile" type="path" label="30159" help="30657">
-          <level>2</level>
-          <default>special://userdata/addon_data/pvr.vuplus/providers/providersMappings.xml</default>
-          <constraints>
-            <allowempty>false</allowempty>
-            <writable>false</writable>
-          </constraints>
-          <control type="button" format="file">
-            <heading>1033</heading>
-          </control>
+        <setting id="providermapfile" type="path">
+          <level>4</level> <!-- hidden -->
+          <default>special://userdata/addon_data/pvr.vuplus/providers/providerMappings.xml</default>
         </setting>
-        <setting id="retrieveprovidername" type="boolean" label="30152" help="30656">
-          <level>3</level>
+        <setting id="retrieveprovidername" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
         </setting>
-      </group>
-      <group id="3" label="30056">
-        <setting id="tvgroupmode" type="integer" label="30025" help="30643">
-          <level>0</level>
+        <setting id="tvgroupmode" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <options>
-              <option label="30074">0</option> <!-- ALL_GROUPS -->
-              <option label="30075">1</option> <!-- SOME_GROUPS -->
-              <option label="30078">2</option> <!-- FAVOURITES_GROUP -->
-              <option label="30131">3</option> <!-- CUSTOM_GROUPS -->
-            </options>
-          </constraints>
-          <control type="spinner" format="integer" />
         </setting>
-        <setting id="numtvgroups" type="integer" parent="tvgroupmode" label="30134" help="30653">
-          <level>0</level>
+        <setting id="numtvgroups" type="integer" parent="tvgroupmode">
+          <level>4</level> <!-- hidden -->
           <default>1</default>
-          <constraints>
-            <minimum>1</minimum>
-            <step>1</step>
-            <maximum>5</maximum>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="tvgroupmode" operator="is">1</dependency>
-          </dependencies>
-          <control type="spinner" format="integer" />
         </setting>
-        <setting id="onetvgroup" type="string" parent="tvgroupmode" label="30026" help="30644">
-          <level>0</level>
+        <setting id="onetvgroup" type="string" parent="tvgroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible" setting="tvgroupmode" operator="is">1</dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="twotvgroup" type="string" parent="tvgroupmode" label="30135" help="30644">
-          <level>0</level>
+        <setting id="twotvgroup" type="string" parent="tvgroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <and>
-                <condition setting="tvgroupmode" operator="is">1</condition>
-                <condition setting="numtvgroups" operator="gt">1</condition>
-              </and>
-            </dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="threetvgroup" type="string" parent="tvgroupmode" label="30136" help="30644">
-          <level>0</level>
+        <setting id="threetvgroup" type="string" parent="tvgroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <and>
-                <condition setting="tvgroupmode" operator="is">1</condition>
-                <condition setting="numtvgroups" operator="gt">2</condition>
-              </and>
-            </dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="fourtvgroup" type="string" parent="tvgroupmode" label="30137" help="30644">
-          <level>0</level>
+        <setting id="fourtvgroup" type="string" parent="tvgroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <and>
-                <condition setting="tvgroupmode" operator="is">1</condition>
-                <condition setting="numtvgroups" operator="gt">3</condition>
-              </and>
-            </dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="fivetvgroup" type="string" parent="tvgroupmode" label="30138" help="30644">
-          <level>0</level>
+        <setting id="fivetvgroup" type="string" parent="tvgroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <and>
-                <condition setting="tvgroupmode" operator="is">1</condition>
-                <condition setting="numtvgroups" operator="gt">4</condition>
-              </and>
-            </dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
 
-        <setting id="customtvgroupsfile" type="path" parent="tvgroupmode" label="30132" help="30651">
-          <level>0</level>
+        <setting id="customtvgroupsfile" type="path" parent="tvgroupmode">
+          <level>4</level> <!-- hidden -->
           <default>special://userdata/addon_data/pvr.vuplus/channelGroups/customTVGroups-example.xml</default>
-          <constraints>
-            <allowempty>false</allowempty>
-            <writable>false</writable>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="tvgroupmode" operator="is">3</dependency>
-          </dependencies>
-          <control type="button" format="file">
-            <heading>1033</heading>
-          </control>
         </setting>
-        <setting id="tvfavouritesmode" type="integer" label="30068" help="30645">
-          <level>2</level>
+        <setting id="tvfavouritesmode" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <options>
-              <option label="30430">0</option> <!-- DISABLED -->
-              <option label="30076">1</option> <!-- AS_FIRST_GROUP -->
-              <option label="30077">2</option> <!-- AS_LAST_GROUP -->
-            </options>
-          </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <or>
-                <condition setting="tvgroupmode" operator="is">0</condition>
-                <condition setting="tvgroupmode" operator="is">1</condition>
-              </or>
-            </dependency>
-          </dependencies>
-          <control type="spinner" format="integer" />
         </setting>
-        <setting id="excludelastscannedtv" type="boolean" label="30114" help="30646">
-          <level>3</level>
+        <setting id="excludelastscannedtv" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <dependencies>
-            <dependency type="visible" setting="tvgroupmode" operator="is">0</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-      </group>
-      <group id="4" label="30057">
-        <setting id="radiogroupmode" type="integer" label="30058" help="30647">
-          <level>0</level>
+        <setting id="radiogroupmode" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <options>
-              <option label="30074">0</option> <!-- ALL_GROUPS -->
-              <option label="30075">1</option> <!-- SOME_GROUPS -->
-              <option label="30078">2</option> <!-- FAVOURITES_GROUP -->
-              <option label="30131">3</option> <!-- CUSTOM_GROUPS -->
-            </options>
-          </constraints>
-          <control type="spinner" format="integer" />
         </setting>
 
-        <setting id="numradiogroups" type="integer" parent="radiogroupmode" label="30139" help="30654">
-          <level>0</level>
+        <setting id="numradiogroups" type="integer" parent="radiogroupmode">
+          <level>4</level> <!-- hidden -->
           <default>1</default>
-          <constraints>
-            <minimum>1</minimum>
-            <step>1</step>
-            <maximum>5</maximum>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="radiogroupmode" operator="is">1</dependency>
-          </dependencies>
-          <control type="spinner" format="integer" />
         </setting>
-        <setting id="oneradiogroup" type="string" parent="radiogroupmode" label="30059" help="30648">
-          <level>0</level>
+        <setting id="oneradiogroup" type="string" parent="radiogroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible" setting="radiogroupmode" operator="is">1</dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="tworadiogroup" type="string" parent="radiogroupmode" label="30140" help="30648">
-          <level>0</level>
+        <setting id="tworadiogroup" type="string" parent="radiogroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <and>
-                <condition setting="radiogroupmode" operator="is">1</condition>
-                <condition setting="numradiogroups" operator="gt">1</condition>
-              </and>
-            </dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="threeradiogroup" type="string" parent="radiogroupmode" label="30141" help="30648">
-          <level>0</level>
+        <setting id="threeradiogroup" type="string" parent="radiogroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <and>
-                <condition setting="radiogroupmode" operator="is">1</condition>
-                <condition setting="numradiogroups" operator="gt">2</condition>
-              </and>
-            </dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="fourradiogroup" type="string" parent="radiogroupmode" label="30142" help="30648">
-          <level>0</level>
+        <setting id="fourradiogroup" type="string" parent="radiogroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <and>
-                <condition setting="radiogroupmode" operator="is">1</condition>
-                <condition setting="numradiogroups" operator="gt">3</condition>
-              </and>
-            </dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="fiveradiogroup" type="string" parent="radiogroupmode" label="30143" help="30648">
-          <level>0</level>
+        <setting id="fiveradiogroup" type="string" parent="radiogroupmode">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <and>
-                <condition setting="radiogroupmode" operator="is">1</condition>
-                <condition setting="numradiogroups" operator="gt">4</condition>
-              </and>
-            </dependency>
-          </dependencies>
-          <control type="edit" format="string" />
         </setting>
 
-        <setting id="customradiogroupsfile" type="path" parent="radiogroupmode" label="30133" help="30652">
-          <level>0</level>
+        <setting id="customradiogroupsfile" type="path" parent="radiogroupmode">
+          <level>4</level> <!-- hidden -->
           <default>special://userdata/addon_data/pvr.vuplus/channelGroups/customRadioGroups-example.xml</default>
-          <constraints>
-            <allowempty>false</allowempty>
-            <writable>false</writable>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="radiogroupmode" operator="is">3</dependency>
-          </dependencies>
-          <control type="button" format="file">
-            <heading>1033</heading>
-          </control>
         </setting>
-        <setting id="radiofavouritesmode" type="integer" label="30069" help="30649">
-          <level>2</level>
+        <setting id="radiofavouritesmode" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <options>
-              <option label="30430">0</option> <!-- DISABLED -->
-              <option label="30076">1</option> <!-- AS_FIRST_GROUP -->
-              <option label="30077">2</option> <!-- AS_LAST_GROUP -->
-            </options>
-          </constraints>
-          <dependencies>
-            <dependency type="visible">
-              <or>
-                <condition setting="radiogroupmode" operator="is">0</condition>
-                <condition setting="radiogroupmode" operator="is">1</condition>
-              </or>
-            </dependency>
-          </dependencies>
-          <control type="spinner" format="integer" />
         </setting>
-        <setting id="excludelastscannedradio" type="boolean" label="30114" help="30650">
-          <level>3</level>
+        <setting id="excludelastscannedradio" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <dependencies>
-            <dependency type="visible" setting="radiogroupmode" operator="is">0</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-      </group>
-    </category>
 
-    <!-- EPG -->
-    <category id="epg" label="30032" help="30660">
-      <group id="1" label="30031">
-        <setting id="extractshowinfoenabled" type="boolean" label="30033" help="30661">
-          <level>0</level>
+        <!-- EPG -->
+        <setting id="extractshowinfoenabled" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
+
         </setting>
-        <setting id="extractshowinfofile" type="path" parent="extractshowinfoenabled" label="30046" help="30662">
-          <level>0</level>
+        <setting id="extractshowinfofile" type="path" parent="extractshowinfoenabled">
+          <level>4</level> <!-- hidden -->
           <default>special://userdata/addon_data/pvr.vuplus/showInfo/English-ShowInfo.xml</default>
-          <constraints>
-            <allowempty>false</allowempty>
-            <writable>false</writable>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="extractshowinfoenabled" operator="is">true</dependency>
-          </dependencies>
-          <control type="button" format="file">
-            <heading>1033</heading>
-          </control>
         </setting>
-      </group>
-      <group id="2" label="30053">
-        <setting id="genreidmapenabled" type="boolean" label="30054" help="30663">
-          <level>2</level>
+        <setting id="genreidmapenabled" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-        <setting id="genreidmapfile" type="path" parent="genreidmapenabled" label="30055" help="30664">
-          <level>2</level>
+        <setting id="genreidmapfile" type="path" parent="genreidmapenabled">
+          <level>4</level> <!-- hidden -->
           <default>special://userdata/addon_data/pvr.vuplus/genres/genreIdMappings/Sky-UK.xml</default>
-          <constraints>
-            <allowempty>false</allowempty>
-            <writable>false</writable>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="genreidmapenabled" operator="is">true</dependency>
-          </dependencies>
-          <control type="button" format="file">
-            <heading>1033</heading>
-          </control>
         </setting>
-      </group>
-      <group id="3" label="30047">
-        <setting id="rytecgenretextmapenabled" type="boolean" label="30048" help="30665">
-          <level>2</level>
+        <setting id="rytecgenretextmapenabled" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-        <setting id="rytecgenretextmapfile" type="path" parent="rytecgenretextmapenabled" label="30049" help="30666">
-          <level>2</level>
+        <setting id="rytecgenretextmapfile" type="path" parent="rytecgenretextmapenabled">
+          <level>4</level> <!-- hidden -->
           <default>special://userdata/addon_data/pvr.vuplus/genres/genreRytecTextMappings/Rytec-UK-Ireland.xml</default>
-          <constraints>
-            <allowempty>false</allowempty>
-            <writable>false</writable>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="rytecgenretextmapenabled" operator="is">true</dependency>
-          </dependencies>
-          <control type="button" format="file">
-            <heading>1033</heading>
-          </control>
         </setting>
-        <setting id="logmissinggenremapping" type="boolean" parent="rytecgenretextmapenabled" label="30037" help="30667">
-          <level>2</level>
+        <setting id="logmissinggenremapping" type="boolean" parent="rytecgenretextmapenabled">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <dependencies>
-            <dependency type="visible" setting="rytecgenretextmapenabled" operator="is">true</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-      </group>
-      <group id="4" label="30105">
-        <setting id="epgdelayperchannel" type="integer" label="30106" help="30668">
-          <level>2</level>
+        <setting id="epgdelayperchannel" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <minimum>0</minimum>
-            <step>250</step>
-            <maximum>5000</maximum>
-          </constraints>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14046</formatlabel>
-          </control>
-        </setting>
-        <setting id="skipinitialepg" type="boolean" label="30115" help="30669">
-          <level>2</level>
-          <default>false</default>
-          <control type="toggle" />
         </setting>
-      </group>
-    </category>
 
-    <!-- Recordings -->
-    <category id="recordings" label="30070" help="30680">
-      <group id="1" label="30071">
-        <setting id="storeextrarecordinginfo" type="boolean" label="30127" help="30681">
-          <level>0</level>
+        <!-- Recordings -->
+        <setting id="storeextrarecordinginfo" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
+
         </setting>
-        <setting id="sharerecordinglastplayed" type="integer" parent="storeextrarecordinginfo" label="30128" help="30682">
-          <level>0</level>
+        <setting id="sharerecordinglastplayed" type="integer" parent="storeextrarecordinginfo">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <dependencies>
-            <dependency type="enable" setting="storeextrarecordinginfo" operator="is">true</dependency>
-          </dependencies>
-          <constraints>
-            <options>
-              <option label="30129">0</option> <!-- ACROSS_KODI_INSTANCES -->
-              <option label="30130">1</option> <!-- ACROSS_KODI_AND_E2_INSTANCES -->
-            </options>
-          </constraints>
-          <control type="spinner" format="integer" />
         </setting>
-      </group>
-
-      <group id="2" label="30157">
-        <setting id="virtualfolders" type="boolean" label="30085" help="30691">
-          <level>2</level>
+        <setting id="virtualfolders" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
         </setting>
-        <setting id="keepfolders" type="boolean" label="30030" help="30685">
-          <level>2</level>
+        <setting id="keepfolders" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
         </setting>
-        <setting id="keepfoldersomitlocation" type="boolean" parent="keepfolders" label="30084" help="30690">
-          <level>2</level>
+        <setting id="keepfoldersomitlocation" type="boolean" parent="keepfolders">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <dependencies>
-            <dependency type="visible" setting="keepfolders">true</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-      </group>
-
-      <group id="3" label="30158">
-        <setting id="recordingsrecursive" type="boolean" label="30022" help="30689">
-          <level>2</level>
+        <setting id="recordingsrecursive" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
         </setting>
-        <setting id="onlycurrent" type="boolean" label="30017" help="30684">
-          <level>2</level>
+        <setting id="onlycurrent" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-      </group>
-
-      <group id="4" label="30107">
-        <setting id="enablerecordingedls" type="boolean" label="30108" help="30686">
-          <level>0</level>
+        <setting id="enablerecordingedls" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
         </setting>
-        <setting id="edlpaddingstart" type="integer" parent="enablerecordingedls" label="30109" help="30687">
-          <level>0</level>
+        <setting id="edlpaddingstart" type="integer" parent="enablerecordingedls">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <minimum>-10000</minimum>
-            <step>500</step>
-            <maximum>10000</maximum>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="enablerecordingedls">true</dependency>
-          </dependencies>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14046</formatlabel>
-          </control>
         </setting>
-        <setting id="edlpaddingstop" type="integer" parent="enablerecordingedls" label="30110" help="30688">
-          <level>0</level>
+        <setting id="edlpaddingstop" type="integer" parent="enablerecordingedls">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <minimum>-10000</minimum>
-            <step>500</step>
-            <maximum>10000</maximum>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="enablerecordingedls">true</dependency>
-          </dependencies>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14046</formatlabel>
-          </control>
         </setting>
-      </group>
-    </category>
 
-    <!-- Timers-->
-    <category id="timers" label="30072" help="30700">
-      <group id="1" label="30072">
-        <setting id="enablegenrepeattimers" type="boolean" label="30036" help="30701">
-          <level>1</level>
+        <!-- Timers-->
+        <setting id="enablegenrepeattimers" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
         </setting>
-        <setting id="numgenrepeattimers" type="integer" parent="enablegenrepeattimers" label="30073" help="30702">
-          <level>1</level>
+        <setting id="numgenrepeattimers" type="integer" parent="enablegenrepeattimers">
+          <level>4</level> <!-- hidden -->
           <default>1</default>
-          <constraints>
-            <minimum>1</minimum>
-            <step>1</step>
-            <maximum>10</maximum>
-          </constraints>
-          <dependencies>
-            <dependency type="enable" setting="enablegenrepeattimers">true</dependency>
-          </dependencies>
-          <control type="edit" format="integer" />
         </setting>
-        <setting id="timerlistcleanup" type="boolean" label="30011" help="30703">
-          <level>0</level>
+        <setting id="timerlistcleanup" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
+
         </setting>
-        <setting id="recordingpath" type="string" label="30023" help="30683">
-          <level>2</level>
+        <setting id="recordingpath" type="string">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <control type="edit" format="string" />
         </setting>
-      </group>
-      <group id="2" label="30123">
-        <setting id="enableautotimers" type="boolean" label="30034" help="30704">
-          <level>0</level>
+        <setting id="enableautotimers" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
         </setting>
-        <setting id="limitanychannelautotimers" type="boolean" label="30124" help="30705">
-          <level>2</level>
+        <setting id="limitanychannelautotimers" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <dependencies>
-            <dependency type="visible" setting="enableautotimers" operator="is">true</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-        <setting id="limitanychannelautotimerstogroups" type="boolean" parent="limitanychannelautotimers" label="30125" help="30706">
-          <level>2</level>
+        <setting id="limitanychannelautotimerstogroups" type="boolean" parent="limitanychannelautotimers">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <dependencies>
-            <dependency type="visible" setting="enableautotimers" operator="is">true</dependency>
-            <dependency type="enable" setting="limitanychannelautotimers">true</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-      </group>
-    </category>
 
-    <!-- Timeshift -->
-    <category id="timeshift" label="30060" help="30720">
-      <group id="1" label="30060">
-        <setting id="enabletimeshift" type="integer" label="30061" help="30721">
-          <level>0</level>
+        <!-- Timeshift -->
+        <setting id="enabletimeshift" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <options>
-              <option label="30063">0</option> <!-- OFF -->
-              <option label="30064">1</option> <!-- ON_PLAYBACK -->
-              <option label="30065">2</option> <!-- ON_PAUSE -->
-            </options>
-          </constraints>
-          <control type="spinner" format="integer" />
         </setting>
-        <setting id="timeshiftbufferpath" type="path" parent="enabletimeshift" label="30062" help="30722">
-          <level>0</level>
+        <setting id="timeshiftbufferpath" type="path" parent="enabletimeshift">
+          <level>4</level> <!-- hidden -->
           <default>special://userdata/addon_data/pvr.vuplus</default>
-          <constraints>
-            <allowempty>true</allowempty>
-            <writable>true</writable>
-          </constraints>
-          <dependencies>
-            <dependency type="enable" setting="enabletimeshift" operator="gt">0</dependency>
-          </dependencies>
-          <control type="button" format="path">
-            <heading>657</heading>
-          </control>
         </setting>
-        <setting id="enabletimeshiftdisklimit" type="boolean" label="30153" help="30727">
-          <level>0</level>
+        <setting id="enabletimeshiftdisklimit" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>false</default>
-          <control type="toggle" />
+
         </setting>
-        <setting id="timeshiftdisklimit" type="number" label="30154" help="30628">
-          <level>0</level>
+        <setting id="timeshiftdisklimit" type="number">
+          <level>4</level> <!-- hidden -->
           <default>4.0</default>
-          <constraints>
-            <minimum>0</minimum>
-            <step>0.1</step>
-            <maximum>128</maximum>
-          </constraints>
-          <dependencies>
-            <dependency type="visible" setting="enabletimeshiftdisklimit" operator="is">true</dependency>
-          </dependencies>
-          <control type="slider" format="number">
-            <formatlabel>30155</formatlabel>
-          </control>
         </setting>
-      </group>
-      <group id="2" label="30147">
-        <setting id="timeshiftEnabledIptv" type="boolean" label="30148" help="30723">
-          <level>0</level>
+        <setting id="timeshiftEnabledIptv" type="boolean">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <control type="toggle" />
+
         </setting>
-        <setting id="useFFmpegReconnect" type="boolean" parent="timeshiftEnabledIptv" label="30149" help="30724">
-          <level>3</level>
+        <setting id="useFFmpegReconnect" type="boolean" parent="timeshiftEnabledIptv">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <dependencies>
-            <dependency type="enable" setting="timeshiftEnabledIptv" operator="is">true</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
-        <setting id="useMpegtsForUnknownStreams" type="boolean" parent="timeshiftEnabledIptv" label="30150" help="30725">
-          <level>3</level>
+        <setting id="useMpegtsForUnknownStreams" type="boolean" parent="timeshiftEnabledIptv">
+          <level>4</level> <!-- hidden -->
           <default>true</default>
-          <dependencies>
-            <dependency type="enable" setting="timeshiftEnabledIptv" operator="is">true</dependency>
-          </dependencies>
-          <control type="toggle" />
-        </setting>
-        <setting id="ffmpegdirectSettings" type="action" label="30151" help="30726">
-          <level>0</level>
-          <data>Addon.OpenSettings(inputstream.ffmpegdirect)</data>
-          <dependencies>
-            <dependency type="enable" setting="timeshiftEnabledIptv" operator="is">true</dependency>
-          </dependencies>
-          <control type="button" format="action">
-            <close>true</close>
-          </control>
         </setting>
-      </group>
-    </category>
 
-    <!-- Backend -->
-    <category id="backend" label="30086" help="30760">
-      <group id="1" label="30090">
-        <setting id="webifversion" type="string" label="30091" help="30761">
-          <level>0</level>
-          <default>N/A</default>
-          <dependencies>
-            <dependency type="enable" setting="timeshiftbufferpath" operator="is">AnyTextThatDoesNotMatch</dependency>
-          </dependencies>
-          <control type="edit" format="string" />
-        </setting>
-        <setting id="autotimertagintags" type="string" label="30092" help="30762">
-          <level>0</level>
-          <default>N/A</default>
-          <dependencies>
-            <dependency type="enable" setting="timeshiftbufferpath" operator="is">AnyTextThatDoesNotMatch</dependency>
-          </dependencies>
-          <control type="edit" format="string" />
-        </setting>
-        <setting id="autotimernameintags" type="string" label="30093" help="30763">
-          <level>0</level>
-          <default>N/A</default>
-          <dependencies>
-            <dependency type="enable" setting="timeshiftbufferpath" operator="is">AnyTextThatDoesNotMatch</dependency>
-          </dependencies>
-          <control type="edit" format="string" />
-        </setting>
-      </group>
-
-      <group id="2" label="30145">
-        <setting id="wakeonlanmac" type="string" label="30146" help="30766">
-          <level>1</level>
+        <!-- Backend -->
+        <setting id="wakeonlanmac" type="string">
+          <level>4</level> <!-- hidden -->
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </constraints>
-          <control type="edit" format="string" />
         </setting>
-        <setting id="powerstatemode" type="integer" label="30024" help="30742">
-          <level>1</level>
+        <setting id="powerstatemode" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <options>
-              <option label="30430">0</option> <!-- DISABLED -->
-              <option label="30097">1</option> <!-- STANDBY -->
-              <option label="30098">2</option> <!-- DEEP_STANDBY -->
-              <option label="30099">3</option> <!-- WAKEUP_THEN_STANDBY -->
-            </options>
-          </constraints>
-          <control type="list" format="integer" />
         </setting>
-      </group>
-
-      <group id="3" label="30087">
-        <setting id="globalstartpaddingstb" type="integer" label="30088" help="30764">
-          <level>0</level>
+        <setting id="globalstartpaddingstb" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <minimum>0</minimum>
-            <step>1</step>
-            <maximum>120</maximum>
-          </constraints>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14044</formatlabel>
-          </control>
         </setting>
-        <setting id="globalendpaddingstb" type="integer" label="30089" help="30765">
-          <level>0</level>
+        <setting id="globalendpaddingstb" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <minimum>0</minimum>
-            <step>1</step>
-            <maximum>120</maximum>
-          </constraints>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14044</formatlabel>
-          </control>
         </setting>
-      </group>
-    </category>
 
-    <!-- Advanced -->
-    <category id="advanced" label="30020" help="30740">
-      <group id="1" label="30052">
-        <setting id="prependoutline" type="integer" label="30040" help="30741">
-          <level>1</level>
+        <!-- Advanced -->
+        <setting id="prependoutline" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <options>
-              <option label="30042">0</option> <!-- NEVER -->
-              <option label="30043">1</option> <!-- IN_EPG -->
-              <option label="30044">2</option> <!-- IN_RECORDINGS -->
-              <option label="30045">3</option> <!-- ALWAYS -->
-            </options>
-          </constraints>
-          <control type="list" format="integer" />
         </setting>
-        <setting id="readtimeout" type="integer" label="30050" help="30743">
-          <level>3</level>
+        <setting id="readtimeout" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <minimum>0</minimum>
-            <step>1</step>
-            <maximum>60</maximum>
-          </constraints>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14045</formatlabel>
-          </control>
         </setting>
-        <setting id="streamreadchunksize" type="integer" label="30041" help="30744">
-          <level>3</level>
+        <setting id="streamreadchunksize" type="integer">
+          <level>4</level> <!-- hidden -->
           <default>0</default>
-          <constraints>
-            <minimum>0</minimum>
-            <step>4</step>
-            <maximum>128</maximum>
-          </constraints>
-          <control type="slider" format="integer">
-            <popup>true</popup>
-            <formatlabel>14049</formatlabel>
-          </control>
-        </setting>
-        <setting id="nodebug" type="boolean" label="30144" help="30747">
-          <level>1</level>
-          <default>false</default>
-          <control type="toggle" />
-        </setting>
-        <setting id="debugnormal" type="boolean" parent="nodebug" label="30111" help="30745">
-          <level>1</level>
-          <default>false</default>
-          <dependencies>
-            <dependency type="enable" setting="nodebug">false</dependency>
-          </dependencies>
-          <control type="toggle" />
-        </setting>
-        <setting id="tracedebug" type="boolean" parent="nodebug" label="30104" help="30746">
-          <level>1</level>
-          <default>false</default>
-          <dependencies>
-            <dependency type="enable" setting="nodebug">false</dependency>
-          </dependencies>
-          <control type="toggle" />
         </setting>
       </group>
     </category>
diff --git a/src/Enigma2.cpp b/src/Enigma2.cpp
index 40a02b1..e039915 100644
--- a/src/Enigma2.cpp
+++ b/src/Enigma2.cpp
@@ -42,12 +42,13 @@ template<typename T> void SafeDelete(T*& p)
 
 Enigma2::Enigma2(const kodi::addon::IInstanceInfo& instance)
   : enigma2::IConnectionListener(instance),
+    m_settings(new InstanceSettings(*this)),
     m_epgMaxPastDays(EpgMaxPastDays()),
     m_epgMaxFutureDays(EpgMaxFutureDays())
 {
   m_timers.AddTimerChangeWatcher(&m_dueRecordingUpdate);
 
-  connectionManager = new ConnectionManager(*this);
+  connectionManager = new ConnectionManager(*this, m_settings);
 }
 
 Enigma2::~Enigma2()
@@ -57,6 +58,12 @@ Enigma2::~Enigma2()
   delete connectionManager;
 }
 
+ADDON_STATUS Enigma2::SetInstanceSetting(const std::string& settingName,
+                                         const kodi::addon::CSettingValue& settingValue)
+{
+  return m_settings->SetSetting(settingName, settingValue);
+}
+
 PVR_ERROR Enigma2::GetCapabilities(kodi::addon::PVRCapabilities& capabilities)
 {
   capabilities.SetSupportsEPG(true);
@@ -72,14 +79,14 @@ PVR_ERROR Enigma2::GetCapabilities(kodi::addon::PVRCapabilities& capabilities)
   capabilities.SetSupportsChannelSettings(false);
   capabilities.SetHandlesInputStream(true);
   capabilities.SetHandlesDemuxing(false);
-  capabilities.SetSupportsRecordingPlayCount(m_settings.SupportsEditingRecordings() && m_settings.GetStoreRecordingLastPlayedAndCount());
-  capabilities.SetSupportsLastPlayedPosition(m_settings.SupportsEditingRecordings() && m_settings.GetStoreRecordingLastPlayedAndCount());
+  capabilities.SetSupportsRecordingPlayCount(m_settings->SupportsEditingRecordings() && m_settings->GetStoreRecordingLastPlayedAndCount());
+  capabilities.SetSupportsLastPlayedPosition(m_settings->SupportsEditingRecordings() && m_settings->GetStoreRecordingLastPlayedAndCount());
   capabilities.SetSupportsRecordingEdl(true);
-  capabilities.SetSupportsRecordingsRename(m_settings.SupportsEditingRecordings());
+  capabilities.SetSupportsRecordingsRename(m_settings->SupportsEditingRecordings());
   capabilities.SetSupportsRecordingsLifetimeChange(false);
   capabilities.SetSupportsDescrambleInfo(false);
   capabilities.SetSupportsAsyncEPGTransfer(false);
-  capabilities.SetSupportsRecordingSize(m_settings.SupportsRecordingSizes());
+  capabilities.SetSupportsRecordingSize(m_settings->SupportsRecordingSizes());
   capabilities.SetSupportsProviders(true);
 
   return PVR_ERROR_NO_ERROR;
@@ -99,13 +106,13 @@ PVR_ERROR Enigma2::GetBackendVersion(std::string& version)
 
 PVR_ERROR Enigma2::GetBackendHostname(std::string& hostname)
 {
-  hostname = m_settings.GetHostname();
+  hostname = m_settings->GetHostname();
   return PVR_ERROR_NO_ERROR;
 }
 
 PVR_ERROR Enigma2::GetConnectionString(std::string& connection)
 {
-  connection = StringUtils::Format("%s%s", m_settings.GetHostname().c_str(), IsConnected() ? "" : kodi::addon::GetLocalizedString(30082).c_str()); // (Not connected!)
+  connection = StringUtils::Format("%s%s", m_settings->GetHostname().c_str(), IsConnected() ? "" : kodi::addon::GetLocalizedString(30082).c_str()); // (Not connected!)
   return PVR_ERROR_NO_ERROR;
 }
 
@@ -139,10 +146,10 @@ void Enigma2::ConnectionEstablished()
   Logger::Log(LEVEL_INFO, "%s Connection Established with Enigma2 device...", __func__);
 
   Logger::Log(LEVEL_INFO, "%s - VU+ Addon Configuration options", __func__);
-  Logger::Log(LEVEL_INFO, "%s - Hostname: '%s'", __func__, m_settings.GetHostname().c_str());
-  Logger::Log(LEVEL_INFO, "%s - WebPort: '%d'", __func__, m_settings.GetWebPortNum());
-  Logger::Log(LEVEL_INFO, "%s - StreamPort: '%d'", __func__, m_settings.GetStreamPortNum());
-  if (!m_settings.GetUseSecureConnection())
+  Logger::Log(LEVEL_INFO, "%s - Hostname: '%s'", __func__, m_settings->GetHostname().c_str());
+  Logger::Log(LEVEL_INFO, "%s - WebPort: '%d'", __func__, m_settings->GetWebPortNum());
+  Logger::Log(LEVEL_INFO, "%s - StreamPort: '%d'", __func__, m_settings->GetStreamPortNum());
+  if (!m_settings->GetUseSecureConnection())
     Logger::Log(LEVEL_INFO, "%s Use HTTPS: 'false'", __func__);
   else
     Logger::Log(LEVEL_INFO, "%s Use HTTPS: 'true'", __func__);
@@ -156,8 +163,6 @@ void Enigma2::ConnectionEstablished()
     return;
   }
 
-  m_settings.ReadFromAddon();
-
   m_recordings.ClearLocations();
   m_recordings.LoadLocations();
 
@@ -231,7 +236,7 @@ void Enigma2::Process()
 
   unsigned int updateTimer = 0;
   time_t lastUpdateTimeSeconds = std::time(nullptr);
-  int lastUpdateHour = m_settings.GetChannelAndGroupUpdateHour(); //ignore if we start during same hour
+  int lastUpdateHour = m_settings->GetChannelAndGroupUpdateHour(); //ignore if we start during same hour
 
   while (m_running && m_isConnected)
   {
@@ -242,7 +247,7 @@ void Enigma2::Process()
     updateTimer += static_cast<unsigned int>(currentUpdateTimeSeconds - lastUpdateTimeSeconds);
     lastUpdateTimeSeconds = currentUpdateTimeSeconds;
 
-    if (m_dueRecordingUpdate || updateTimer >= (m_settings.GetUpdateIntervalMins() * 60))
+    if (m_dueRecordingUpdate || updateTimer >= (m_settings->GetUpdateIntervalMins() * 60))
     {
       updateTimer = 0;
 
@@ -253,13 +258,13 @@ void Enigma2::Process()
       {
         Logger::Log(LEVEL_INFO, "%s Perform Updates!", __func__);
 
-        if (m_settings.GetAutomaticTimerListCleanupEnabled())
+        if (m_settings->GetAutomaticTimerListCleanupEnabled())
         {
           m_timers.RunAutoTimerListCleanup();
         }
         m_timers.TimerUpdates();
 
-        if (m_dueRecordingUpdate || m_settings.GetUpdateMode() == UpdateMode::TIMERS_AND_RECORDINGS)
+        if (m_dueRecordingUpdate || m_settings->GetUpdateMode() == UpdateMode::TIMERS_AND_RECORDINGS)
         {
           m_dueRecordingUpdate = false;
           kodi::addon::CInstancePVRClient::TriggerRecordingUpdate();
@@ -267,7 +272,7 @@ void Enigma2::Process()
       }
     }
 
-    if (lastUpdateHour != timeInfo.tm_hour && timeInfo.tm_hour == m_settings.GetChannelAndGroupUpdateHour())
+    if (lastUpdateHour != timeInfo.tm_hour && timeInfo.tm_hour == m_settings->GetChannelAndGroupUpdateHour())
     {
       // Trigger Channel and Group updates according to the addon settings
       std::lock_guard<std::mutex> lock(m_mutex);
@@ -275,7 +280,7 @@ void Enigma2::Process()
       if (m_running && m_isConnected)
       {
         if (CheckForChannelAndGroupChanges() != ChannelsChangeState::NO_CHANGE &&
-            m_settings.GetChannelAndGroupUpdateMode() == ChannelAndGroupUpdateMode::RELOAD_CHANNELS_AND_GROUPS)
+            m_settings->GetChannelAndGroupUpdateMode() == ChannelAndGroupUpdateMode::RELOAD_CHANNELS_AND_GROUPS)
         {
           ReloadChannelsGroupsAndEPG();
         }
@@ -289,14 +294,14 @@ ChannelsChangeState Enigma2::CheckForChannelAndGroupChanges()
 {
   ChannelsChangeState changeType = ChannelsChangeState::NO_CHANGE;
 
-  if (m_settings.GetChannelAndGroupUpdateMode() != ChannelAndGroupUpdateMode::DISABLED)
+  if (m_settings->GetChannelAndGroupUpdateMode() != ChannelAndGroupUpdateMode::DISABLED)
   {
     Logger::Log(LEVEL_INFO, "%s Checking for Channel and Group Changes!", __func__);
 
     //Now check for any channel or group changes
-    Providers latestProviders;
-    ChannelGroups latestChannelGroups;
-    Channels latestChannels{latestProviders};
+    Providers latestProviders{m_settings};
+    ChannelGroups latestChannelGroups{m_settings};
+    Channels latestChannels{latestProviders, m_settings};
 
     // Load the TV channels - close connection if no channels are found
     if (latestChannelGroups.LoadChannelGroups())
@@ -305,7 +310,7 @@ ChannelsChangeState Enigma2::CheckForChannelAndGroupChanges()
       {
         changeType = m_channels.CheckForChannelAndGroupChanges(latestChannelGroups, latestChannels);
 
-        if (m_settings.GetChannelAndGroupUpdateMode() == ChannelAndGroupUpdateMode::NOTIFY_AND_LOG)
+        if (m_settings->GetChannelAndGroupUpdateMode() == ChannelAndGroupUpdateMode::NOTIFY_AND_LOG)
         {
           if (changeType == ChannelsChangeState::CHANNEL_GROUPS_CHANGED)
           {
@@ -513,7 +518,7 @@ PVR_ERROR Enigma2::GetChannelStreamProperties(const kodi::addon::PVRChannel& cha
   {
     properties.emplace_back(PVR_STREAM_PROPERTY_MIMETYPE, "video/mp2t");
 
-    if (m_settings.SetStreamProgramID())
+    if (m_settings->SetStreamProgramID())
     {
       const std::string strStreamProgramNumber = std::to_string(GetChannelStreamProgramNumber(channel));
 
@@ -528,19 +533,19 @@ PVR_ERROR Enigma2::GetChannelStreamProperties(const kodi::addon::PVRChannel& cha
     std::string streamURL = GetLiveStreamURL(channel);
 
     if (StreamUtils::CheckInputstreamInstalledAndEnabled(INPUTSTREAM_FFMPEGDIRECT) &&
-        Settings::GetInstance().IsTimeshiftEnabledIptv())
+        m_settings->IsTimeshiftEnabledIptv())
     {
       StreamType streamType = StreamUtils::GetStreamType(streamURL);
       if (streamType == StreamType::OTHER_TYPE)
-        streamType = StreamUtils::InspectStreamType(streamURL);
+        streamType = StreamUtils::InspectStreamType(streamURL, m_settings->UseMpegtsForUnknownStreams());
 
       properties.emplace_back(PVR_STREAM_PROPERTY_INPUTSTREAM, INPUTSTREAM_FFMPEGDIRECT);
       StreamUtils::SetFFmpegDirectManifestTypeStreamProperty(properties, streamURL, streamType);
       properties.emplace_back("inputstream.ffmpegdirect.stream_mode", "timeshift");
       properties.emplace_back("inputstream.ffmpegdirect.is_realtime_stream", "true");
 
-
-      streamURL = StreamUtils::GetURLWithFFmpegReconnectOptions(streamURL, streamType);
+      if (m_settings->UseFFmpegReconnect())
+        streamURL = StreamUtils::GetURLWithFFmpegReconnectOptions(streamURL, streamType);
     }
 
     properties.emplace_back(PVR_STREAM_PROPERTY_STREAMURL, streamURL);
@@ -555,8 +560,8 @@ PVR_ERROR Enigma2::GetChannelStreamProperties(const kodi::addon::PVRChannel& cha
 
 PVR_ERROR Enigma2::GetEPGForChannel(int channelUid, time_t start, time_t end, kodi::addon::PVREPGTagsResultSet& results)
 {
-  if (m_settings.GetEPGDelayPerChannelDelay() != 0)
-    std::this_thread::sleep_for(std::chrono::seconds(m_settings.GetEPGDelayPerChannelDelay()));
+  if (m_settings->GetEPGDelayPerChannelDelay() != 0)
+    std::this_thread::sleep_for(std::chrono::seconds(m_settings->GetEPGDelayPerChannelDelay()));
 
   //Have a lock while getting the channel. Then we don't have to worry about a disconnection while retrieving the EPG data.
   std::shared_ptr<Channel> myChannel;
@@ -610,7 +615,7 @@ bool Enigma2::OpenLiveStream(const kodi::addon::PVRChannel& channelinfo)
     m_currentChannel = channelinfo.GetUniqueId();
     m_lastSignalStatusUpdateSeconds = 0;
 
-    if (m_settings.GetZapBeforeChannelSwitch())
+    if (m_settings->GetZapBeforeChannelSwitch())
     {
       // Zapping is set to true, so send the zapping command to the PVR box
       const std::string strServiceReference = m_channels.GetChannel(channelinfo.GetUniqueId())->GetServiceReference().c_str();
@@ -618,21 +623,21 @@ bool Enigma2::OpenLiveStream(const kodi::addon::PVRChannel& channelinfo)
       const std::string strCmd = StringUtils::Format("web/zap?sRef=%s", WebUtils::URLEncodeInline(strServiceReference).c_str());
 
       std::string strResult;
-      if (!WebUtils::SendSimpleCommand(strCmd, strResult, true))
+      if (!WebUtils::SendSimpleCommand(strCmd, m_settings->GetConnectionURL(), strResult, true))
         return false;
     }
   }
 
   /* queue a warning if the timeshift buffer path does not exist */
-  if (m_settings.GetTimeshift() != Timeshift::OFF && !m_settings.IsTimeshiftBufferPathValid())
+  if (m_settings->GetTimeshift() != Timeshift::OFF && !m_settings->IsTimeshiftBufferPathValid())
     kodi::QueueNotification(QUEUE_ERROR, "", kodi::addon::GetLocalizedString(30514));
 
   const std::string streamURL = GetLiveStreamURL(channelinfo);
-  m_activeStreamReader = new StreamReader(streamURL, m_settings.GetReadTimeoutSecs());
-  if (m_settings.GetTimeshift() == Timeshift::ON_PLAYBACK && m_settings.IsTimeshiftBufferPathValid())
+  m_activeStreamReader = new StreamReader(streamURL, m_settings->GetReadTimeoutSecs());
+  if (m_settings->GetTimeshift() == Timeshift::ON_PLAYBACK && m_settings->IsTimeshiftBufferPathValid())
   {
     m_timeshiftInternalStreamReader = m_activeStreamReader;
-    m_activeStreamReader = new TimeshiftBuffer(m_activeStreamReader);
+    m_activeStreamReader = new TimeshiftBuffer(m_activeStreamReader, m_settings);
   }
 
   return m_activeStreamReader->Start();
@@ -649,7 +654,7 @@ void Enigma2::CloseLiveStream()
 
 const std::string Enigma2::GetLiveStreamURL(const kodi::addon::PVRChannel& channelinfo)
 {
-  if (m_settings.GetAutoConfigLiveStreamsEnabled())
+  if (m_settings->GetAutoConfigLiveStreamsEnabled())
   {
     // we need to download the M3U file that contains the URL for the stream...
     // we do it here for 2 reasons:
@@ -754,7 +759,7 @@ PVR_ERROR Enigma2::GetRecordingEdl(const kodi::addon::PVRRecording& recording, s
   if (!IsConnected())
     return PVR_ERROR_SERVER_ERROR;
 
-  if (!m_settings.GetRecordingEDLsEnabled())
+  if (!m_settings->GetRecordingEDLsEnabled())
     return PVR_ERROR_NO_ERROR;
 
 
@@ -850,7 +855,7 @@ PVR_ERROR Enigma2::GetRecordingSize(const kodi::addon::PVRRecording& recording,
 
 PVR_ERROR Enigma2::GetRecordingStreamProperties(const kodi::addon::PVRRecording& recording, std::vector<kodi::addon::PVRStreamProperty>& properties)
 {
-  if (!m_settings.SetStreamProgramID())
+  if (!m_settings->SetStreamProgramID())
     return PVR_ERROR_NOT_IMPLEMENTED;
 
   //
@@ -1009,10 +1014,10 @@ PVR_ERROR Enigma2::GetStreamReadChunkSize(int& chunksize)
 {
   if (!chunksize)
     return PVR_ERROR_INVALID_PARAMETERS;
-  int size = m_settings.GetStreamReadChunkSizeKb();
+  int size = m_settings->GetStreamReadChunkSizeKb();
   if (!size)
     return PVR_ERROR_NOT_IMPLEMENTED;
-  chunksize = m_settings.GetStreamReadChunkSizeKb() * 1024;
+  chunksize = m_settings->GetStreamReadChunkSizeKb() * 1024;
   return PVR_ERROR_NO_ERROR;
 }
 
@@ -1028,8 +1033,8 @@ bool Enigma2::CanPauseStream()
   if (!IsConnected())
     return false;
 
-  if (m_settings.GetTimeshift() != Timeshift::OFF && m_activeStreamReader && m_settings.IsTimeshiftBufferPathValid())
-    return (m_settings.GetTimeshift() == Timeshift::ON_PAUSE || m_paused || m_activeStreamReader->HasTimeshiftCapacity());
+  if (m_settings->GetTimeshift() != Timeshift::OFF && m_activeStreamReader && m_settings->IsTimeshiftBufferPathValid())
+    return (m_settings->GetTimeshift() == Timeshift::ON_PAUSE || m_paused || m_activeStreamReader->HasTimeshiftCapacity());
 
   return false;
 }
@@ -1039,7 +1044,7 @@ bool Enigma2::CanSeekStream()
   if (!IsConnected())
     return false;
 
-  return (m_settings.GetTimeshift() != Timeshift::OFF);
+  return (m_settings->GetTimeshift() != Timeshift::OFF);
 }
 
 int Enigma2::ReadLiveStream(unsigned char* buffer, unsigned int size)
@@ -1071,7 +1076,7 @@ PVR_ERROR Enigma2::GetStreamTimes(kodi::addon::PVRStreamTimes& times)
     {
       if (!m_activeStreamReader->HasTimeshiftCapacity())
       {
-        Logger::Log(LEVEL_INFO, "%s Timeshift disk limit of %.1f GiB exceeded, switching to live stream without timehift", __func__, m_settings.GetTimeshiftDiskLimitGB());
+        Logger::Log(LEVEL_INFO, "%s Timeshift disk limit of %.1f GiB exceeded, switching to live stream without timehift", __func__, m_settings->GetTimeshiftDiskLimitGB());
         IStreamReader* timeshiftedReader = m_activeStreamReader;
         m_activeStreamReader = m_timeshiftInternalStreamReader;
         m_timeshiftInternalStreamReader = nullptr;
@@ -1100,12 +1105,12 @@ void Enigma2::PauseStream(bool paused)
     return;
 
   /* start timeshift on pause */
-  if (paused && m_settings.GetTimeshift() == Timeshift::ON_PAUSE &&
+  if (paused && m_settings->GetTimeshift() == Timeshift::ON_PAUSE &&
       m_activeStreamReader && !m_activeStreamReader->IsTimeshifting() &&
-      m_settings.IsTimeshiftBufferPathValid())
+      m_settings->IsTimeshiftBufferPathValid())
   {
     m_timeshiftInternalStreamReader = m_activeStreamReader;
-    m_activeStreamReader = new TimeshiftBuffer(m_activeStreamReader);
+    m_activeStreamReader = new TimeshiftBuffer(m_activeStreamReader, m_settings);
     m_activeStreamReader->Start();
   }
 
diff --git a/src/Enigma2.h b/src/Enigma2.h
index 82f98e5..fd99638 100644
--- a/src/Enigma2.h
+++ b/src/Enigma2.h
@@ -14,9 +14,9 @@
 #include "enigma2/ConnectionManager.h"
 #include "enigma2/Epg.h"
 #include "enigma2/IConnectionListener.h"
+#include "enigma2/InstanceSettings.h"
 #include "enigma2/RecordingReader.h"
 #include "enigma2/Recordings.h"
-#include "enigma2/Settings.h"
 #include "enigma2/StreamReader.h"
 #include "enigma2/Timers.h"
 #include "enigma2/data/BaseEntry.h"
@@ -54,6 +54,10 @@ public:
   void SendPowerstate();
   bool IsConnected() const;
 
+  // kodi::addon::CInstancePVRClient -> kodi::addon::IAddonInstance overrides
+  ADDON_STATUS SetInstanceSetting(const std::string& settingName,
+                                  const kodi::addon::CSettingValue& settingValue) override;
+
   PVR_ERROR OnSystemSleep() override;
   PVR_ERROR OnSystemWake() override;
 
@@ -146,16 +150,16 @@ private:
   int m_epgMaxPastDays;
   int m_epgMaxFutureDays;
 
-  enigma2::Providers m_providers;
-  mutable enigma2::Channels m_channels{m_providers};
-  enigma2::ChannelGroups m_channelGroups;
-  enigma2::Recordings m_recordings{*this, m_channels, m_providers, m_entryExtractor};
+  std::shared_ptr<enigma2::InstanceSettings> m_settings;
+  enigma2::Providers m_providers{m_settings};
+  mutable enigma2::Channels m_channels{m_providers, m_settings};
+  enigma2::ChannelGroups m_channelGroups{m_settings};
+  enigma2::Recordings m_recordings{*this, m_settings, m_channels, m_providers, m_entryExtractor};
   std::vector<std::string>& m_locations = m_recordings.GetLocations();
-  enigma2::Epg m_epg{*this, m_channels, m_entryExtractor, m_epgMaxPastDays, m_epgMaxFutureDays};
-  enigma2::Timers m_timers{*this, m_channels, m_channelGroups, m_locations, m_epg, m_entryExtractor};
-  enigma2::Settings& m_settings = enigma2::Settings::GetInstance();
-  enigma2::Admin m_admin;
-  enigma2::extract::EpgEntryExtractor m_entryExtractor;
+  enigma2::Epg m_epg{*this, m_channels, m_entryExtractor, m_settings, m_epgMaxPastDays, m_epgMaxFutureDays};
+  enigma2::Timers m_timers{*this, m_settings, m_channels, m_channelGroups, m_locations, m_epg, m_entryExtractor};
+  enigma2::Admin m_admin{m_settings};
+  enigma2::extract::EpgEntryExtractor m_entryExtractor{m_settings};
   enigma2::utilities::SignalStatus m_signalStatus;
   enigma2::ConnectionManager* connectionManager;
 
diff --git a/src/addon.cpp b/src/addon.cpp
index 9e08cff..8721748 100644
--- a/src/addon.cpp
+++ b/src/addon.cpp
@@ -7,6 +7,7 @@
 
 #include "addon.h"
 #include "Enigma2.h"
+#include "enigma2/utilities/SettingsMigration.h"
 
 using namespace enigma2;
 using namespace enigma2::data;
@@ -14,13 +15,16 @@ using namespace enigma2::utilities;
 
 ADDON_STATUS CEnigma2Addon::Create()
 {
+  /* Init settings */
+  m_settings.reset(new AddonSettings());
+
   Logger::Log(LEVEL_DEBUG, "%s - Creating VU+ PVR-Client", __func__);
 
   /* Configure the logger */
-  Logger::GetInstance().SetImplementation([](LogLevel level, const char* message)
+  Logger::GetInstance().SetImplementation([this](LogLevel level, const char* message)
   {
     /* Don't log trace messages unless told so */
-    if (level == LogLevel::LEVEL_TRACE && !Settings::GetInstance().GetTraceDebug())
+    if (level == LogLevel::LEVEL_TRACE && !m_settings->GetTraceDebug())
       return;
 
     /* Convert the log level */
@@ -44,10 +48,10 @@ ADDON_STATUS CEnigma2Addon::Create()
         addonLevel = ADDON_LOG::ADDON_LOG_DEBUG;
     }
 
-    if (addonLevel == ADDON_LOG::ADDON_LOG_DEBUG && Settings::GetInstance().GetNoDebug())
+    if (addonLevel == ADDON_LOG::ADDON_LOG_DEBUG && m_settings->GetNoDebug())
       return;
 
-    if (addonLevel == ADDON_LOG::ADDON_LOG_DEBUG && Settings::GetInstance().GetDebugNormal())
+    if (addonLevel == ADDON_LOG::ADDON_LOG_DEBUG && m_settings->GetDebugNormal())
       addonLevel = ADDON_LOG::ADDON_LOG_INFO;
 
     kodi::Log(addonLevel, "%s", message);
@@ -57,14 +61,12 @@ ADDON_STATUS CEnigma2Addon::Create()
 
   Logger::Log(LogLevel::LEVEL_INFO, "%s starting PVR client...", __func__);
 
-  m_settings.ReadFromAddon();
-
   return ADDON_STATUS_OK;
 }
 
 ADDON_STATUS CEnigma2Addon::SetSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue)
 {
-  return m_settings.SetValue(settingName, settingValue);
+  return m_settings->SetSetting(settingName, settingValue);
 }
 
 ADDON_STATUS CEnigma2Addon::CreateInstance(const kodi::addon::IInstanceInfo& instance, KODI_ADDON_INSTANCE_HDL& hdl)
@@ -77,6 +79,14 @@ ADDON_STATUS CEnigma2Addon::CreateInstance(const kodi::addon::IInstanceInfo& ins
       delete usedInstance;
       return ADDON_STATUS_PERMANENT_FAILURE;
     }
+
+    // Try to migrate settings from a pre-multi-instance setup
+    if (SettingsMigration::MigrateSettings(*usedInstance))
+    {
+      // Initial client operated on old/incomplete settings
+      delete usedInstance;
+      usedInstance = new Enigma2(instance);
+    }
     hdl = usedInstance;
 
     // Store this instance also on this class, currently support Kodi only one
diff --git a/src/addon.h b/src/addon.h
index 8080b66..bd73fb3 100644
--- a/src/addon.h
+++ b/src/addon.h
@@ -8,9 +8,11 @@
 #pragma once
 
 #include <kodi/AddonBase.h>
+
+#include <memory>
 #include <unordered_map>
 
-#include "enigma2/Settings.h"
+#include "enigma2/AddonSettings.h"
 
 class Enigma2;
 
@@ -26,5 +28,5 @@ public:
 
 private:
   std::unordered_map<std::string, Enigma2*> m_usedInstances;
-  enigma2::Settings& m_settings = enigma2::Settings::GetInstance();
+  std::shared_ptr<enigma2::AddonSettings> m_settings;
 };
diff --git a/src/enigma2/AddonSettings.cpp b/src/enigma2/AddonSettings.cpp
new file mode 100644
index 0000000..479a69a
--- /dev/null
+++ b/src/enigma2/AddonSettings.cpp
@@ -0,0 +1,75 @@
+/*
+ *  Copyright (C) 2005-2022 Team Kodi (https://kodi.tv)
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ *  See LICENSE.md for more information.
+ */
+
+#include "AddonSettings.h"
+
+#include "utilities/FileUtils.h"
+#include "utilities/Logger.h"
+#include "utilities/SettingsMigration.h"
+
+#include "kodi/General.h"
+
+using namespace enigma2;
+using namespace enigma2::utilities;
+
+namespace
+{
+
+constexpr bool DEFAULT_TRACE_DEBUG = false;
+
+bool ReadBoolSetting(const std::string& key, bool def)
+{
+  bool value;
+  if (kodi::addon::CheckSettingBoolean(key, value))
+    return value;
+
+  return def;
+}
+
+ADDON_STATUS SetBoolSetting(bool oldValue, const kodi::addon::CSettingValue& newValue)
+{
+  if (oldValue == newValue.GetBoolean())
+    return ADDON_STATUS_OK;
+
+  return ADDON_STATUS_NEED_RESTART;
+}
+
+} // unnamed namespace
+
+AddonSettings::AddonSettings()
+{
+  ReadSettings();
+}
+
+void AddonSettings::ReadSettings()
+{
+  FileUtils::CopyDirectory(FileUtils::GetResourceDataPath() + CHANNEL_GROUPS_DIR, CHANNEL_GROUPS_ADDON_DATA_BASE_DIR, true);
+
+  m_noDebug = kodi::addon::GetSettingBoolean("nodebug", false);
+  m_debugNormal = kodi::addon::GetSettingBoolean("debugnormal", false);
+  m_traceDebug = kodi::addon::GetSettingBoolean("tracedebug", false);
+}
+
+ADDON_STATUS AddonSettings::SetSetting(const std::string& settingName,
+                                       const kodi::addon::CSettingValue& settingValue)
+{
+  if (settingName == "nodebug")
+    return SetSetting<bool, ADDON_STATUS>(settingName, settingValue, m_noDebug, ADDON_STATUS_OK, ADDON_STATUS_OK);
+  else if (settingName == "debugnormal")
+    return SetSetting<bool, ADDON_STATUS>(settingName, settingValue, m_debugNormal, ADDON_STATUS_OK, ADDON_STATUS_OK);
+  else if (settingName == "tracedebug")
+    return SetSetting<bool, ADDON_STATUS>(settingName, settingValue, m_traceDebug, ADDON_STATUS_OK, ADDON_STATUS_OK);
+  else if (SettingsMigration::IsMigrationSetting(settingName))
+  {
+    // ignore settings from pre-multi-instance setup
+    return ADDON_STATUS_OK;
+  }
+
+  Logger::Log(LogLevel::LEVEL_ERROR, "AddonSettings::SetSetting - unknown setting '%s'",
+              settingName.c_str());
+  return ADDON_STATUS_UNKNOWN;
+}
\ No newline at end of file
diff --git a/src/enigma2/AddonSettings.h b/src/enigma2/AddonSettings.h
new file mode 100644
index 0000000..d07d972
--- /dev/null
+++ b/src/enigma2/AddonSettings.h
@@ -0,0 +1,110 @@
+/*
+ *  Copyright (C) 2005-2022 Team Kodi (https://kodi.tv)
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ *  See LICENSE.md for more information.
+ */
+
+#pragma once
+
+#include "utilities/Logger.h"
+
+#include <string>
+
+#include "kodi/AddonBase.h"
+
+namespace enigma2
+{
+  static const std::string CHANNEL_GROUPS_DIR = "/channelGroups";
+  static const std::string CHANNEL_GROUPS_ADDON_DATA_BASE_DIR = "special://userdata/addon_data/pvr.vuplus" + CHANNEL_GROUPS_DIR;
+
+/**
+   * Represents the current addon settings
+   */
+class AddonSettings
+{
+  public:
+    AddonSettings();
+
+    /**
+     * Set a value according to key definition in settings.xml
+     */
+    ADDON_STATUS SetSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue);
+
+    /**
+     * Getters for the settings values
+     */
+    bool GetNoDebug() const { return m_noDebug; };
+    bool GetDebugNormal() const { return m_debugNormal; };
+    bool GetTraceDebug() const { return m_traceDebug; };
+
+  private:
+    AddonSettings(const AddonSettings&) = delete;
+    void operator=(const AddonSettings&) = delete;
+
+    template<typename T, typename V>
+    V SetSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue, T& currentValue, V returnValueIfChanged, V defaultReturnValue)
+    {
+      T newValue;
+      if (std::is_same<T, float>::value)
+        newValue = static_cast<T>(settingValue.GetFloat());
+      else if (std::is_same<T, bool>::value)
+        newValue = static_cast<T>(settingValue.GetBoolean());
+      else if (std::is_same<T, unsigned int>::value)
+        newValue = static_cast<T>(settingValue.GetUInt());
+      else
+        newValue = static_cast<T>(settingValue.GetInt());
+
+      if (newValue != currentValue)
+      {
+        std::string formatString = "%s - Changed Setting '%s' from %d to %d";
+        if (std::is_same<T, float>::value)
+          formatString = "%s - Changed Setting '%s' from %f to %f";
+        utilities::Logger::Log(utilities::LogLevel::LEVEL_INFO, formatString.c_str(), __FUNCTION__, settingName.c_str(), currentValue, newValue);
+        currentValue = newValue;
+        return returnValueIfChanged;
+      }
+
+      return defaultReturnValue;
+    }
+
+    template<typename T, typename V>
+    V SetEnumSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue, T& currentValue, V returnValueIfChanged, V defaultReturnValue)
+    {
+      T newValue = settingValue.GetEnum<T>();
+      if (newValue != currentValue)
+      {
+        utilities::Logger::Log(utilities::LogLevel::LEVEL_INFO, "%s - Changed Setting '%s' from %d to %d", __FUNCTION__, settingName.c_str(), currentValue, newValue);
+        currentValue = newValue;
+        return returnValueIfChanged;
+      }
+
+      return defaultReturnValue;
+    }
+
+    template<typename V>
+    V SetStringSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue, std::string& currentValue, V returnValueIfChanged, V defaultReturnValue)
+    {
+      const std::string strSettingValue = settingValue.GetString();
+
+      if (strSettingValue != currentValue)
+      {
+        utilities::Logger::Log(utilities::LogLevel::LEVEL_INFO, "%s - Changed Setting '%s' from '%s' to '%s'", __func__, settingName.c_str(), currentValue.c_str(), strSettingValue.c_str());
+        currentValue = strSettingValue;
+        return returnValueIfChanged;
+      }
+
+      return defaultReturnValue;
+    }
+
+    /**
+     * Read all settings defined in settings.xml
+     */
+    void ReadSettings();
+
+    bool m_noDebug = false;
+    bool m_debugNormal = false;
+    bool m_traceDebug = false;
+};
+
+} // namespace enigma2
\ No newline at end of file
diff --git a/src/enigma2/Admin.cpp b/src/enigma2/Admin.cpp
index 9d86964..38f1694 100644
--- a/src/enigma2/Admin.cpp
+++ b/src/enigma2/Admin.cpp
@@ -27,7 +27,7 @@ using namespace enigma2::utilities;
 using namespace kodi::tools;
 using json = nlohmann::json;
 
-Admin::Admin() : m_addonVersion(STR(VUPLUS_VERSION))
+Admin::Admin(std::shared_ptr<InstanceSettings> settings) : m_settings(settings), m_addonVersion(STR(VUPLUS_VERSION))
 {
   m_serverName[0] = '\0';
   m_serverVersion[0] = '\0';
@@ -35,31 +35,33 @@ Admin::Admin() : m_addonVersion(STR(VUPLUS_VERSION))
 
 void Admin::SendPowerstate()
 {
-  if (Settings::GetInstance().GetPowerstateModeOnAddonExit() != PowerstateMode::DISABLED)
+  if (m_settings->GetPowerstateModeOnAddonExit() != PowerstateMode::DISABLED)
   {
-    if (Settings::GetInstance().GetPowerstateModeOnAddonExit() == PowerstateMode::WAKEUP_THEN_STANDBY)
+    std::string connectionURL = m_settings->GetConnectionURL();
+
+    if (m_settings->GetPowerstateModeOnAddonExit() == PowerstateMode::WAKEUP_THEN_STANDBY)
     {
       const std::string strCmd = StringUtils::Format("web/powerstate?newstate=4"); //Wakeup
 
       std::string strResult;
-      WebUtils::SendSimpleCommand(strCmd, strResult, true);
+      WebUtils::SendSimpleCommand(strCmd, connectionURL, strResult, true);
     }
 
-    if (Settings::GetInstance().GetPowerstateModeOnAddonExit() == PowerstateMode::STANDBY ||
-      Settings::GetInstance().GetPowerstateModeOnAddonExit() == PowerstateMode::WAKEUP_THEN_STANDBY)
+    if (m_settings->GetPowerstateModeOnAddonExit() == PowerstateMode::STANDBY ||
+      m_settings->GetPowerstateModeOnAddonExit() == PowerstateMode::WAKEUP_THEN_STANDBY)
     {
       const std::string strCmd = StringUtils::Format("web/powerstate?newstate=5"); //Standby
 
       std::string strResult;
-      WebUtils::SendSimpleCommand(strCmd, strResult, true);
+      WebUtils::SendSimpleCommand(strCmd, connectionURL, strResult, true);
     }
 
-    if (Settings::GetInstance().GetPowerstateModeOnAddonExit() == PowerstateMode::DEEP_STANDBY)
+    if (m_settings->GetPowerstateModeOnAddonExit() == PowerstateMode::DEEP_STANDBY)
     {
       const std::string strCmd = StringUtils::Format("web/powerstate?newstate=1"); //Deep Standby
 
       std::string strResult;
-      WebUtils::SendSimpleCommand(strCmd, strResult, true);
+      WebUtils::SendSimpleCommand(strCmd, connectionURL, strResult, true);
     }
   }
 }
@@ -70,21 +72,21 @@ bool Admin::Initialise()
   SetCharString(m_serverName, unknown);
   SetCharString(m_serverVersion, unknown);
 
-  Settings::GetInstance().SetAdmin(this);
+  m_settings->SetAdmin(this);
 
   bool deviceInfoLoaded = LoadDeviceInfo();
 
   if (deviceInfoLoaded)
   {
-    Settings::GetInstance().SetDeviceInfo(&m_deviceInfo);
+    m_settings->SetDeviceInfo(&m_deviceInfo);
 
     bool deviceSettingsLoaded = LoadDeviceSettings();
-    Settings::GetInstance().SetDeviceSettings(&m_deviceSettings);
+    m_settings->SetDeviceSettings(&m_deviceSettings);
 
     if (deviceSettingsLoaded)
     {
       //If OpenWebVersion is new enough to allow the setting of AutoTimer setttings
-      if (Settings::GetInstance().SupportsAutoTimers() && Settings::GetInstance().GetAutoTimersEnabled())
+      if (m_settings->SupportsAutoTimers() && m_settings->GetAutoTimersEnabled())
         SendAutoTimerSettings();
     }
   }
@@ -94,7 +96,7 @@ bool Admin::Initialise()
 
 bool Admin::LoadDeviceInfo()
 {
-  const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/deviceinfo");
+  const std::string url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "web/deviceinfo");
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -271,7 +273,7 @@ bool Admin::LoadDeviceSettings()
   std::string autoTimerNameInTags = kodi::addon::GetLocalizedString(30094); // N/A
 
   //If OpenWebVersion is new enough to allow the setting of AutoTimer setttings
-  if (Settings::GetInstance().SupportsAutoTimers())
+  if (m_settings->SupportsAutoTimers())
   {
     if (LoadAutoTimerSettings())
     {
@@ -304,7 +306,7 @@ bool Admin::LoadDeviceSettings()
 
 bool Admin::LoadAutoTimerSettings()
 {
-  const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "autotimer/get");
+  const std::string url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "autotimer/get");
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -369,7 +371,7 @@ bool Admin::LoadAutoTimerSettings()
 
 bool Admin::LoadRecordingMarginSettings()
 {
-  const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/settings");
+  const std::string url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "web/settings");
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -440,7 +442,7 @@ bool Admin::SendAutoTimerSettings()
     const std::string url = StringUtils::Format("%s", "autotimer/set?add_name_to_tags=true&add_autotimer_to_tags=true");
     std::string strResult;
 
-    if (!WebUtils::SendSimpleCommand(url, strResult))
+    if (!WebUtils::SendSimpleCommand(url, m_settings->GetConnectionURL(), strResult))
       return false;
   }
 
@@ -455,7 +457,7 @@ bool Admin::SendGlobalRecordingStartMarginSetting(int newValue)
     const std::string url = StringUtils::Format("%s%d", "api/saveconfig?key=config.recording.margin_before&value=", newValue);
     std::string strResult;
 
-    if (!WebUtils::SendSimpleJsonPostCommand(url, strResult))
+    if (!WebUtils::SendSimpleJsonPostCommand(url, m_settings->GetConnectionURL(), strResult))
       return false;
     else
       m_deviceSettings.SetGlobalRecordingStartMargin(newValue);
@@ -472,7 +474,7 @@ bool Admin::SendGlobalRecordingEndMarginSetting(int newValue)
     const std::string url = StringUtils::Format("%s%d", "api/saveconfig?key=config.recording.margin_after&value=", newValue);
     std::string strResult;
 
-    if (!WebUtils::SendSimpleJsonPostCommand(url, strResult))
+    if (!WebUtils::SendSimpleJsonPostCommand(url, m_settings->GetConnectionURL(), strResult))
       return false;
     else
       m_deviceSettings.SetGlobalRecordingEndMargin(newValue);
@@ -486,7 +488,7 @@ PVR_ERROR Admin::GetDriveSpace(uint64_t& iTotal, uint64_t& iUsed, std::vector<st
   uint64_t totalKb = 0;
   uint64_t freeKb = 0;
 
-  const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/deviceinfo");
+  const std::string url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "web/deviceinfo");
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -586,7 +588,7 @@ uint64_t Admin::GetKbFromString(const std::string& stringInMbGbTb) const
 
 bool Admin::GetTunerSignal(SignalStatus& signalStatus, const std::shared_ptr<data::Channel>& channel)
 {
-  const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/signal");
+  const std::string url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "web/signal");
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -644,7 +646,7 @@ bool Admin::GetTunerSignal(SignalStatus& signalStatus, const std::shared_ptr<dat
   signalStatus.m_ber = std::atol(ber.c_str());
   signalStatus.m_signalStrength = std::atoi(std::regex_replace(signalStrength, regexReplacePercent, regexReplace).c_str()) * 655;
 
-  if (Settings::GetInstance().SupportsTunerDetails())
+  if (m_settings->SupportsTunerDetails())
   {
     //TODO: Cross reference against tuners once OpenWebIf API is updated.
     //StreamStatus streamStatus = GetStreamDetails(channel);
@@ -658,7 +660,7 @@ StreamStatus Admin::GetStreamDetails(const std::shared_ptr<data::Channel>& chann
 {
   StreamStatus streamStatus;
 
-  const std::string jsonUrl = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "api/deviceinfo");
+  const std::string jsonUrl = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "api/deviceinfo");
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
 
@@ -727,7 +729,7 @@ StreamStatus Admin::GetStreamDetails(const std::shared_ptr<data::Channel>& chann
 
 void Admin::GetTunerDetails(SignalStatus& signalStatus, const std::shared_ptr<data::Channel>& channel)
 {
-  const std::string jsonUrl = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "api/tunersignal");
+  const std::string jsonUrl = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "api/tunersignal");
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
 
diff --git a/src/enigma2/Admin.h b/src/enigma2/Admin.h
index b07daf2..57eeac8 100644
--- a/src/enigma2/Admin.h
+++ b/src/enigma2/Admin.h
@@ -21,10 +21,12 @@
 
 namespace enigma2
 {
+  class InstanceSettings;
+
   class ATTR_DLL_LOCAL Admin
   {
   public:
-    Admin();
+    Admin(std::shared_ptr<enigma2::InstanceSettings> settings);
 
     void SendPowerstate();
     bool Initialise();
@@ -63,5 +65,7 @@ namespace enigma2
     enigma2::utilities::DeviceInfo m_deviceInfo;
     enigma2::utilities::DeviceSettings m_deviceSettings;
     std::vector<enigma2::utilities::Tuner> m_tuners;
+
+    std::shared_ptr<enigma2::InstanceSettings> m_settings;
   };
 } //namespace enigma2
diff --git a/src/enigma2/ChannelGroups.cpp b/src/enigma2/ChannelGroups.cpp
index 18d2bac..7da8b74 100644
--- a/src/enigma2/ChannelGroups.cpp
+++ b/src/enigma2/ChannelGroups.cpp
@@ -67,7 +67,7 @@ PVR_ERROR ChannelGroups::GetChannelGroupMembers(std::vector<kodi::addon::PVRChan
 
     tag.SetGroupName(groupName);
     tag.SetChannelUniqueId(channelMember.GetChannel()->GetUniqueId());
-    tag.SetChannelNumber(Settings::GetInstance().UseGroupSpecificChannelNumbers() ? channelMember.GetChannelNumber() : 0);
+    tag.SetChannelNumber(m_settings->UseGroupSpecificChannelNumbers() ? channelMember.GetChannelNumber() : 0);
     tag.SetOrder(channelOrder); //Keep the channels in list order as per the groups on the STB
 
     Logger::Log(LEVEL_DEBUG, "%s - add channel %s (%d) to group '%s' with channel order %d", __func__, channelMember.GetChannel()->GetChannelName().c_str(), tag.GetChannelUniqueId(), groupName.c_str(), channelOrder);
@@ -130,7 +130,7 @@ void ChannelGroups::ClearChannelGroups()
   m_channelGroupsNameMap.clear();
   m_channelGroupsServiceReferenceMap.clear();
 
-  Settings::GetInstance().SetUsesLastScannedChannelGroup(false);
+  m_settings->SetUsesLastScannedChannelGroup(false);
 }
 
 void ChannelGroups::AddChannelGroup(ChannelGroup& newChannelGroup)
@@ -170,16 +170,16 @@ bool ChannelGroups::LoadTVChannelGroups()
 {
   int tempNumChannelGroups = m_channelGroups.size();
 
-  if ((Settings::GetInstance().GetTVFavouritesMode() == FavouritesGroupMode::AS_FIRST_GROUP &&
-      Settings::GetInstance().GetTVChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP) ||
-      Settings::GetInstance().GetTVChannelGroupMode() == ChannelGroupMode::FAVOURITES_GROUP)
+  if ((m_settings->GetTVFavouritesMode() == FavouritesGroupMode::AS_FIRST_GROUP &&
+      m_settings->GetTVChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP) ||
+      m_settings->GetTVChannelGroupMode() == ChannelGroupMode::FAVOURITES_GROUP)
   {
     AddTVFavouritesChannelGroup();
   }
 
-  if (Settings::GetInstance().GetTVChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP)
+  if (m_settings->GetTVChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP)
   {
-    const std::string strTmp = StringUtils::Format("%sweb/getservices", Settings::GetInstance().GetConnectionURL().c_str());
+    const std::string strTmp = StringUtils::Format("%sweb/getservices", m_settings->GetConnectionURL().c_str());
 
     const std::string strXML = WebUtils::GetHttpXML(strTmp);
 
@@ -212,7 +212,7 @@ bool ChannelGroups::LoadTVChannelGroups()
 
     for (; pNode != nullptr; pNode = pNode->NextSiblingElement("e2service"))
     {
-      ChannelGroup newChannelGroup;
+      ChannelGroup newChannelGroup{m_settings};
 
       if (!newChannelGroup.UpdateFrom(pNode, false))
         continue;
@@ -225,13 +225,13 @@ bool ChannelGroups::LoadTVChannelGroups()
 
   LoadChannelGroupsStartPosition(false);
 
-  if (Settings::GetInstance().GetTVFavouritesMode() == FavouritesGroupMode::AS_LAST_GROUP &&
-      Settings::GetInstance().GetTVChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP)
+  if (m_settings->GetTVFavouritesMode() == FavouritesGroupMode::AS_LAST_GROUP &&
+      m_settings->GetTVChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP)
   {
     AddTVFavouritesChannelGroup();
   }
 
-  if ((!Settings::GetInstance().ExcludeLastScannedTVGroup() && Settings::GetInstance().GetTVChannelGroupMode() == ChannelGroupMode::ALL_GROUPS) ||
+  if ((!m_settings->ExcludeLastScannedTVGroup() && m_settings->GetTVChannelGroupMode() == ChannelGroupMode::ALL_GROUPS) ||
       m_channelGroups.empty()) //If there are no channel groups default to including the last scanned group for TV Only
     AddTVLastScannedChannelGroup();
 
@@ -243,16 +243,16 @@ bool ChannelGroups::LoadRadioChannelGroups()
 {
   int tempNumChannelGroups = m_channelGroups.size();
 
-  if ((Settings::GetInstance().GetRadioFavouritesMode() == FavouritesGroupMode::AS_FIRST_GROUP &&
-      Settings::GetInstance().GetRadioChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP) ||
-      Settings::GetInstance().GetRadioChannelGroupMode() == ChannelGroupMode::FAVOURITES_GROUP)
+  if ((m_settings->GetRadioFavouritesMode() == FavouritesGroupMode::AS_FIRST_GROUP &&
+      m_settings->GetRadioChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP) ||
+      m_settings->GetRadioChannelGroupMode() == ChannelGroupMode::FAVOURITES_GROUP)
   {
     AddRadioFavouritesChannelGroup();
   }
 
-  if (Settings::GetInstance().GetRadioChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP)
+  if (m_settings->GetRadioChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP)
   {
-    const std::string strTmp = StringUtils::Format("%sweb/getservices?sRef=%s", Settings::GetInstance().GetConnectionURL().c_str(), WebUtils::URLEncodeInline("1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"bouquets.radio\" ORDER BY bouquet").c_str());
+    const std::string strTmp = StringUtils::Format("%sweb/getservices?sRef=%s", m_settings->GetConnectionURL().c_str(), WebUtils::URLEncodeInline("1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"bouquets.radio\" ORDER BY bouquet").c_str());
 
     const std::string strXML = WebUtils::GetHttpXML(strTmp);
 
@@ -285,7 +285,7 @@ bool ChannelGroups::LoadRadioChannelGroups()
 
     for (; pNode != nullptr; pNode = pNode->NextSiblingElement("e2service"))
     {
-      ChannelGroup newChannelGroup;
+      ChannelGroup newChannelGroup{m_settings};
 
       if (!newChannelGroup.UpdateFrom(pNode, true))
         continue;
@@ -298,13 +298,13 @@ bool ChannelGroups::LoadRadioChannelGroups()
 
   LoadChannelGroupsStartPosition(true);
 
-  if (Settings::GetInstance().GetRadioFavouritesMode() == FavouritesGroupMode::AS_LAST_GROUP &&
-      Settings::GetInstance().GetRadioChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP)
+  if (m_settings->GetRadioFavouritesMode() == FavouritesGroupMode::AS_LAST_GROUP &&
+      m_settings->GetRadioChannelGroupMode() != ChannelGroupMode::FAVOURITES_GROUP)
   {
     AddRadioFavouritesChannelGroup();
   }
 
-  if (!Settings::GetInstance().ExcludeLastScannedRadioGroup() && Settings::GetInstance().GetRadioChannelGroupMode() == ChannelGroupMode::ALL_GROUPS)
+  if (!m_settings->ExcludeLastScannedRadioGroup() && m_settings->GetRadioChannelGroupMode() == ChannelGroupMode::ALL_GROUPS)
     AddRadioLastScannedChannelGroup();
 
   Logger::Log(LEVEL_INFO, "%s Loaded %d Radio Channelgroups", __func__, m_channelGroups.size() - tempNumChannelGroups);
@@ -313,7 +313,7 @@ bool ChannelGroups::LoadRadioChannelGroups()
 
 void ChannelGroups::AddTVFavouritesChannelGroup()
 {
-  ChannelGroup newChannelGroup;
+  ChannelGroup newChannelGroup{m_settings};
   newChannelGroup.SetRadio(false);
   newChannelGroup.SetGroupName(kodi::addon::GetLocalizedString(30079)); //Favourites (TV)
   newChannelGroup.SetServiceReference("1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.favourites.tv\" ORDER BY bouquet");
@@ -323,7 +323,7 @@ void ChannelGroups::AddTVFavouritesChannelGroup()
 
 void ChannelGroups::AddRadioFavouritesChannelGroup()
 {
-  ChannelGroup newChannelGroup;
+  ChannelGroup newChannelGroup{m_settings};
   newChannelGroup.SetRadio(true);
   newChannelGroup.SetGroupName(kodi::addon::GetLocalizedString(30080)); //Favourites (Radio)
   newChannelGroup.SetServiceReference("1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.favourites.radio\" ORDER BY bouquet");
@@ -333,32 +333,32 @@ void ChannelGroups::AddRadioFavouritesChannelGroup()
 
 void ChannelGroups::AddTVLastScannedChannelGroup()
 {
-  ChannelGroup newChannelGroup;
+  ChannelGroup newChannelGroup{m_settings};
   newChannelGroup.SetRadio(false);
   newChannelGroup.SetGroupName(kodi::addon::GetLocalizedString(30112)); //Last Scanned (TV)
   newChannelGroup.SetServiceReference("1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.LastScanned.tv\" ORDER BY bouquet");
   newChannelGroup.SetLastScannedGroup(true);
   AddChannelGroup(newChannelGroup);
-  Settings::GetInstance().SetUsesLastScannedChannelGroup(true);
+  m_settings->SetUsesLastScannedChannelGroup(true);
   Logger::Log(LEVEL_INFO, "%s Loaded channelgroup: %s", __func__, newChannelGroup.GetGroupName().c_str());
 }
 
 void ChannelGroups::AddRadioLastScannedChannelGroup()
 {
-  ChannelGroup newChannelGroup;
+  ChannelGroup newChannelGroup{m_settings};
   newChannelGroup.SetRadio(true);
   newChannelGroup.SetGroupName(kodi::addon::GetLocalizedString(30113)); //Last Scanned (Radio)
   //Hack used here, extra space in service reference so we can spearate TV and Radio, it must be unique
   newChannelGroup.SetServiceReference("1:7:1:0:0:0:0:0:0:0:FROM BOUQUET  \"userbouquet.LastScanned.tv\" ORDER BY bouquet");
   newChannelGroup.SetLastScannedGroup(true);
   AddChannelGroup(newChannelGroup);
-  Settings::GetInstance().SetUsesLastScannedChannelGroup(true);
+  m_settings->SetUsesLastScannedChannelGroup(true);
   Logger::Log(LEVEL_INFO, "%s Loaded channelgroup: %s", __func__, newChannelGroup.GetGroupName().c_str());
 }
 
 void ChannelGroups::LoadChannelGroupsStartPosition(bool radio)
 {
-  if (Settings::GetInstance().SupportsChannelNumberGroupStartPos())
+  if (m_settings->SupportsChannelNumberGroupStartPos())
   {
     //We can use the JSON API so let's supplement the existing groups with start channel numbers
     std::string jsonURL;
@@ -366,12 +366,12 @@ void ChannelGroups::LoadChannelGroupsStartPosition(bool radio)
     if (!radio)
     {
       Logger::Log(LEVEL_DEBUG, "%s loading channel group start channel number for all TV groups", __func__);
-      jsonURL = StringUtils::Format("%sapi/getservices", Settings::GetInstance().GetConnectionURL().c_str());
+      jsonURL = StringUtils::Format("%sapi/getservices", m_settings->GetConnectionURL().c_str());
     }
     else
     {
       Logger::Log(LEVEL_DEBUG, "%s loading channel group start channel number for all Radio groups", __func__);
-      jsonURL = StringUtils::Format("%sapi/getservices?sRef=%s", Settings::GetInstance().GetConnectionURL().c_str(), WebUtils::URLEncodeInline("1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"bouquets.radio\" ORDER BY bouquet").c_str());
+      jsonURL = StringUtils::Format("%sapi/getservices?sRef=%s", m_settings->GetConnectionURL().c_str(), WebUtils::URLEncodeInline("1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"bouquets.radio\" ORDER BY bouquet").c_str());
     }
 
     const std::string strJson = WebUtils::GetHttpXML(jsonURL);
diff --git a/src/enigma2/ChannelGroups.h b/src/enigma2/ChannelGroups.h
index 0a14831..7f591e4 100644
--- a/src/enigma2/ChannelGroups.h
+++ b/src/enigma2/ChannelGroups.h
@@ -7,6 +7,7 @@
 
 #pragma once
 
+#include "InstanceSettings.h"
 #include "data/Channel.h"
 #include "data/ChannelGroup.h"
 
@@ -22,6 +23,8 @@ namespace enigma2
   class ATTR_DLL_LOCAL ChannelGroups
   {
   public:
+    ChannelGroups(std::shared_ptr<enigma2::InstanceSettings> settings) : m_settings(settings) {}
+
     void GetChannelGroups(std::vector<kodi::addon::PVRChannelGroup>& channelGroups, bool radio) const;
     PVR_ERROR GetChannelGroupMembers(std::vector<kodi::addon::PVRChannelGroupMember>& channelGroupMembers, const std::string& groupName);
 
@@ -47,5 +50,7 @@ namespace enigma2
     std::vector<std::shared_ptr<enigma2::data::ChannelGroup>> m_channelGroups;
     std::unordered_map<std::string, std::shared_ptr<enigma2::data::ChannelGroup>> m_channelGroupsNameMap;
     std::unordered_map<std::string, std::shared_ptr<enigma2::data::ChannelGroup>> m_channelGroupsServiceReferenceMap;
+
+    std::shared_ptr<enigma2::InstanceSettings> m_settings;
   };
 } //namespace enigma2
diff --git a/src/enigma2/Channels.cpp b/src/enigma2/Channels.cpp
index 8dad53c..a72e600 100644
--- a/src/enigma2/Channels.cpp
+++ b/src/enigma2/Channels.cpp
@@ -223,7 +223,7 @@ bool Channels::LoadChannels(const std::string groupServiceReference, const std::
 {
   Logger::Log(LEVEL_DEBUG, "%s loading channel group: '%s'", __func__, groupName.c_str());
 
-  const std::string strTmp = StringUtils::Format("%sweb/getservices?sRef=%s", Settings::GetInstance().GetConnectionURL().c_str(), WebUtils::URLEncodeInline(groupServiceReference).c_str());
+  const std::string strTmp = StringUtils::Format("%sweb/getservices?sRef=%s", m_settings->GetConnectionURL().c_str(), WebUtils::URLEncodeInline(groupServiceReference).c_str());
 
   const std::string strXML = WebUtils::GetHttpXML(strTmp);
 
@@ -258,7 +258,7 @@ bool Channels::LoadChannels(const std::string groupServiceReference, const std::
 
   for (; pNode != nullptr; pNode = pNode->NextSiblingElement("e2service"))
   {
-    Channel newChannel;
+    Channel newChannel{m_settings};
     newChannel.SetRadio(channelGroup->IsRadio());
 
     if (!newChannel.UpdateFrom(pNode))
@@ -283,15 +283,15 @@ int Channels::LoadChannelsExtraData(const std::shared_ptr<enigma2::data::Channel
   if (!channelGroup->HasStartChannelNumber())
     newChannelPositionOffset = lastGroupLatestChannelPosition;
 
-  if (Settings::GetInstance().SupportsProviderNumberAndPiconForChannels())
+  if (m_settings->SupportsProviderNumberAndPiconForChannels())
   {
     Logger::Log(LEVEL_DEBUG, "%s loading channel group extra data: '%s'", __func__, channelGroup->GetGroupName().c_str());
 
     //We can use the JSON API so let's supplement the data with extra information
 
     const std::string jsonURL = StringUtils::Format("%sapi/getservices?provider=%d&picon=1&sRef=%s",
-                                                    Settings::GetInstance().GetConnectionURL().c_str(),
-                                                    Settings::GetInstance().RetrieveProviderNameForChannels() ? 1 : 0,
+                                                    m_settings->GetConnectionURL().c_str(),
+                                                    m_settings->RetrieveProviderNameForChannels() ? 1 : 0,
                                                     WebUtils::URLEncodeInline(channelGroup->GetServiceReference()).c_str());
     const std::string strJson = WebUtils::GetHttpXML(jsonURL);
 
@@ -311,7 +311,7 @@ int Channels::LoadChannelsExtraData(const std::shared_ptr<enigma2::data::Channel
           if (serviceReference.compare(0, 5, "1:64:") == 0 || serviceReference.compare(0, 6, "1:320:") == 0)
             continue;
 
-          if (Settings::GetInstance().UseStandardServiceReference())
+          if (m_settings->UseStandardServiceReference())
           {
             serviceReference = Channel::CreateStandardServiceReference(serviceReference);
           }
@@ -326,7 +326,7 @@ int Channels::LoadChannelsExtraData(const std::shared_ptr<enigma2::data::Channel
               channel->SetProviderlName(jsonChannel["provider"].get<std::string>());
             }
 
-            if (!jsonChannel["pos"].empty() && Settings::GetInstance().SupportsChannelNumberGroupStartPos())
+            if (!jsonChannel["pos"].empty() && m_settings->SupportsChannelNumberGroupStartPos())
             {
               int channelNumber = jsonChannel["pos"].get<int>() + newChannelPositionOffset;
               channelGroup->SetMemberChannelNumber(channel, channelNumber);
@@ -339,11 +339,11 @@ int Channels::LoadChannelsExtraData(const std::shared_ptr<enigma2::data::Channel
               }
             }
 
-            if (Settings::GetInstance().UseOpenWebIfPiconPath())
+            if (m_settings->UseOpenWebIfPiconPath())
             {
               if (!jsonChannel["picon"].empty())
               {
-                std::string connectionURL = Settings::GetInstance().GetConnectionURL();
+                std::string connectionURL = m_settings->GetConnectionURL();
                 connectionURL = connectionURL.substr(0, connectionURL.size() - 1);
                 channel->SetIconPath(StringUtils::Format("%s%s", connectionURL.c_str(), jsonChannel["picon"].get<std::string>().c_str()));
 
@@ -378,9 +378,9 @@ void Channels::LoadProviders()
 {
   for (const auto& channel : m_channels)
   {
-    if (channel->GetProviderName().empty() && Settings::GetInstance().HasDefaultProviderName())
+    if (channel->GetProviderName().empty() && m_settings->HasDefaultProviderName())
     {
-      channel->SetProviderlName(Settings::GetInstance().GetDefaultProviderName());
+      channel->SetProviderlName(m_settings->GetDefaultProviderName());
       Logger::Log(LEVEL_DEBUG, "%s For Channel %s, set provider to default name: %s", __func__, channel->GetChannelName().c_str(), channel->GetProviderName().c_str());
     }
 
diff --git a/src/enigma2/Channels.h b/src/enigma2/Channels.h
index c02eeba..051d15c 100644
--- a/src/enigma2/Channels.h
+++ b/src/enigma2/Channels.h
@@ -9,6 +9,7 @@
 
 #include "ChannelGroups.h"
 #include "Providers.h"
+#include "InstanceSettings.h"
 #include "data/Channel.h"
 
 #include <memory>
@@ -37,7 +38,7 @@ namespace enigma2
   class ATTR_DLL_LOCAL Channels
   {
   public:
-    Channels(Providers& providers) : m_providers(providers) {}
+    Channels(Providers& providers, std::shared_ptr<enigma2::InstanceSettings> settings) : m_providers(providers), m_settings(settings) {}
 
     void GetChannels(std::vector<kodi::addon::PVRChannel>& kodiChannels, bool bRadio) const;
 
@@ -68,7 +69,9 @@ namespace enigma2
     std::unordered_map<int, std::shared_ptr<enigma2::data::Channel>> m_channelsUniqueIdMap;
     std::unordered_map<std::string, std::shared_ptr<enigma2::data::Channel>> m_channelsServiceReferenceMap;
 
-    ChannelGroups m_channelGroups;
+    std::shared_ptr<enigma2::InstanceSettings> m_settings;
+
+    ChannelGroups m_channelGroups{m_settings};
     Providers& m_providers;
   };
 } //namespace enigma2
diff --git a/src/enigma2/ConnectionManager.cpp b/src/enigma2/ConnectionManager.cpp
index e226c54..f357935 100644
--- a/src/enigma2/ConnectionManager.cpp
+++ b/src/enigma2/ConnectionManager.cpp
@@ -8,7 +8,7 @@
 #include "ConnectionManager.h"
 
 #include "IConnectionListener.h"
-#include "Settings.h"
+#include "InstanceSettings.h"
 #include "utilities/Logger.h"
 #include "utilities/WebUtils.h"
 
@@ -25,8 +25,8 @@ using namespace kodi::tools;
  * Enigma2 Connection handler
  */
 
-ConnectionManager::ConnectionManager(IConnectionListener& connectionListener)
-  : m_connectionListener(connectionListener), m_suspended(false), m_state(PVR_CONNECTION_STATE_UNKNOWN)
+ConnectionManager::ConnectionManager(IConnectionListener& connectionListener, std::shared_ptr<enigma2::InstanceSettings> settings)
+  : m_connectionListener(connectionListener), m_settings(settings), m_suspended(false), m_state(PVR_CONNECTION_STATE_UNKNOWN)
 {
 }
 
@@ -103,7 +103,7 @@ void ConnectionManager::SetState(PVR_CONNECTION_STATE state)
     }
 
     /* Notify connection state change (callback!) */
-    m_connectionListener.ConnectionStateChange(Settings::GetInstance().GetConnectionURL(), newState, "");
+    m_connectionListener.ConnectionStateChange(m_settings->GetConnectionURL(), newState, "");
   }
 }
 
@@ -125,8 +125,8 @@ void ConnectionManager::Process()
 {
   static bool log = false;
   static unsigned int retryAttempt = 0;
-  int fastReconnectIntervalMs = (Settings::GetInstance().GetConnectioncCheckIntervalSecs() * 1000) / 2;
-  int intervalMs = Settings::GetInstance().GetConnectioncCheckIntervalSecs() * 1000;
+  int fastReconnectIntervalMs = (m_settings->GetConnectioncCheckIntervalSecs() * 1000) / 2;
+  int intervalMs = m_settings->GetConnectioncCheckIntervalSecs() * 1000;
 
   while (m_running)
   {
@@ -139,7 +139,7 @@ void ConnectionManager::Process()
     }
 
     /* wakeup server */
-    const std::string& wolMac = Settings::GetInstance().GetWakeOnLanMac();
+    const std::string& wolMac = m_settings->GetWakeOnLanMac();
     if (!wolMac.empty())
     {
       Logger::Log(LogLevel::LEVEL_DEBUG, "%s - send wol packet...", __func__);
@@ -149,10 +149,10 @@ void ConnectionManager::Process()
       }
     }
 
-    const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/currenttime");
+    const std::string url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "web/currenttime");
 
     /* Connect */
-    if (!WebUtils::CheckHttp(url))
+    if (!WebUtils::CheckHttp(url, m_settings->GetConnectioncCheckTimeoutSecs()))
     {
       /* Unable to connect */
       if (retryAttempt == 0)
diff --git a/src/enigma2/ConnectionManager.h b/src/enigma2/ConnectionManager.h
index 8d88ec7..28711cb 100644
--- a/src/enigma2/ConnectionManager.h
+++ b/src/enigma2/ConnectionManager.h
@@ -7,6 +7,8 @@
 
 #pragma once
 
+#include "InstanceSettings.h"
+
 #include <atomic>
 #include <mutex>
 #include <string>
@@ -24,7 +26,7 @@ namespace enigma2
   class ATTR_DLL_LOCAL ConnectionManager
   {
   public:
-    ConnectionManager(IConnectionListener& connectionListener);
+    ConnectionManager(IConnectionListener& connectionListener, std::shared_ptr<enigma2::InstanceSettings> settings);
     ~ConnectionManager();
 
     void Start();
@@ -46,5 +48,7 @@ namespace enigma2
     mutable std::mutex m_mutex;
     bool m_suspended;
     PVR_CONNECTION_STATE m_state;
+
+    std::shared_ptr<enigma2::InstanceSettings> m_settings;
   };
 } // namespace enigma2
diff --git a/src/enigma2/Epg.cpp b/src/enigma2/Epg.cpp
index ca42248..a5c0490 100644
--- a/src/enigma2/Epg.cpp
+++ b/src/enigma2/Epg.cpp
@@ -26,14 +26,14 @@ using namespace enigma2::utilities;
 using namespace kodi::tools;
 using json = nlohmann::json;
 
-Epg::Epg(IConnectionListener& connectionListener, enigma2::Channels& channels, enigma2::extract::EpgEntryExtractor& entryExtractor, int epgMaxPastDays, int epgMaxFutureDays)
-      : m_connectionListener(connectionListener), m_channels(channels), m_entryExtractor(entryExtractor), m_epgMaxPastDays(epgMaxPastDays),
+Epg::Epg(IConnectionListener& connectionListener, enigma2::Channels& channels, enigma2::extract::EpgEntryExtractor& entryExtractor, std::shared_ptr<enigma2::InstanceSettings>& settings, int epgMaxPastDays, int epgMaxFutureDays)
+      : m_connectionListener(connectionListener), m_channels(channels), m_entryExtractor(entryExtractor), m_settings(settings), m_epgMaxPastDays(epgMaxPastDays),
         m_epgMaxFutureDays(epgMaxFutureDays)
 {
   m_channelsMap = channels.GetChannelsServiceReferenceMap();
 }
 
-Epg::Epg(const Epg& epg) : m_connectionListener(epg.m_connectionListener), m_channels(epg.m_channels), m_entryExtractor(epg.m_entryExtractor) {}
+Epg::Epg(const Epg& epg) : m_connectionListener(epg.m_connectionListener), m_channels(epg.m_channels), m_entryExtractor(epg.m_entryExtractor), m_settings(epg.m_settings) {}
 
 bool Epg::Initialise(enigma2::Channels& channels, enigma2::ChannelGroups& channelGroups)
 {
@@ -51,7 +51,7 @@ PVR_ERROR Epg::GetEPGForChannel(const std::string& serviceReference, time_t star
   {
     Logger::Log(LEVEL_DEBUG, "%s Getting EPG for channel '%s'", __func__, channel->GetChannelName().c_str());
 
-    const std::string url = StringUtils::Format("%s%s%s", Settings::GetInstance().GetConnectionURL().c_str(),
+    const std::string url = StringUtils::Format("%s%s%s", m_settings->GetConnectionURL().c_str(),
                                                 "web/epgservice?sRef=", WebUtils::URLEncodeInline(serviceReference).c_str());
 
     const std::string strXML = WebUtils::GetHttpXML(url);
@@ -89,7 +89,7 @@ PVR_ERROR Epg::GetEPGForChannel(const std::string& serviceReference, time_t star
 
     for (; pNode != nullptr; pNode = pNode->NextSiblingElement("e2event"))
     {
-      EpgEntry entry;
+      EpgEntry entry{m_settings};
 
       if (!entry.UpdateFrom(pNode, channel, start, end))
         continue;
@@ -148,7 +148,7 @@ std::string Epg::LoadEPGEntryShortDescription(const std::string& serviceReferenc
 {
   std::string shortDescription;
 
-  const std::string jsonUrl = StringUtils::Format("%sapi/event?sref=%s&idev=%u", Settings::GetInstance().GetConnectionURL().c_str(),
+  const std::string jsonUrl = StringUtils::Format("%sapi/event?sref=%s&idev=%u", m_settings->GetConnectionURL().c_str(),
                                                   WebUtils::URLEncodeInline(serviceReference).c_str(), epgUid);
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
@@ -187,7 +187,7 @@ EpgPartialEntry Epg::LoadEPGEntryPartialDetails(const std::string& serviceRefere
 
   Logger::Log(LEVEL_DEBUG, "%s Looking for EPG event partial details for sref: %s, epgUid: %u", __func__, serviceReference.c_str(), epgUid);
 
-  const std::string jsonUrl = StringUtils::Format("%sapi/event?sref=%s&idev=%u", Settings::GetInstance().GetConnectionURL().c_str(),
+  const std::string jsonUrl = StringUtils::Format("%sapi/event?sref=%s&idev=%u", m_settings->GetConnectionURL().c_str(),
                                                   WebUtils::URLEncodeInline(serviceReference).c_str(), epgUid);
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
@@ -240,7 +240,7 @@ EpgPartialEntry Epg::LoadEPGEntryPartialDetails(const std::string& serviceRefere
 
   Logger::Log(LEVEL_DEBUG, "%s Looking for EPG event partial details for sref: %s, time: %lld", __func__, serviceReference.c_str(), static_cast<long long>(startTime));
 
-  const std::string jsonUrl = StringUtils::Format("%sapi/epgservice?sRef=%s&time=%lld&endTime=1", Settings::GetInstance().GetConnectionURL().c_str(), WebUtils::URLEncodeInline(serviceReference).c_str(), static_cast<long long>(startTime));
+  const std::string jsonUrl = StringUtils::Format("%sapi/epgservice?sRef=%s&time=%lld&endTime=1", m_settings->GetConnectionURL().c_str(), WebUtils::URLEncodeInline(serviceReference).c_str(), static_cast<long long>(startTime));
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
 
@@ -295,7 +295,7 @@ std::string Epg::FindServiceReference(const std::string& title, int epgUid, time
 
   const auto started = std::chrono::high_resolution_clock::now();
 
-  const std::string jsonUrl = StringUtils::Format("%sapi/epgsearch?search=%s&endtime=%lld", Settings::GetInstance().GetConnectionURL().c_str(), WebUtils::URLEncodeInline(title).c_str(), static_cast<long long>(endTime));
+  const std::string jsonUrl = StringUtils::Format("%sapi/epgsearch?search=%s&endtime=%lld", m_settings->GetConnectionURL().c_str(), WebUtils::URLEncodeInline(title).c_str(), static_cast<long long>(endTime));
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
 
@@ -312,7 +312,7 @@ std::string Epg::FindServiceReference(const std::string& title, int epgUid, time
             event.value()["begin_timestamp"].get<time_t>() == startTime &&
             event.value()["duration_sec"].get<int>() == (endTime - startTime))
         {
-          serviceReference = Channel::NormaliseServiceReference(event.value()["sref"].get<std::string>());
+          serviceReference = Channel::NormaliseServiceReference(event.value()["sref"].get<std::string>(), m_settings->UseStandardServiceReference());
 
           break; //We only want first event
         }
diff --git a/src/enigma2/Epg.h b/src/enigma2/Epg.h
index 717f301..d729d28 100644
--- a/src/enigma2/Epg.h
+++ b/src/enigma2/Epg.h
@@ -9,6 +9,7 @@
 
 #include "ChannelGroups.h"
 #include "Channels.h"
+#include "InstanceSettings.h"
 #include "data/EpgPartialEntry.h"
 #include "extract/EpgEntryExtractor.h"
 
@@ -28,7 +29,7 @@ namespace enigma2
   class ATTR_DLL_LOCAL Epg
   {
   public:
-    Epg(IConnectionListener& connectionListener, enigma2::Channels& channels, enigma2::extract::EpgEntryExtractor& entryExtractor, int epgMaxPastDays, int epgMaxFutureDays);
+    Epg(IConnectionListener& connectionListener, enigma2::Channels& channels, enigma2::extract::EpgEntryExtractor& entryExtractor, std::shared_ptr<enigma2::InstanceSettings>& settings, int epgMaxPastDays, int epgMaxFutureDays);
     Epg(const enigma2::Epg& epg);
 
     bool Initialise(enigma2::Channels& channels, enigma2::ChannelGroups& channelGroups);
@@ -59,5 +60,7 @@ namespace enigma2
     std::vector<data::EpgEntry> m_timerBasedEntries;
 
     mutable std::mutex m_mutex;
+
+    std::shared_ptr<enigma2::InstanceSettings> m_settings;
   };
 } //namespace enigma2
diff --git a/src/enigma2/Settings.cpp b/src/enigma2/InstanceSettings.cpp
similarity index 68%
rename from src/enigma2/Settings.cpp
rename to src/enigma2/InstanceSettings.cpp
index b6de411..ca6a0a2 100644
--- a/src/enigma2/Settings.cpp
+++ b/src/enigma2/InstanceSettings.cpp
@@ -5,7 +5,7 @@
  *  See LICENSE.md for more information.
  */
 
-#include "Settings.h"
+#include "InstanceSettings.h"
 
 #include "utilities/FileUtils.h"
 #include "utilities/WebUtils.h"
@@ -21,48 +21,52 @@ using namespace kodi::tools;
 /***************************************************************************
  * PVR settings
  **************************************************************************/
-void Settings::ReadFromAddon()
+InstanceSettings::InstanceSettings(kodi::addon::IAddonInstance& instance)
+  : m_instance(instance)
 {
-  FileUtils::CopyDirectory(FileUtils::GetResourceDataPath() + CHANNEL_GROUPS_DIR, CHANNEL_GROUPS_ADDON_DATA_BASE_DIR, true);
+  ReadSettings();
+}
 
+void InstanceSettings::ReadSettings()
+{
   //Connection
-  m_hostname = kodi::addon::GetSettingString("host", DEFAULT_HOST);
-  m_portWeb = kodi::addon::GetSettingInt("webport", DEFAULT_WEB_PORT);
-  m_useSecureHTTP = kodi::addon::GetSettingBoolean("use_secure", false);
-  m_username = kodi::addon::GetSettingString("user");
-  m_password = kodi::addon::GetSettingString("pass");
-  m_autoConfig = kodi::addon::GetSettingBoolean("autoconfig", false);
-  m_portStream = kodi::addon::GetSettingInt("streamport", DEFAULT_STREAM_PORT);
-  m_useSecureHTTPStream = kodi::addon::GetSettingBoolean("use_secure_stream", false);
-  m_useLoginStream = kodi::addon::GetSettingBoolean("use_login_stream", false);
-  m_connectioncCheckTimeoutSecs = kodi::addon::GetSettingInt("connectionchecktimeout", DEFAULT_CONNECTION_CHECK_TIMEOUT_SECS);
-  m_connectioncCheckIntervalSecs = kodi::addon::GetSettingInt("connectioncheckinterval", DEFAULT_CONNECTION_CHECK_INTERVAL_SECS);
+  m_instance.CheckInstanceSettingString("host", m_hostname);
+  m_instance.CheckInstanceSettingInt("webport", m_portWeb);
+  m_instance.CheckInstanceSettingBoolean("use_secure", m_useSecureHTTP);
+  m_instance.CheckInstanceSettingString("user", m_username);
+  m_instance.CheckInstanceSettingString("pass", m_password);
+  m_instance.CheckInstanceSettingBoolean("autoconfig", m_autoConfig);
+  m_instance.CheckInstanceSettingInt("streamport", m_portStream);
+  m_instance.CheckInstanceSettingBoolean("use_secure_stream", m_useSecureHTTPStream);
+  m_instance.CheckInstanceSettingBoolean("use_login_stream", m_useLoginStream);
+  m_instance.CheckInstanceSettingInt("connectionchecktimeout", m_connectioncCheckTimeoutSecs);
+  m_instance.CheckInstanceSettingInt("connectioncheckinterval", m_connectioncCheckIntervalSecs);
 
   //General
-  m_setStreamProgramId = kodi::addon::GetSettingBoolean("setprogramid", false);
-  m_onlinePicons = kodi::addon::GetSettingBoolean("onlinepicons", true);
-  m_usePiconsEuFormat = kodi::addon::GetSettingBoolean("usepiconseuformat", false);
-  m_useOpenWebIfPiconPath = kodi::addon::GetSettingBoolean("useopenwebifpiconpath", false);
-  m_iconPath = kodi::addon::GetSettingString("iconpath");
-  m_updateInterval = kodi::addon::GetSettingInt("updateint", DEFAULT_UPDATE_INTERVAL);
-  m_updateMode = kodi::addon::GetSettingEnum<UpdateMode>("updatemode", UpdateMode::TIMERS_AND_RECORDINGS);
-  m_channelAndGroupUpdateMode = kodi::addon::GetSettingEnum<ChannelAndGroupUpdateMode>("channelandgroupupdatemode", ChannelAndGroupUpdateMode::RELOAD_CHANNELS_AND_GROUPS);
-  m_channelAndGroupUpdateHour = kodi::addon::GetSettingInt("channelandgroupupdatehour", DEFAULT_CHANNEL_AND_GROUP_UPDATE_HOUR);
+  m_instance.CheckInstanceSettingBoolean("setprogramid", m_setStreamProgramId);
+  m_instance.CheckInstanceSettingBoolean("onlinepicons", m_onlinePicons);
+  m_instance.CheckInstanceSettingBoolean("usepiconseuformat", m_usePiconsEuFormat);
+  m_instance.CheckInstanceSettingBoolean("useopenwebifpiconpath", m_useOpenWebIfPiconPath);
+  m_instance.CheckInstanceSettingString("iconpath", m_iconPath);
+  m_instance.CheckInstanceSettingInt("updateint", m_updateInterval);
+  m_instance.CheckInstanceSettingEnum<UpdateMode>("updatemode", m_updateMode);
+  m_instance.CheckInstanceSettingEnum<ChannelAndGroupUpdateMode>("channelandgroupupdatemode", m_channelAndGroupUpdateMode);
+  m_instance.CheckInstanceSettingInt("channelandgroupupdatehour", m_channelAndGroupUpdateHour);
 
   //Channels
-  m_zap = kodi::addon::GetSettingBoolean("zap", false);
-  m_useGroupSpecificChannelNumbers = kodi::addon::GetSettingBoolean("usegroupspecificnumbers", false);
-  m_useStandardServiceReference = kodi::addon::GetSettingBoolean("usestandardserviceref", true);
-  m_retrieveProviderNameForChannels = kodi::addon::GetSettingBoolean("retrieveprovidername", true);
-  m_defaultProviderName = kodi::addon::GetSettingString("defaultprovidername", "");
-  m_mapProviderNameFile = kodi::addon::GetSettingString("providermapfile", DEFAULT_PROVIDER_NAME_MAP_FILE);
-  m_tvChannelGroupMode = kodi::addon::GetSettingEnum<ChannelGroupMode>("tvgroupmode", ChannelGroupMode::ALL_GROUPS);
-  m_numTVGroups = kodi::addon::GetSettingInt("numtvgroups", DEFAULT_NUM_GROUPS);
-  m_oneTVGroup = kodi::addon::GetSettingString("onetvgroup");
-  m_twoTVGroup = kodi::addon::GetSettingString("twotvgroup");
-  m_threeTVGroup = kodi::addon::GetSettingString("threetvgroup");
-  m_fourTVGroup = kodi::addon::GetSettingString("fourtvgroup");
-  m_fiveTVGroup = kodi::addon::GetSettingString("fivetvgroup");
+  m_instance.CheckInstanceSettingBoolean("zap", m_zap);
+  m_instance.CheckInstanceSettingBoolean("usegroupspecificnumbers", m_useGroupSpecificChannelNumbers);
+  m_instance.CheckInstanceSettingBoolean("usestandardserviceref", m_useStandardServiceReference);
+  m_instance.CheckInstanceSettingBoolean("retrieveprovidername", m_retrieveProviderNameForChannels);
+  m_instance.CheckInstanceSettingString("defaultprovidername", m_defaultProviderName);
+  m_instance.CheckInstanceSettingString("providermapfile", m_mapProviderNameFile);
+  m_instance.CheckInstanceSettingEnum<ChannelGroupMode>("tvgroupmode", m_tvChannelGroupMode);
+  m_instance.CheckInstanceSettingInt("numtvgroups", m_numTVGroups);
+  m_instance.CheckInstanceSettingString("onetvgroup", m_oneTVGroup);
+  m_instance.CheckInstanceSettingString("twotvgroup", m_twoTVGroup);
+  m_instance.CheckInstanceSettingString("threetvgroup", m_threeTVGroup);
+  m_instance.CheckInstanceSettingString("fourtvgroup", m_fourTVGroup);
+  m_instance.CheckInstanceSettingString("fivetvgroup", m_fiveTVGroup);
 
   if (m_tvChannelGroupMode == ChannelGroupMode::SOME_GROUPS)
   {
@@ -80,20 +84,20 @@ void Settings::ReadFromAddon()
       m_customTVChannelGroupNameList.emplace_back(m_fiveTVGroup);
   }
 
-  m_customTVGroupsFile = kodi::addon::GetSettingString("customtvgroupsfile", DEFAULT_CUSTOM_TV_GROUPS_FILE);
+  m_instance.CheckInstanceSettingString("customtvgroupsfile", m_customTVGroupsFile);
 
   if (m_tvChannelGroupMode == ChannelGroupMode::CUSTOM_GROUPS)
     LoadCustomChannelGroupFile(m_customTVGroupsFile, m_customTVChannelGroupNameList);
 
-  m_tvFavouritesMode = kodi::addon::GetSettingEnum<FavouritesGroupMode>("tvfavouritesmode", FavouritesGroupMode::DISABLED);
-  m_excludeLastScannedTVGroup = kodi::addon::GetSettingBoolean("excludelastscannedtv", true);
-  m_radioChannelGroupMode = kodi::addon::GetSettingEnum<ChannelGroupMode>("radiogroupmode", ChannelGroupMode::ALL_GROUPS);
-  m_numRadioGroups = kodi::addon::GetSettingInt("numradiogroups", DEFAULT_NUM_GROUPS);
-  m_oneRadioGroup = kodi::addon::GetSettingString("oneradiogroup");
-  m_twoRadioGroup = kodi::addon::GetSettingString("tworadiogroup");
-  m_threeRadioGroup = kodi::addon::GetSettingString("threeradiogroup");
-  m_fourRadioGroup = kodi::addon::GetSettingString("fourradiogroup");
-  m_fiveRadioGroup = kodi::addon::GetSettingString("fiveradiogroup");
+  m_instance.CheckInstanceSettingEnum<FavouritesGroupMode>("tvfavouritesmode", m_tvFavouritesMode);
+  m_instance.CheckInstanceSettingBoolean("excludelastscannedtv", m_excludeLastScannedTVGroup);
+  m_instance.CheckInstanceSettingEnum<ChannelGroupMode>("radiogroupmode", m_radioChannelGroupMode);
+  m_instance.CheckInstanceSettingInt("numradiogroups", m_numRadioGroups);
+  m_instance.CheckInstanceSettingString("oneradiogroup", m_oneRadioGroup);
+  m_instance.CheckInstanceSettingString("tworadiogroup", m_twoRadioGroup);
+  m_instance.CheckInstanceSettingString("threeradiogroup", m_threeRadioGroup);
+  m_instance.CheckInstanceSettingString("fourradiogroup", m_fourRadioGroup);
+  m_instance.CheckInstanceSettingString("fiveradiogroup", m_fiveRadioGroup);
 
   if (m_radioChannelGroupMode == ChannelGroupMode::SOME_GROUPS)
   {
@@ -111,65 +115,62 @@ void Settings::ReadFromAddon()
       m_customRadioChannelGroupNameList.emplace_back(m_fiveRadioGroup);
   }
 
-  m_customRadioGroupsFile = kodi::addon::GetSettingString("customradiogroupsfile", DEFAULT_CUSTOM_RADIO_GROUPS_FILE);
+  m_instance.CheckInstanceSettingString("customradiogroupsfile", m_customRadioGroupsFile);
 
   if (m_radioChannelGroupMode == ChannelGroupMode::CUSTOM_GROUPS)
     LoadCustomChannelGroupFile(m_customRadioGroupsFile, m_customRadioChannelGroupNameList);
 
-  m_radioFavouritesMode = kodi::addon::GetSettingEnum<FavouritesGroupMode>("radiofavouritesmode", FavouritesGroupMode::DISABLED);
-  m_excludeLastScannedRadioGroup = kodi::addon::GetSettingBoolean("excludelastscannedradio", true);
+  m_instance.CheckInstanceSettingEnum<FavouritesGroupMode>("radiofavouritesmode", m_radioFavouritesMode);
+  m_instance.CheckInstanceSettingBoolean("excludelastscannedradio", m_excludeLastScannedRadioGroup);
 
   //EPG
-  m_extractShowInfo = kodi::addon::GetSettingBoolean("extractshowinfoenabled", false);
-  m_extractShowInfoFile = kodi::addon::GetSettingString("extractshowinfofile", DEFAULT_SHOW_INFO_FILE);
-  m_mapGenreIds = kodi::addon::GetSettingBoolean("genreidmapenabled", false);
-  m_mapGenreIdsFile = kodi::addon::GetSettingString("genreidmapfile", DEFAULT_GENRE_ID_MAP_FILE);
-  m_mapRytecTextGenres = kodi::addon::GetSettingBoolean("rytecgenretextmapenabled", false);
-  m_mapRytecTextGenresFile = kodi::addon::GetSettingString("rytecgenretextmapfile", DEFAULT_GENRE_ID_MAP_FILE);
-  m_logMissingGenreMappings = kodi::addon::GetSettingBoolean("logmissinggenremapping", false);
-  m_epgDelayPerChannel = kodi::addon::GetSettingInt("epgdelayperchannel", 0);
+  m_instance.CheckInstanceSettingBoolean("extractshowinfoenabled", m_extractShowInfo);
+  m_instance.CheckInstanceSettingString("extractshowinfofile", m_extractShowInfoFile);
+  m_instance.CheckInstanceSettingBoolean("genreidmapenabled", m_mapGenreIds);
+  m_instance.CheckInstanceSettingString("genreidmapfile", m_mapGenreIdsFile);
+  m_instance.CheckInstanceSettingBoolean("rytecgenretextmapenabled", m_mapRytecTextGenres);
+  m_instance.CheckInstanceSettingString("rytecgenretextmapfile", m_mapRytecTextGenresFile);
+  m_instance.CheckInstanceSettingBoolean("logmissinggenremapping", m_logMissingGenreMappings);
+  m_instance.CheckInstanceSettingInt("epgdelayperchannel", m_epgDelayPerChannel);
 
   //Recording
-  m_storeLastPlayedAndCount = kodi::addon::GetSettingBoolean("storeextrarecordinginfo", false);
-  m_recordingLastPlayedMode = kodi::addon::GetSettingEnum<RecordingLastPlayedMode>("sharerecordinglastplayed", RecordingLastPlayedMode::ACROSS_KODI_INSTANCES);
-  m_onlyCurrentLocation = kodi::addon::GetSettingBoolean("onlycurrent", false);
-  m_virtualFolders = kodi::addon::GetSettingBoolean("virtualfolders", false);
-  m_keepFolders = kodi::addon::GetSettingBoolean("keepfolders", false);
-  m_keepFoldersOmitLocation = kodi::addon::GetSettingBoolean("keepfoldersomitlocation", false);
-  m_recordingsRecursive = kodi::addon::GetSettingBoolean("recordingsrecursive", false);
-  m_enableRecordingEDLs = kodi::addon::GetSettingBoolean("enablerecordingedls", false);
-  m_edlStartTimePadding = kodi::addon::GetSettingInt("edlpaddingstart", 0);
-  m_edlStopTimePadding = kodi::addon::GetSettingInt("edlpaddingstop", 0);
+  m_instance.CheckInstanceSettingBoolean("storeextrarecordinginfo", m_storeLastPlayedAndCount);
+  m_instance.CheckInstanceSettingEnum<RecordingLastPlayedMode>("sharerecordinglastplayed", m_recordingLastPlayedMode);
+  m_instance.CheckInstanceSettingBoolean("onlycurrent", m_onlyCurrentLocation);
+  m_instance.CheckInstanceSettingBoolean("virtualfolders", m_virtualFolders);
+  m_instance.CheckInstanceSettingBoolean("keepfolders", m_keepFolders);
+  m_instance.CheckInstanceSettingBoolean("keepfoldersomitlocation", m_keepFoldersOmitLocation);
+  m_instance.CheckInstanceSettingBoolean("recordingsrecursive", m_recordingsRecursive);
+  m_instance.CheckInstanceSettingBoolean("enablerecordingedls", m_enableRecordingEDLs);
+  m_instance.CheckInstanceSettingInt("edlpaddingstart", m_edlStartTimePadding);
+  m_instance.CheckInstanceSettingInt("edlpaddingstop", m_edlStopTimePadding);
 
   //Timers
-  m_enableGenRepeatTimers = kodi::addon::GetSettingBoolean("enablegenrepeattimers", true);
-  m_numGenRepeatTimers = kodi::addon::GetSettingInt("numgenrepeattimers", DEFAULT_NUM_GEN_REPEAT_TIMERS);
-  m_automaticTimerlistCleanup = kodi::addon::GetSettingBoolean("timerlistcleanup", false);
-  m_newTimerRecordingPath = kodi::addon::GetSettingString("recordingpath");
-  m_enableAutoTimers = kodi::addon::GetSettingBoolean("enableautotimers", true);
-  m_limitAnyChannelAutoTimers = kodi::addon::GetSettingBoolean("limitanychannelautotimers", true);
-  m_limitAnyChannelAutoTimersToChannelGroups = kodi::addon::GetSettingBoolean("limitanychannelautotimerstogroups", true);
+  m_instance.CheckInstanceSettingBoolean("enablegenrepeattimers", m_enableGenRepeatTimers);
+  m_instance.CheckInstanceSettingInt("numgenrepeattimers", m_numGenRepeatTimers);
+  m_instance.CheckInstanceSettingBoolean("timerlistcleanup", m_automaticTimerlistCleanup);
+  m_instance.CheckInstanceSettingString("recordingpath", m_newTimerRecordingPath);
+  m_instance.CheckInstanceSettingBoolean("enableautotimers", m_enableAutoTimers);
+  m_instance.CheckInstanceSettingBoolean("limitanychannelautotimers", m_limitAnyChannelAutoTimers);
+  m_instance.CheckInstanceSettingBoolean("limitanychannelautotimerstogroups", m_limitAnyChannelAutoTimersToChannelGroups);
 
   //Timeshift
-  m_timeshift = kodi::addon::GetSettingEnum<Timeshift>("enabletimeshift", Timeshift::OFF);
-  m_timeshiftBufferPath = kodi::addon::GetSettingString("timeshiftbufferpath", ADDON_DATA_BASE_DIR);
-  m_enableTimeshiftDiskLimit = kodi::addon::GetSettingBoolean("enabletimeshiftdisklimit", false);
-  m_timeshiftDiskLimitGB = kodi::addon::GetSettingFloat("timeshiftdisklimit", 4.0f);
-  m_timeshiftEnabledIptv = kodi::addon::GetSettingBoolean("timeshiftEnabledIptv", true);
-  m_useFFmpegReconnect = kodi::addon::GetSettingBoolean("useFFmpegReconnect", true);
-  m_useMpegtsForUnknownStreams = kodi::addon::GetSettingBoolean("useMpegtsForUnknownStreams", true);
+  m_instance.CheckInstanceSettingEnum<Timeshift>("enabletimeshift", m_timeshift);
+  m_instance.CheckInstanceSettingString("timeshiftbufferpath", m_timeshiftBufferPath);
+  m_instance.CheckInstanceSettingBoolean("enabletimeshiftdisklimit", m_enableTimeshiftDiskLimit);
+  m_instance.CheckInstanceSettingFloat("timeshiftdisklimit", m_timeshiftDiskLimitGB);
+  m_instance.CheckInstanceSettingBoolean("timeshiftEnabledIptv", m_timeshiftEnabledIptv);
+  m_instance.CheckInstanceSettingBoolean("useFFmpegReconnect", m_useFFmpegReconnect);
+  m_instance.CheckInstanceSettingBoolean("useMpegtsForUnknownStreams", m_useMpegtsForUnknownStreams);
 
   //Backend
-  m_wakeOnLanMac = kodi::addon::GetSettingString("wakeonlanmac");
-  m_powerstateMode = kodi::addon::GetSettingEnum<PowerstateMode>("powerstatemode", PowerstateMode::DISABLED);
+  m_instance.CheckInstanceSettingString("wakeonlanmac", m_wakeOnLanMac);
+  m_instance.CheckInstanceSettingEnum<PowerstateMode>("powerstatemode", m_powerstateMode);
 
   //Advanced
-  m_prependOutline = kodi::addon::GetSettingEnum<PrependOutline>("prependoutline", PrependOutline::IN_EPG);
-  m_readTimeout = kodi::addon::GetSettingInt("readtimeout", 0);
-  m_streamReadChunkSize = kodi::addon::GetSettingInt("streamreadchunksize", 0);
-  m_noDebug = kodi::addon::GetSettingBoolean("nodebug", false);
-  m_debugNormal = kodi::addon::GetSettingBoolean("debugnormal", false);
-  m_traceDebug = kodi::addon::GetSettingBoolean("tracedebug", false);
+  m_instance.CheckInstanceSettingEnum<PrependOutline>("prependoutline", m_prependOutline);
+  m_instance.CheckInstanceSettingInt("readtimeout", m_readTimeout);
+  m_instance.CheckInstanceSettingInt("streamreadchunksize", m_streamReadChunkSize);
 
   // Now that we've read all the settings construct the connection URL
 
@@ -183,7 +184,7 @@ void Settings::ReadFromAddon()
     m_connectionURL = StringUtils::Format("https://%s%s:%u/", m_connectionURL.c_str(), m_hostname.c_str(), m_portWeb);
 }
 
-ADDON_STATUS Settings::SetValue(const std::string& settingName, const kodi::addon::CSettingValue& settingValue)
+ADDON_STATUS InstanceSettings::SetSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue)
 {
   //Connection
   if (settingName == "host")
@@ -220,13 +221,13 @@ ADDON_STATUS Settings::SetValue(const std::string& settingName, const kodi::addo
   else if (settingName == "iconpath")
     return SetStringSetting<ADDON_STATUS>(settingName, settingValue, m_iconPath, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
   else if (settingName == "updateint")
-    return SetSetting<unsigned int, ADDON_STATUS>(settingName, settingValue, m_updateInterval, ADDON_STATUS_OK, ADDON_STATUS_OK);
+    return SetSetting<int, ADDON_STATUS>(settingName, settingValue, m_updateInterval, ADDON_STATUS_OK, ADDON_STATUS_OK);
   else if (settingName == "updatemode")
     return SetEnumSetting<UpdateMode, ADDON_STATUS>(settingName, settingValue, m_updateMode, ADDON_STATUS_OK, ADDON_STATUS_OK);
   else if (settingName == "channelandgroupupdatemode")
     return SetEnumSetting<ChannelAndGroupUpdateMode, ADDON_STATUS>(settingName, settingValue, m_channelAndGroupUpdateMode, ADDON_STATUS_OK, ADDON_STATUS_OK);
   else if (settingName == "channelandgroupupdatehour")
-    return SetSetting<unsigned int, ADDON_STATUS>(settingName, settingValue, m_channelAndGroupUpdateHour, ADDON_STATUS_OK, ADDON_STATUS_OK);
+    return SetSetting<int, ADDON_STATUS>(settingName, settingValue, m_channelAndGroupUpdateHour, ADDON_STATUS_OK, ADDON_STATUS_OK);
   //Channels
   else if (settingName == "zap")
     return SetSetting<bool, ADDON_STATUS>(settingName, settingValue, m_zap, ADDON_STATUS_OK, ADDON_STATUS_OK);
@@ -243,7 +244,7 @@ ADDON_STATUS Settings::SetValue(const std::string& settingName, const kodi::addo
   else if (settingName == "tvgroupmode")
     return SetEnumSetting<ChannelGroupMode, ADDON_STATUS>(settingName, settingValue, m_tvChannelGroupMode, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
   else if (settingName == "numtvgroups")
-    return SetSetting<unsigned int, ADDON_STATUS>(settingName, settingValue, m_numTVGroups, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
+    return SetSetting<int, ADDON_STATUS>(settingName, settingValue, m_numTVGroups, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
   else if (settingName == "onetvgroup")
     return SetStringSetting<ADDON_STATUS>(settingName, settingValue, m_oneTVGroup, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
   else if (settingName == "twotvgroup")
@@ -263,7 +264,7 @@ ADDON_STATUS Settings::SetValue(const std::string& settingName, const kodi::addo
   else if (settingName == "radiogroupmode")
     return SetEnumSetting<ChannelGroupMode, ADDON_STATUS>(settingName, settingValue, m_radioChannelGroupMode, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
   else if (settingName == "numradiogroups")
-    return SetSetting<unsigned int, ADDON_STATUS>(settingName, settingValue, m_numRadioGroups, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
+    return SetSetting<int, ADDON_STATUS>(settingName, settingValue, m_numRadioGroups, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
   else if (settingName == "oneradiogroup")
     return SetStringSetting<ADDON_STATUS>(settingName, settingValue, m_oneRadioGroup, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
   else if (settingName == "tworadiogroup")
@@ -370,22 +371,16 @@ ADDON_STATUS Settings::SetValue(const std::string& settingName, const kodi::addo
     return SetSetting<int, ADDON_STATUS>(settingName, settingValue, m_readTimeout, ADDON_STATUS_NEED_RESTART, ADDON_STATUS_OK);
   else if (settingName == "streamreadchunksize")
     return SetSetting<int, ADDON_STATUS>(settingName, settingValue, m_streamReadChunkSize, ADDON_STATUS_OK, ADDON_STATUS_OK);
-  else if (settingName == "nodebug")
-    return SetSetting<bool, ADDON_STATUS>(settingName, settingValue, m_noDebug, ADDON_STATUS_OK, ADDON_STATUS_OK);
-  else if (settingName == "debugnormal")
-    return SetSetting<bool, ADDON_STATUS>(settingName, settingValue, m_debugNormal, ADDON_STATUS_OK, ADDON_STATUS_OK);
-  else if (settingName == "tracedebug")
-    return SetSetting<bool, ADDON_STATUS>(settingName, settingValue, m_traceDebug, ADDON_STATUS_OK, ADDON_STATUS_OK);
 
   return ADDON_STATUS_OK;
 }
 
-bool Settings::IsTimeshiftBufferPathValid() const
+bool InstanceSettings::IsTimeshiftBufferPathValid() const
 {
   return kodi::vfs::DirectoryExists(m_timeshiftBufferPath);
 }
 
-bool Settings::LoadCustomChannelGroupFile(std::string& xmlFile, std::vector<std::string>& channelGroupNameList)
+bool InstanceSettings::LoadCustomChannelGroupFile(std::string& xmlFile, std::vector<std::string>& channelGroupNameList)
 {
   channelGroupNameList.clear();
 
diff --git a/src/enigma2/Settings.h b/src/enigma2/InstanceSettings.h
similarity index 90%
rename from src/enigma2/Settings.h
rename to src/enigma2/InstanceSettings.h
index 8b6ab92..757263b 100644
--- a/src/enigma2/Settings.h
+++ b/src/enigma2/InstanceSettings.h
@@ -36,13 +36,10 @@ namespace enigma2
   static const std::string DEFAULT_SHOW_INFO_FILE = ADDON_DATA_BASE_DIR + "/showInfo/English-ShowInfo.xml";
   static const std::string DEFAULT_GENRE_ID_MAP_FILE = ADDON_DATA_BASE_DIR + "/genres/genreIdMappings/Sky-UK.xml";
   static const std::string DEFAULT_GENRE_TEXT_MAP_FILE = ADDON_DATA_BASE_DIR + "/genres/genreRytecTextMappings/Rytec-UK-Ireland.xml";
-  static const std::string DEFAULT_CUSTOM_TV_GROUPS_FILE = ADDON_DATA_BASE_DIR + "/channelGroups/customRadioGroups-example.xml";
+  static const std::string DEFAULT_CUSTOM_TV_GROUPS_FILE = ADDON_DATA_BASE_DIR + "/channelGroups/customTVGroups-example.xml";
   static const std::string DEFAULT_CUSTOM_RADIO_GROUPS_FILE = ADDON_DATA_BASE_DIR + "/channelGroups/customRadioGroups-example.xml";
   static const int DEFAULT_NUM_GEN_REPEAT_TIMERS = 1;
 
-  static const std::string CHANNEL_GROUPS_DIR = "/channelGroups";
-  static const std::string CHANNEL_GROUPS_ADDON_DATA_BASE_DIR = ADDON_DATA_BASE_DIR + CHANNEL_GROUPS_DIR;
-
   enum class UpdateMode
     : int // same type as addon settings
   {
@@ -108,20 +105,13 @@ namespace enigma2
     WAKEUP_THEN_STANDBY
   };
 
-  class ATTR_DLL_LOCAL Settings
+  class ATTR_DLL_LOCAL InstanceSettings
   {
   public:
-    /**
-     * Singleton getter for the instance
-     */
-    static Settings& GetInstance()
-    {
-      static Settings settings;
-      return settings;
-    }
+    explicit InstanceSettings(kodi::addon::IAddonInstance& instance);
 
-    void ReadFromAddon();
-    ADDON_STATUS SetValue(const std::string& settingName, const kodi::addon::CSettingValue& settingValue);
+    void ReadSettings();
+    ADDON_STATUS SetSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue);
 
     //Connection
     const std::string& GetHostname() const { return m_hostname; }
@@ -142,9 +132,9 @@ namespace enigma2
     bool UsePiconsEuFormat() const { return m_usePiconsEuFormat; }
     bool UseOpenWebIfPiconPath() const { return m_useOpenWebIfPiconPath; }
     const std::string& GetIconPath() const { return m_iconPath; }
-    unsigned int GetUpdateIntervalMins() const { return m_updateInterval; }
+    int GetUpdateIntervalMins() const { return m_updateInterval; }
     UpdateMode GetUpdateMode() const { return m_updateMode; }
-    unsigned int GetChannelAndGroupUpdateHour() const { return m_channelAndGroupUpdateHour; }
+    int GetChannelAndGroupUpdateHour() const { return m_channelAndGroupUpdateHour; }
     ChannelAndGroupUpdateMode GetChannelAndGroupUpdateMode() const { return m_channelAndGroupUpdateMode; }
 
     //Channel
@@ -214,9 +204,6 @@ namespace enigma2
     const PrependOutline& GetPrependOutline() const { return m_prependOutline; }
     int GetReadTimeoutSecs() const { return m_readTimeout; }
     int GetStreamReadChunkSizeKb() const { return m_streamReadChunkSize; }
-    bool GetNoDebug() const { return m_noDebug; };
-    bool GetDebugNormal() const { return m_debugNormal; };
-    bool GetTraceDebug() const { return m_traceDebug; };
 
     const std::string& GetConnectionURL() const { return m_connectionURL; }
 
@@ -268,10 +255,8 @@ namespace enigma2
     std::vector<std::string>& GetCustomRadioChannelGroupNameList() { return m_customRadioChannelGroupNameList; }
 
   private:
-    Settings() = default;
-
-    Settings(Settings const&) = delete;
-    void operator=(Settings const&) = delete;
+    InstanceSettings(const InstanceSettings&) = delete;
+    void operator=(const InstanceSettings&) = delete;
 
     template<typename T, typename V>
     V SetSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue, T& currentValue, V returnValueIfChanged, V defaultReturnValue)
@@ -349,10 +334,10 @@ namespace enigma2
     bool m_usePiconsEuFormat = false;
     bool m_useOpenWebIfPiconPath = false;
     std::string m_iconPath = "";
-    unsigned int m_updateInterval = DEFAULT_UPDATE_INTERVAL;
+    int m_updateInterval = DEFAULT_UPDATE_INTERVAL;
     UpdateMode m_updateMode = UpdateMode::TIMERS_AND_RECORDINGS;
     ChannelAndGroupUpdateMode m_channelAndGroupUpdateMode = ChannelAndGroupUpdateMode::RELOAD_CHANNELS_AND_GROUPS;
-    unsigned int m_channelAndGroupUpdateHour = DEFAULT_CHANNEL_AND_GROUP_UPDATE_HOUR;
+    int m_channelAndGroupUpdateHour = DEFAULT_CHANNEL_AND_GROUP_UPDATE_HOUR;
 
     //Channel
     bool m_zap = false;
@@ -362,7 +347,7 @@ namespace enigma2
     std::string m_defaultProviderName;
     std::string m_mapProviderNameFile = DEFAULT_PROVIDER_NAME_MAP_FILE;
     ChannelGroupMode m_tvChannelGroupMode = ChannelGroupMode::ALL_GROUPS;
-    unsigned int m_numTVGroups = DEFAULT_NUM_GROUPS;
+    int m_numTVGroups = DEFAULT_NUM_GROUPS;
     std::string m_oneTVGroup = "";
     std::string m_twoTVGroup = "";
     std::string m_threeTVGroup = "";
@@ -372,7 +357,7 @@ namespace enigma2
     FavouritesGroupMode m_tvFavouritesMode = FavouritesGroupMode::DISABLED;
     bool m_excludeLastScannedTVGroup = true;
     ChannelGroupMode m_radioChannelGroupMode = ChannelGroupMode::ALL_GROUPS;
-    unsigned int m_numRadioGroups = DEFAULT_NUM_GROUPS;
+    int m_numRadioGroups = DEFAULT_NUM_GROUPS;
     std::string m_oneRadioGroup = "";
     std::string m_twoRadioGroup = "";
     std::string m_threeRadioGroup = "";
@@ -384,23 +369,23 @@ namespace enigma2
 
     //EPG
     bool m_extractShowInfo = true;
-    std::string m_extractShowInfoFile;
+    std::string m_extractShowInfoFile = DEFAULT_SHOW_INFO_FILE;
     bool m_mapGenreIds = true;
-    std::string m_mapGenreIdsFile;
-    bool m_mapRytecTextGenres = true;
-    std::string m_mapRytecTextGenresFile;
+    std::string m_mapGenreIdsFile = DEFAULT_GENRE_ID_MAP_FILE;
+    bool m_mapRytecTextGenres = false;
+    std::string m_mapRytecTextGenresFile = DEFAULT_GENRE_TEXT_MAP_FILE;
     bool m_logMissingGenreMappings = true;
-    int m_epgDelayPerChannel;
+    int m_epgDelayPerChannel = 0;
 
     //Recordings
     bool m_storeLastPlayedAndCount = true;
     RecordingLastPlayedMode m_recordingLastPlayedMode = RecordingLastPlayedMode::ACROSS_KODI_INSTANCES;
     std::string m_newTimerRecordingPath = "";
     bool m_onlyCurrentLocation = false;
-    bool m_virtualFolders = false;
-    bool m_keepFolders = false;
-    bool m_keepFoldersOmitLocation = false;
-    bool m_recordingsRecursive = false;
+    bool m_virtualFolders = true;
+    bool m_keepFolders = true;
+    bool m_keepFoldersOmitLocation = true;
+    bool m_recordingsRecursive = true;
     bool m_enableRecordingEDLs = false;
     int m_edlStartTimePadding = 0;
     int m_edlStopTimePadding = 0;
@@ -411,13 +396,13 @@ namespace enigma2
     bool m_automaticTimerlistCleanup = false;
     bool m_enableAutoTimers = true;
     bool m_limitAnyChannelAutoTimers = true;
-    bool m_limitAnyChannelAutoTimersToChannelGroups = false;
+    bool m_limitAnyChannelAutoTimersToChannelGroups = true;
 
     //Timeshift
     Timeshift m_timeshift = Timeshift::OFF;
     std::string m_timeshiftBufferPath = ADDON_DATA_BASE_DIR;
     bool m_enableTimeshiftDiskLimit = false;
-    float m_timeshiftDiskLimitGB = 0.0f;
+    float m_timeshiftDiskLimitGB = 4.0f;
     bool m_timeshiftEnabledIptv = true;
     bool m_useFFmpegReconnect = true;
     bool m_useMpegtsForUnknownStreams = true;
@@ -432,9 +417,6 @@ namespace enigma2
     PrependOutline m_prependOutline = PrependOutline::IN_EPG;
     int m_readTimeout = 0;
     int m_streamReadChunkSize = 0;
-    bool m_noDebug = false;
-    bool m_debugNormal = false;
-    bool m_traceDebug = false;
 
     //Last Scanned
     bool m_usesLastScannedChannelGroup = false;
@@ -452,5 +434,7 @@ namespace enigma2
     //PVR Props
     std::string m_szUserPath = "";
     std::string m_szClientPath = "";
+
+    kodi::addon::IAddonInstance& m_instance;
   };
 } //namespace enigma2
diff --git a/src/enigma2/Providers.cpp b/src/enigma2/Providers.cpp
index 60d29ee..883aa7e 100644
--- a/src/enigma2/Providers.cpp
+++ b/src/enigma2/Providers.cpp
@@ -20,11 +20,11 @@ using namespace enigma2::data;
 using namespace enigma2::utilities;
 using namespace kodi::tools;
 
-Providers::Providers()
+Providers::Providers(std::shared_ptr<InstanceSettings>& settings) : m_settings(settings)
 {
   FileUtils::CopyDirectory(FileUtils::GetResourceDataPath() + PROVIDER_DIR, PROVIDER_ADDON_DATA_BASE_DIR, true);
 
-  std::string providerMappingsFile = Settings::GetInstance().GetProviderNameMapFile();
+  std::string providerMappingsFile = m_settings->GetProviderNameMapFile();
   if (LoadProviderMappingFile(providerMappingsFile))
     Logger::Log(LEVEL_INFO, "%s - Loaded '%d' providers mappings", __func__, m_providerMappingsMap.size());
   else
diff --git a/src/enigma2/Providers.h b/src/enigma2/Providers.h
index 6ee886d..21d70f9 100644
--- a/src/enigma2/Providers.h
+++ b/src/enigma2/Providers.h
@@ -10,7 +10,7 @@
 
 #include "data/Provider.h"
 
-#include "Settings.h"
+#include "InstanceSettings.h"
 
 #include <memory>
 #include <string>
@@ -27,7 +27,7 @@ namespace enigma2
   class ATTR_DLL_LOCAL Providers
   {
   public:
-    Providers();
+    Providers(std::shared_ptr<InstanceSettings>& settings);
 
     void GetProviders(std::vector<kodi::addon::PVRProvider>& kodiProviders) const;
 
@@ -51,5 +51,7 @@ namespace enigma2
     std::unordered_map<std::string, std::shared_ptr<enigma2::data::Provider>> m_providersNameMap;
 
     std::unordered_map<std::string, enigma2::data::Provider> m_providerMappingsMap;
+
+    std::shared_ptr<enigma2::InstanceSettings> m_settings;
   };
 } //namespace enigma2
diff --git a/src/enigma2/Recordings.cpp b/src/enigma2/Recordings.cpp
index 681da30..b889a85 100644
--- a/src/enigma2/Recordings.cpp
+++ b/src/enigma2/Recordings.cpp
@@ -30,8 +30,8 @@ using json = nlohmann::json;
 
 const std::string Recordings::FILE_NOT_FOUND_RESPONSE_SUFFIX = "not found";
 
-Recordings::Recordings(IConnectionListener& connectionListener, Channels& channels, Providers& providers, enigma2::extract::EpgEntryExtractor& entryExtractor)
-  : m_connectionListener(connectionListener), m_channels(channels), m_providers(providers), m_entryExtractor(entryExtractor)
+Recordings::Recordings(IConnectionListener& connectionListener, std::shared_ptr<InstanceSettings>& settings, Channels& channels, Providers& providers, enigma2::extract::EpgEntryExtractor& entryExtractor)
+  : m_connectionListener(connectionListener), m_settings(settings), m_channels(channels), m_providers(providers), m_entryExtractor(entryExtractor)
 {
   std::random_device randomDevice; //Will be used to obtain a seed for the random number engine
   m_randomGenerator = std::mt19937(randomDevice()); //Standard mersenne_twister_engine seeded with randomDevice()
@@ -100,8 +100,8 @@ void Recordings::GetRecordingEdl(const std::string& recordingId, std::vector<kod
           continue;
         }
 
-        start += static_cast<float>(Settings::GetInstance().GetEDLStartTimePadding()) / 1000.0f;
-        stop += static_cast<float>(Settings::GetInstance().GetEDLStopTimePadding()) / 1000.0f;
+        start += static_cast<float>(m_settings->GetEDLStartTimePadding()) / 1000.0f;
+        stop += static_cast<float>(m_settings->GetEDLStopTimePadding()) / 1000.0f;
 
         start = std::max(start, 0.0f);
         stop = std::max(stop, 0.0f);
@@ -123,7 +123,7 @@ void Recordings::GetRecordingEdl(const std::string& recordingId, std::vector<kod
 
 RecordingEntry Recordings::GetRecording(const std::string& recordingId) const
 {
-  RecordingEntry entry;
+  RecordingEntry entry{m_settings};
 
   auto recordingPair = m_recordingsIdMap.find(recordingId);
   if (recordingPair != m_recordingsIdMap.end())
@@ -136,7 +136,7 @@ RecordingEntry Recordings::GetRecording(const std::string& recordingId) const
 
 bool Recordings::IsInVirtualRecordingFolder(const RecordingEntry& recordingToCheck, bool deleted) const
 {
-  if (Settings::GetInstance().GetKeepRecordingsFolders() && !recordingToCheck.InLocationRoot())
+  if (m_settings->GetKeepRecordingsFolders() && !recordingToCheck.InLocationRoot())
     return false;
 
   const std::string& recordingFolderToCheck = recordingToCheck.GetTitle();
@@ -145,7 +145,7 @@ bool Recordings::IsInVirtualRecordingFolder(const RecordingEntry& recordingToChe
   int iMatches = 0;
   for (const auto& recording : recordings)
   {
-    if (Settings::GetInstance().GetKeepRecordingsFolders() && !recording.InLocationRoot())
+    if (m_settings->GetKeepRecordingsFolders() && !recording.InLocationRoot())
       continue;
 
     if (recordingFolderToCheck == recording.GetTitle())
@@ -170,12 +170,12 @@ PVR_ERROR Recordings::RenameRecording(const kodi::addon::PVRRecording& recording
   if (!recordingEntry.GetRecordingId().empty())
   {
     Logger::Log(LEVEL_DEBUG, "%s Sending rename command for recording '%s' to '%s'", __func__, recordingEntry.GetTitle().c_str(), recording.GetTitle().c_str());
-    const std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s&title=%s", Settings::GetInstance().GetConnectionURL().c_str(),
+    const std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s&title=%s", m_settings->GetConnectionURL().c_str(),
                                                     WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str(),
                                                     WebUtils::URLEncodeInline(recording.GetTitle()).c_str());
     std::string strResult;
 
-    if (WebUtils::SendSimpleJsonCommand(jsonUrl, strResult))
+    if (WebUtils::SendSimpleJsonCommand(jsonUrl, m_settings->GetConnectionURL(), strResult))
     {
       m_connectionListener.TriggerRecordingUpdate();
       return PVR_ERROR_NO_ERROR;
@@ -215,13 +215,13 @@ PVR_ERROR Recordings::SetRecordingPlayCount(const kodi::addon::PVRRecording& rec
 
     Logger::Log(LEVEL_DEBUG, "%s Setting playcount for recording '%s' to '%d'", __func__, recordingEntry.GetTitle().c_str(), count);
     const std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s&deltag=%s&addtag=%s",
-                                Settings::GetInstance().GetConnectionURL().c_str(),
+                                m_settings->GetConnectionURL().c_str(),
                                 WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str(),
                                 WebUtils::URLEncodeInline(deleteTagsArg).c_str(),
                                 WebUtils::URLEncodeInline(addTagsArg).c_str());
     std::string strResult;
 
-    if (WebUtils::SendSimpleJsonCommand(jsonUrl, strResult))
+    if (WebUtils::SendSimpleJsonCommand(jsonUrl, m_settings->GetConnectionURL(), strResult))
     {
       m_connectionListener.TriggerRecordingUpdate();
       return PVR_ERROR_NO_ERROR;
@@ -248,7 +248,7 @@ PVR_ERROR Recordings::SetRecordingLastPlayedPosition(const kodi::addon::PVRRecor
     bool readExtraCutsInfo = ReadExtaRecordingCutsInfo(recordingEntry, cuts, oldTags);
     std::string cutsArg;
     bool cutsLastPlayedSet = false;
-    if (readExtraCutsInfo && Settings::GetInstance().GetRecordingLastPlayedMode() == RecordingLastPlayedMode::ACROSS_KODI_AND_E2_INSTANCES)
+    if (readExtraCutsInfo && m_settings->GetRecordingLastPlayedMode() == RecordingLastPlayedMode::ACROSS_KODI_AND_E2_INSTANCES)
     {
       for (auto cut : cuts)
       {
@@ -298,10 +298,10 @@ PVR_ERROR Recordings::SetRecordingLastPlayedPosition(const kodi::addon::PVRRecor
     Logger::Log(LEVEL_DEBUG, "%s Setting last played position for recording '%s' to '%d'", __func__, recordingEntry.GetTitle().c_str(), lastPlayedPosition);
 
     std::string jsonUrl;
-    if (Settings::GetInstance().GetRecordingLastPlayedMode() == RecordingLastPlayedMode::ACROSS_KODI_INSTANCES || !cutsLastPlayedSet)
+    if (m_settings->GetRecordingLastPlayedMode() == RecordingLastPlayedMode::ACROSS_KODI_INSTANCES || !cutsLastPlayedSet)
     {
       jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s&deltag=%s&addtag=%s",
-                Settings::GetInstance().GetConnectionURL().c_str(),
+                m_settings->GetConnectionURL().c_str(),
                 WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str(),
                 WebUtils::URLEncodeInline(deleteTagsArg).c_str(),
                 WebUtils::URLEncodeInline(addTagsArg).c_str());
@@ -309,7 +309,7 @@ PVR_ERROR Recordings::SetRecordingLastPlayedPosition(const kodi::addon::PVRRecor
     else
     {
       jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s&deltag=%s&addtag=%s&cuts=%s",
-                Settings::GetInstance().GetConnectionURL().c_str(),
+                m_settings->GetConnectionURL().c_str(),
                 WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str(),
                 WebUtils::URLEncodeInline(deleteTagsArg).c_str(),
                 WebUtils::URLEncodeInline(addTagsArg).c_str(),
@@ -317,7 +317,7 @@ PVR_ERROR Recordings::SetRecordingLastPlayedPosition(const kodi::addon::PVRRecor
     }
     std::string strResult;
 
-    if (WebUtils::SendSimpleJsonCommand(jsonUrl, strResult))
+    if (WebUtils::SendSimpleJsonCommand(jsonUrl, m_settings->GetConnectionURL(), strResult))
     {
       m_connectionListener.TriggerRecordingUpdate();
       return PVR_ERROR_NO_ERROR;
@@ -338,7 +338,7 @@ int Recordings::GetRecordingLastPlayedPosition(const kodi::addon::PVRRecording&
 
   Logger::Log(LEVEL_DEBUG, "%s Recording: %s - Checking if Next Sync Time: %lld < Now: %lld ", __func__, recordingEntry.GetTitle().c_str(), static_cast<long long>(recordingEntry.GetNextSyncTime()), static_cast<long long>(now));
 
-  if (Settings::GetInstance().GetRecordingLastPlayedMode() == RecordingLastPlayedMode::ACROSS_KODI_AND_E2_INSTANCES &&
+  if (m_settings->GetRecordingLastPlayedMode() == RecordingLastPlayedMode::ACROSS_KODI_AND_E2_INSTANCES &&
       recordingEntry.GetNextSyncTime() < now)
   {
     //We need to get this value separately as it's not returned by the movielist api
@@ -383,13 +383,13 @@ int Recordings::GetRecordingLastPlayedPosition(const kodi::addon::PVRRecording&
       Logger::Log(LEVEL_DEBUG, "%s Setting last played position from E2 cuts file to tags for recording '%s' to '%d'", __func__, recordingEntry.GetTitle().c_str(), lastPlayedPosition);
 
       std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s&deltag=%s&addtag=%s",
-                            Settings::GetInstance().GetConnectionURL().c_str(),
+                            m_settings->GetConnectionURL().c_str(),
                             WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str(),
                             WebUtils::URLEncodeInline(deleteTagsArg).c_str(),
                             WebUtils::URLEncodeInline(addTagsArg).c_str());
       std::string strResult;
 
-      if (WebUtils::SendSimpleJsonCommand(jsonUrl, strResult))
+      if (WebUtils::SendSimpleJsonCommand(jsonUrl, m_settings->GetConnectionURL(), strResult))
       {
         recordingEntry.SetLastPlayedPosition(lastPlayedPosition);
         recordingEntry.SetNextSyncTime(newNextSyncTime);
@@ -425,7 +425,7 @@ PVR_ERROR Recordings::GetRecordingSize(const kodi::addon::PVRRecording& recordin
 
 bool Recordings::UpdateRecordingSizeFromMovieDetails(RecordingEntry& recordingEntry)
 {
-  const std::string jsonUrl = StringUtils::Format("%sapi/moviedetails?sref=%s", Settings::GetInstance().GetConnectionURL().c_str(),
+  const std::string jsonUrl = StringUtils::Format("%sapi/moviedetails?sref=%s", m_settings->GetConnectionURL().c_str(),
                                                   WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str());
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
@@ -485,13 +485,13 @@ void Recordings::SetRecordingNextSyncTime(RecordingEntry& recordingEntry, time_t
   }
 
   const std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s&deltag=%s&addtag=%s",
-                              Settings::GetInstance().GetConnectionURL().c_str(),
+                              m_settings->GetConnectionURL().c_str(),
                               WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str(),
                               WebUtils::URLEncodeInline(deleteTagsArg).c_str(),
                               WebUtils::URLEncodeInline(addTagsArg).c_str());
   std::string strResult;
 
-  if (!WebUtils::SendSimpleJsonCommand(jsonUrl, strResult))
+  if (!WebUtils::SendSimpleJsonCommand(jsonUrl, m_settings->GetConnectionURL(), strResult))
   {
     recordingEntry.SetNextSyncTime(nextSyncTime);
     Logger::Log(LEVEL_ERROR, "%s Error setting next sync time for recording '%s' to '%lld'", __func__, recordingEntry.GetTitle().c_str(), static_cast<long long>(nextSyncTime));
@@ -503,7 +503,7 @@ PVR_ERROR Recordings::DeleteRecording(const kodi::addon::PVRRecording& recinfo)
   const std::string strTmp = StringUtils::Format("web/moviedelete?sRef=%s", WebUtils::URLEncodeInline(recinfo.GetRecordingId()).c_str());
 
   std::string strResult;
-  if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+  if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
     return PVR_ERROR_FAILED;
 
   // No need to call m_connectionListener.TriggerRecordingUpdate() as it is handled by kodi PVR.
@@ -523,7 +523,7 @@ PVR_ERROR Recordings::UndeleteRecording(const kodi::addon::PVRRecording& recordi
   const std::string strTmp = StringUtils::Format("web/moviemove?sRef=%s&dirname=%s", WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str(), WebUtils::URLEncodeInline(newRecordingDirectory).c_str());
 
   std::string strResult;
-  if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+  if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
     return PVR_ERROR_FAILED;
 
   return PVR_ERROR_NO_ERROR;
@@ -537,7 +537,7 @@ PVR_ERROR Recordings::DeleteAllRecordingsFromTrash()
         StringUtils::Format("web/moviedelete?sRef=%s", WebUtils::URLEncodeInline(deletedRecording.GetRecordingId()).c_str());
 
     std::string strResult;
-    WebUtils::SendSimpleCommand(strTmp, strResult, true);
+    WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult, true);
   }
 
   return PVR_ERROR_NO_ERROR;
@@ -565,7 +565,7 @@ const std::string Recordings::GetRecordingURL(const kodi::addon::PVRRecording& r
 
 bool Recordings::ReadExtaRecordingCutsInfo(const data::RecordingEntry& recordingEntry, std::vector<std::pair<int, int64_t>>& cuts, std::vector<std::string>& tags)
 {
-  const std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s", Settings::GetInstance().GetConnectionURL().c_str(),
+  const std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s", m_settings->GetConnectionURL().c_str(),
                                                   WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str());
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
@@ -623,7 +623,7 @@ bool Recordings::ReadExtaRecordingCutsInfo(const data::RecordingEntry& recording
 
 bool Recordings::ReadExtraRecordingPlayCountInfo(const data::RecordingEntry& recordingEntry, std::vector<std::string>& tags)
 {
-  const std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s", Settings::GetInstance().GetConnectionURL().c_str(),
+  const std::string jsonUrl = StringUtils::Format("%sapi/movieinfo?sref=%s", m_settings->GetConnectionURL().c_str(),
                                                   WebUtils::URLEncodeInline(recordingEntry.GetRecordingId()).c_str());
 
   const std::string strJson = WebUtils::GetHttpXML(jsonUrl);
@@ -673,10 +673,10 @@ void Recordings::ClearLocations()
 bool Recordings::LoadLocations()
 {
   std::string url;
-  if (Settings::GetInstance().GetRecordingsFromCurrentLocationOnly())
-    url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/getcurrlocation");
+  if (m_settings->GetRecordingsFromCurrentLocationOnly())
+    url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "web/getcurrlocation");
   else
-    url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/getlocations");
+    url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "web/getlocations");
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -759,11 +759,11 @@ void Recordings::LoadRecordings(bool deleted)
 namespace
 {
 
-std::string GetRecordingsParams(const std::string recordingLocation, bool deleted)
+std::string GetRecordingsParams(const std::string recordingLocation, bool deleted, bool getRecordingsRecursively, bool supportsMovieListRecursive, bool supportsMovieListOWFInternal)
 {
   std::string recordingsParams;
 
-  if (!deleted && Settings::GetInstance().GetRecordingsRecursively() && Settings::GetInstance().SupportsMovieListRecursive())
+  if (!deleted && getRecordingsRecursively && supportsMovieListRecursive)
   {
     if (recordingLocation == "default")
       recordingsParams = "?recursive=1";
@@ -772,14 +772,14 @@ std::string GetRecordingsParams(const std::string recordingLocation, bool delete
 
     // &internal=true requests that openwebif uses it own OWFMovieList instead of the E2 MovieList
     // becuase the E2 MovieList causes memory leaks
-    if (Settings::GetInstance().SupportsMovieListOWFInternal())
+    if (supportsMovieListOWFInternal)
       recordingsParams += "&internal=1";
   }
   else
   {
     // &internal=true requests that openwebif uses it own OWFMovieList instead of the E2 MovieList
     // becuase the E2 MovieList causes memory leaks
-    if (Settings::GetInstance().SupportsMovieListOWFInternal())
+    if (supportsMovieListOWFInternal)
     {
       if (recordingLocation == "default")
         recordingsParams += "?internal=1";
@@ -798,16 +798,16 @@ bool Recordings::GetRecordingsFromLocation(const std::string recordingLocation,
   std::string url;
   std::string directory;
 
-  std::string recordingsParams = GetRecordingsParams(recordingLocation, deleted);
+  std::string recordingsParams = GetRecordingsParams(recordingLocation, deleted, m_settings->GetRecordingsRecursively(), m_settings->SupportsMovieListRecursive(), m_settings->SupportsMovieListOWFInternal());
 
   if (recordingLocation == "default")
   {
-    url = StringUtils::Format("%s%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/movielist", recordingsParams.c_str());
+    url = StringUtils::Format("%s%s%s", m_settings->GetConnectionURL().c_str(), "web/movielist", recordingsParams.c_str());
     directory = StringUtils::Format("/");
   }
   else
   {
-    url = StringUtils::Format("%s%s?dirname=%s%s", Settings::GetInstance().GetConnectionURL().c_str(), "web/movielist",
+    url = StringUtils::Format("%s%s?dirname=%s%s", m_settings->GetConnectionURL().c_str(), "web/movielist",
                               WebUtils::URLEncodeInline(recordingLocation).c_str(), recordingsParams.c_str());
     directory = recordingLocation;
   }
@@ -845,8 +845,7 @@ bool Recordings::GetRecordingsFromLocation(const std::string recordingLocation,
   {
     for (; pNode != nullptr; pNode = pNode->NextSiblingElement("e2movie"))
     {
-
-      RecordingEntry recordingEntry;
+      RecordingEntry recordingEntry{m_settings};
 
       if (!recordingEntry.UpdateFrom(pNode, directory, deleted, m_channels))
         continue;
diff --git a/src/enigma2/Recordings.h b/src/enigma2/Recordings.h
index 52ad873..e89d7a1 100644
--- a/src/enigma2/Recordings.h
+++ b/src/enigma2/Recordings.h
@@ -8,6 +8,7 @@
 #pragma once
 
 #include "Channels.h"
+#include "InstanceSettings.h"
 #include "data/RecordingEntry.h"
 #include "extract/EpgEntryExtractor.h"
 
@@ -30,7 +31,7 @@ namespace enigma2
   class ATTR_DLL_LOCAL Recordings
   {
   public:
-    Recordings(IConnectionListener& connectionListener, Channels& channels, Providers& providers, enigma2::extract::EpgEntryExtractor& entryExtractor);
+    Recordings(IConnectionListener& connectionListener, std::shared_ptr<enigma2::InstanceSettings>& settings, Channels& channels, Providers& providers, enigma2::extract::EpgEntryExtractor& entryExtractor);
     void GetRecordings(std::vector<kodi::addon::PVRRecording>& recordings, bool deleted);
     int GetNumRecordings(bool deleted) const;
     void ClearRecordings(bool deleted);
@@ -76,5 +77,7 @@ namespace enigma2
     Channels& m_channels;
     Providers& m_providers;
     enigma2::extract::EpgEntryExtractor& m_entryExtractor;
+
+    std::shared_ptr<enigma2::InstanceSettings> m_settings;
   };
 } //namespace enigma2
diff --git a/src/enigma2/Timers.cpp b/src/enigma2/Timers.cpp
index ff033eb..2e4c85a 100644
--- a/src/enigma2/Timers.cpp
+++ b/src/enigma2/Timers.cpp
@@ -39,7 +39,7 @@ T* Timers::GetTimer(std::function<bool(const T&)> func, std::vector<T>& timerlis
 
 bool Timers::LoadTimers(std::vector<Timer>& timers) const
 {
-  const std::string url = StringUtils::Format("%s%s", m_settings.GetConnectionURL().c_str(), "web/timerlist");
+  const std::string url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "web/timerlist");
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -72,7 +72,7 @@ bool Timers::LoadTimers(std::vector<Timer>& timers) const
 
   for (; pNode != nullptr; pNode = pNode->NextSiblingElement("e2timer"))
   {
-    Timer newTimer;
+    Timer newTimer{m_settings};
 
     if (!newTimer.UpdateFrom(pNode, m_channels))
       continue;
@@ -83,7 +83,7 @@ bool Timers::LoadTimers(std::vector<Timer>& timers) const
     timers.emplace_back(newTimer);
 
     if ((newTimer.GetType() == Timer::MANUAL_REPEATING || newTimer.GetType() == Timer::EPG_REPEATING) &&
-        m_settings.GetGenRepeatTimersEnabled() && m_settings.GetNumGenRepeatTimers() > 0)
+        m_settings->GetGenRepeatTimersEnabled() && m_settings->GetNumGenRepeatTimers() > 0)
     {
       GenerateChildManualRepeatingTimers(&timers, &newTimer);
     }
@@ -102,12 +102,12 @@ void Timers::GenerateChildManualRepeatingTimers(std::vector<Timer>* timers, Time
   int weekdays = timer->GetWeekdays();
   const time_t ONE_DAY = 24 * 60 * 60;
 
-  if (m_settings.GetNumGenRepeatTimers() && weekdays != PVR_WEEKDAY_NONE)
+  if (m_settings->GetNumGenRepeatTimers() && weekdays != PVR_WEEKDAY_NONE)
   {
     time_t nextStartTime = timer->GetStartTime();
     time_t nextEndTime = timer->GetEndTime();
 
-    for (int i = 0; i < m_settings.GetNumGenRepeatTimers(); i++)
+    for (int i = 0; i < m_settings->GetNumGenRepeatTimers(); i++)
     {
       //Even if one day a week the max we can hit is 3 weeks
       for (int i = 0; i < DAYS_IN_WEEK; i++)
@@ -122,7 +122,7 @@ void Timers::GenerateChildManualRepeatingTimers(std::vector<Timer>* timers, Time
         if (timer->GetWeekdays() & (1 << pvrWeekday))
         {
           //Create a timer
-          Timer newTimer;
+          Timer newTimer{m_settings};
           newTimer.SetType(Timer::READONLY_REPEATING_ONCE);
           newTimer.SetTitle(timer->GetTitle());
           newTimer.SetChannelId(timer->GetChannelId());
@@ -148,7 +148,7 @@ void Timers::GenerateChildManualRepeatingTimers(std::vector<Timer>* timers, Time
 
           genTimerCount++;
 
-          if (genTimerCount >= m_settings.GetNumGenRepeatTimers())
+          if (genTimerCount >= m_settings->GetNumGenRepeatTimers())
             break;
         }
 
@@ -156,7 +156,7 @@ void Timers::GenerateChildManualRepeatingTimers(std::vector<Timer>* timers, Time
         nextEndTime += ONE_DAY;
       }
 
-      if (genTimerCount >= m_settings.GetNumGenRepeatTimers())
+      if (genTimerCount >= m_settings->GetNumGenRepeatTimers())
         break;
     }
   }
@@ -172,7 +172,7 @@ std::string Timers::ConvertToAutoTimerTag(std::string tag)
 
 bool Timers::LoadAutoTimers(std::vector<AutoTimer>& autoTimers) const
 {
-  const std::string url = StringUtils::Format("%s%s", m_settings.GetConnectionURL().c_str(), "autotimer");
+  const std::string url = StringUtils::Format("%s%s", m_settings->GetConnectionURL().c_str(), "autotimer");
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -205,7 +205,7 @@ bool Timers::LoadAutoTimers(std::vector<AutoTimer>& autoTimers) const
 
   for (; pNode != nullptr; pNode = pNode->NextSiblingElement("timer"))
   {
-    AutoTimer newAutoTimer;
+    AutoTimer newAutoTimer{m_settings};
 
     if (!newAutoTimer.UpdateFrom(pNode, m_channels))
       continue;
@@ -315,7 +315,7 @@ void Timers::GetTimerTypes(std::vector<kodi::addon::PVRTimerType>& types) const
   types.emplace_back(*t);
   delete t;
 
-  if (!Settings::GetInstance().SupportsAutoTimers() || !m_settings.GetAutoTimersEnabled())
+  if (!m_settings->SupportsAutoTimers() || !m_settings->GetAutoTimersEnabled())
   {
     // Allow this type of timer to be created from kodi if autotimers are not available
     // as otherwise there is no way to create a repeating EPG timer rule
@@ -480,8 +480,8 @@ PVR_ERROR Timers::AddTimer(const kodi::addon::PVRTimer& timer)
 
   if (startPadding == 0 && endPadding == 0)
   {
-    startPadding = Settings::GetInstance().GetDeviceSettings()->GetGlobalRecordingStartMargin();
-    endPadding = Settings::GetInstance().GetDeviceSettings()->GetGlobalRecordingEndMargin();
+    startPadding = m_settings->GetDeviceSettings()->GetGlobalRecordingStartMargin();
+    endPadding = m_settings->GetDeviceSettings()->GetGlobalRecordingEndMargin();
   }
 
   bool alreadyStarted = false;
@@ -512,7 +512,7 @@ PVR_ERROR Timers::AddTimer(const kodi::addon::PVRTimer& timer)
   unsigned int epgUid = timer.GetEPGUid();
   bool foundEntry = false;
 
-  if (Settings::GetInstance().IsOpenWebIf() && (timer.GetTimerType() == Timer::EPG_ONCE || timer.GetTimerType() == Timer::MANUAL_ONCE))
+  if (m_settings->IsOpenWebIf() && (timer.GetTimerType() == Timer::EPG_ONCE || timer.GetTimerType() == Timer::MANUAL_ONCE))
   {
     // We try to find the EPG Entry and use it's details
     EpgPartialEntry partialEntry = m_epg.LoadEPGEntryPartialDetails(serviceReference, timer.GetStartTime() < now ? now : timer.GetStartTime());
@@ -542,11 +542,11 @@ PVR_ERROR Timers::AddTimer(const kodi::addon::PVRTimer& timer)
     tags.AddTag(TAG_FOR_GENRE_ID, StringUtils::Format("0x%02X", timer.GetGenreType() | timer.GetGenreSubType()));
 
   std::string strTmp;
-  if (!m_settings.GetNewTimerRecordingPath().empty())
+  if (!m_settings->GetNewTimerRecordingPath().empty())
     strTmp = StringUtils::Format("web/timeradd?sRef=%s&repeated=%d&begin=%lld&end=%lld&name=%s&description=%s&eit=%d&tags=%s&dirname=&s",
               WebUtils::URLEncodeInline(serviceReference).c_str(), timer.GetWeekdays(), static_cast<long long>(startTime), static_cast<long long>(endTime),
               WebUtils::URLEncodeInline(title).c_str(), WebUtils::URLEncodeInline(description).c_str(), epgUid,
-              WebUtils::URLEncodeInline(tags.GetTags()).c_str(), WebUtils::URLEncodeInline(m_settings.GetNewTimerRecordingPath()).c_str());
+              WebUtils::URLEncodeInline(tags.GetTags()).c_str(), WebUtils::URLEncodeInline(m_settings->GetNewTimerRecordingPath()).c_str());
   else
     strTmp = StringUtils::Format("web/timeradd?sRef=%s&repeated=%d&begin=%lld&end=%lld&name=%s&description=%s&eit=%d&tags=%s",
               WebUtils::URLEncodeInline(serviceReference).c_str(), timer.GetWeekdays(), static_cast<long long>(startTime), static_cast<long long>(endTime),
@@ -556,7 +556,7 @@ PVR_ERROR Timers::AddTimer(const kodi::addon::PVRTimer& timer)
   Logger::Log(LEVEL_DEBUG, "%s - Command: %s", __func__, strTmp.c_str());
 
   std::string strResult;
-  if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+  if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
     return PVR_ERROR_SERVER_ERROR;
 
   Logger::Log(LEVEL_DEBUG, "%s - Updating timers", __func__);
@@ -673,7 +673,7 @@ PVR_ERROR Timers::AddAutoTimer(const kodi::addon::PVRTimer& timer)
         std::replace(tagValue.begin(), tagValue.end(), ' ', '_');
         strTmp += StringUtils::Format("&tag=%s", WebUtils::URLEncodeInline(StringUtils::Format("%s=%s", TAG_FOR_CHANNEL_REFERENCE.c_str(), tagValue.c_str())).c_str());
 
-        if (!m_settings.UsesLastScannedChannelGroup())
+        if (!m_settings->UsesLastScannedChannelGroup())
           strTmp += BuildAddUpdateAutoTimerLimitGroupsParams(channel);
       }
     }
@@ -688,7 +688,7 @@ PVR_ERROR Timers::AddAutoTimer(const kodi::addon::PVRTimer& timer)
   Logger::Log(LEVEL_DEBUG, "%s - Command: %s", __func__, strTmp.c_str());
 
   std::string strResult;
-  if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+  if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
     return PVR_ERROR_SERVER_ERROR;
 
   if (timer.GetState() == PVR_TIMER_STATE_RECORDING)
@@ -736,8 +736,8 @@ PVR_ERROR Timers::UpdateTimer(const kodi::addon::PVRTimer& timer)
 
     if (startPadding == 0 && endPadding == 0)
     {
-      startPadding = Settings::GetInstance().GetDeviceSettings()->GetGlobalRecordingStartMargin();
-      endPadding = Settings::GetInstance().GetDeviceSettings()->GetGlobalRecordingEndMargin();
+      startPadding = m_settings->GetDeviceSettings()->GetGlobalRecordingStartMargin();
+      endPadding = m_settings->GetDeviceSettings()->GetGlobalRecordingEndMargin();
     }
 
     bool alreadyStarted = false;
@@ -777,7 +777,7 @@ PVR_ERROR Timers::UpdateTimer(const kodi::addon::PVRTimer& timer)
                                     static_cast<long long>(oldTimer.GetRealEndTime()));
 
     std::string strResult;
-    if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+    if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
       return PVR_ERROR_SERVER_ERROR;
 
     TimerUpdates();
@@ -927,14 +927,14 @@ PVR_ERROR Timers::UpdateAutoTimer(const kodi::addon::PVRTimer& timer)
         strTmp += StringUtils::Format("&tag=%s", WebUtils::URLEncodeInline(StringUtils::Format("%s=%s", TAG_FOR_GENRE_ID.c_str(), timerToUpdate.ReadTagValue(TAG_FOR_GENRE_ID).c_str())).c_str());
 
       //Limit Channel Groups
-      if (!m_settings.UsesLastScannedChannelGroup())
+      if (!m_settings->UsesLastScannedChannelGroup())
         strTmp += BuildAddUpdateAutoTimerLimitGroupsParams(channel);
     }
 
     strTmp += Timers::BuildAddUpdateAutoTimerIncludeParams(timer.GetWeekdays());
 
     std::string strResult;
-    if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+    if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
       return PVR_ERROR_SERVER_ERROR;
 
     if (timer.GetState() == PVR_TIMER_STATE_RECORDING)
@@ -951,9 +951,9 @@ std::string Timers::BuildAddUpdateAutoTimerLimitGroupsParams(const std::shared_p
 {
   std::string limitGroupParams;
 
-  if (m_settings.GetLimitAnyChannelAutoTimers() && channel)
+  if (m_settings->GetLimitAnyChannelAutoTimers() && channel)
   {
-    if (m_settings.GetLimitAnyChannelAutoTimersToChannelGroups())
+    if (m_settings->GetLimitAnyChannelAutoTimersToChannelGroups())
     {
       for (const auto& group : channel->GetChannelGroupList())
         limitGroupParams += StringUtils::Format("%s,", group->GetServiceReference().c_str());
@@ -1020,7 +1020,7 @@ PVR_ERROR Timers::DeleteTimer(const kodi::addon::PVRTimer& timer)
                                                    static_cast<long long>(timerToDelete.GetRealEndTime()));
 
     std::string strResult;
-    if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+    if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
       return PVR_ERROR_SERVER_ERROR;
 
     if (timer.GetState() == PVR_TIMER_STATE_RECORDING)
@@ -1057,7 +1057,7 @@ PVR_ERROR Timers::DeleteAutoTimer(const kodi::addon::PVRTimer &timer)
                                                        static_cast<long long>(childTimer.GetRealEndTime()));
 
         std::string strResult;
-        WebUtils::SendSimpleCommand(strTmp, strResult, true);
+        WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult, true);
 
         if (childTimer.GetState() == PVR_TIMER_STATE_RECORDING)
           childTimerIsRecording = true;
@@ -1067,7 +1067,7 @@ PVR_ERROR Timers::DeleteAutoTimer(const kodi::addon::PVRTimer &timer)
     const std::string strTmp = StringUtils::Format("autotimer/remove?id=%u", timerToDelete.GetBackendId());
 
     std::string strResult;
-    if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+    if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
       return PVR_ERROR_SERVER_ERROR;
 
     if (timer.GetState() == PVR_TIMER_STATE_RECORDING || childTimerIsRecording)
@@ -1098,7 +1098,7 @@ bool Timers::TimerUpdates()
   bool regularTimersChanged = TimerUpdatesRegular();
   bool autoTimersChanged = false;
 
-  if (Settings::GetInstance().SupportsAutoTimers() && m_settings.GetAutoTimersEnabled())
+  if (m_settings->SupportsAutoTimers() && m_settings->GetAutoTimersEnabled())
     autoTimersChanged = TimerUpdatesAuto();
 
   if (regularTimersChanged || autoTimersChanged)
@@ -1310,6 +1310,6 @@ void Timers::RunAutoTimerListCleanup()
 {
   const std::string strTmp = StringUtils::Format("web/timercleanup?cleanup=true");
   std::string strResult;
-  if (!WebUtils::SendSimpleCommand(strTmp, strResult))
+  if (!WebUtils::SendSimpleCommand(strTmp, m_settings->GetConnectionURL(), strResult))
     Logger::Log(LEVEL_ERROR, "%s - AutomaticTimerlistCleanup failed!", __func__);
 }
diff --git a/src/enigma2/Timers.h b/src/enigma2/Timers.h
index ebb33f8..7231cc8 100644
--- a/src/enigma2/Timers.h
+++ b/src/enigma2/Timers.h
@@ -28,8 +28,8 @@ namespace enigma2
   class ATTR_DLL_LOCAL Timers
   {
   public:
-    Timers(IConnectionListener& connectionListener, Channels& channels, ChannelGroups& channelGroups, std::vector<std::string>& locations, Epg& epg, enigma2::extract::EpgEntryExtractor& entryExtractor)
-      : m_connectionListener(connectionListener), m_channels(channels), m_channelGroups(channelGroups), m_locations(locations), m_epg(epg), m_entryExtractor(entryExtractor)
+    Timers(IConnectionListener& connectionListener, std::shared_ptr<InstanceSettings>& settings, Channels& channels, ChannelGroups& channelGroups, std::vector<std::string>& locations, Epg& epg, enigma2::extract::EpgEntryExtractor& entryExtractor)
+      : m_connectionListener(connectionListener), m_settings(settings), m_channels(channels), m_channelGroups(channelGroups), m_locations(locations), m_epg(epg), m_entryExtractor(entryExtractor)
     {
       m_clientIndexCounter = 1;
     };
@@ -82,7 +82,6 @@ namespace enigma2
 
     enigma2::extract::EpgEntryExtractor& m_entryExtractor;
 
-    enigma2::Settings& m_settings = enigma2::Settings::GetInstance();
     std::vector<enigma2::data::Timer> m_timers;
     std::vector<enigma2::data::AutoTimer> m_autotimers;
 
@@ -91,5 +90,7 @@ namespace enigma2
     ChannelGroups& m_channelGroups;
     std::vector<std::string>& m_locations;
     Epg& m_epg;
+
+    std::shared_ptr<enigma2::InstanceSettings> m_settings;
   };
 } // namespace enigma2
diff --git a/src/enigma2/TimeshiftBuffer.cpp b/src/enigma2/TimeshiftBuffer.cpp
index 2f55ac4..af080d5 100644
--- a/src/enigma2/TimeshiftBuffer.cpp
+++ b/src/enigma2/TimeshiftBuffer.cpp
@@ -7,20 +7,20 @@
 
 #include "TimeshiftBuffer.h"
 
-#include "Settings.h"
+#include "InstanceSettings.h"
 #include "StreamReader.h"
 #include "utilities/Logger.h"
 
 using namespace enigma2;
 using namespace enigma2::utilities;
 
-TimeshiftBuffer::TimeshiftBuffer(IStreamReader* streamReader) : m_streamReader(streamReader)
+TimeshiftBuffer::TimeshiftBuffer(IStreamReader* streamReader, std::shared_ptr<InstanceSettings>& settings) : m_streamReader(streamReader)
 {
-  m_bufferPath = Settings::GetInstance().GetTimeshiftBufferPath() + "/tsbuffer.ts";
-  unsigned int readTimeout = Settings::GetInstance().GetReadTimeoutSecs();
+  m_bufferPath = settings->GetTimeshiftBufferPath() + "/tsbuffer.ts";
+  unsigned int readTimeout = settings->GetReadTimeoutSecs();
   m_readTimeout = (readTimeout) ? readTimeout : DEFAULT_READ_TIMEOUT;
-  if (Settings::GetInstance().EnableTimeshiftDiskLimit())
-    m_timeshiftBufferByteLimit = Settings::GetInstance().GetTimeshiftDiskLimitBytes();
+  if (settings->EnableTimeshiftDiskLimit())
+    m_timeshiftBufferByteLimit = settings->GetTimeshiftDiskLimitBytes();
 
   m_filebufferWriteHandle.OpenFileForWrite(m_bufferPath, true);
   std::this_thread::sleep_for(std::chrono::milliseconds(100));
diff --git a/src/enigma2/TimeshiftBuffer.h b/src/enigma2/TimeshiftBuffer.h
index 4bffae7..4f2958b 100644
--- a/src/enigma2/TimeshiftBuffer.h
+++ b/src/enigma2/TimeshiftBuffer.h
@@ -8,6 +8,7 @@
 #pragma once
 
 #include "IStreamReader.h"
+#include "InstanceSettings.h"
 
 #include <atomic>
 #include <condition_variable>
@@ -21,7 +22,7 @@ namespace enigma2
   class ATTR_DLL_LOCAL TimeshiftBuffer : public IStreamReader
   {
   public:
-    TimeshiftBuffer(IStreamReader* strReader);
+    TimeshiftBuffer(IStreamReader* strReader, std::shared_ptr<enigma2::InstanceSettings>& settings);
     ~TimeshiftBuffer();
 
     bool Start() override;
diff --git a/src/enigma2/data/AutoTimer.cpp b/src/enigma2/data/AutoTimer.cpp
index ae35c01..5b485f1 100644
--- a/src/enigma2/data/AutoTimer.cpp
+++ b/src/enigma2/data/AutoTimer.cpp
@@ -181,7 +181,7 @@ bool AutoTimer::UpdateFrom(TiXmlElement* autoTimerNode, Channels& channels)
       //If we only have one channel
       if (xml::GetString(serviceNode, "e2servicereference", strTmp))
       {
-        m_channelId = channels.GetChannelUniqueId(Channel::NormaliseServiceReference(strTmp.c_str()));
+        m_channelId = channels.GetChannelUniqueId(Channel::NormaliseServiceReference(strTmp.c_str(), m_settings->UseStandardServiceReference()));
 
         // For autotimers for channels we don't know about, such as when the addon only uses one bouquet or an old channel referene that doesn't exist
         // we'll default to any channel (as that is what kodi PVR does) and leave in ERROR state
diff --git a/src/enigma2/data/AutoTimer.h b/src/enigma2/data/AutoTimer.h
index 39f25ad..da161e6 100644
--- a/src/enigma2/data/AutoTimer.h
+++ b/src/enigma2/data/AutoTimer.h
@@ -57,7 +57,7 @@ namespace enigma2
         CHECK_TITLE_AND_ALL_DESCS = 3
       };
 
-      AutoTimer() = default;
+      AutoTimer(std::shared_ptr<enigma2::InstanceSettings> settings) : Timer(settings) {}
 
       const std::string& GetSearchPhrase() const { return m_searchPhrase; }
       void SetSearchPhrase(const std::string& value) { m_searchPhrase = value; }
diff --git a/src/enigma2/data/BaseEntry.cpp b/src/enigma2/data/BaseEntry.cpp
index b9b0c38..895b552 100644
--- a/src/enigma2/data/BaseEntry.cpp
+++ b/src/enigma2/data/BaseEntry.cpp
@@ -20,8 +20,8 @@ void BaseEntry::ProcessPrependMode(PrependOutline prependOutlineMode)
     m_plot = m_plotOutline;
     m_plotOutline.clear();
   }
-  else if ((Settings::GetInstance().GetPrependOutline() == prependOutlineMode ||
-            Settings::GetInstance().GetPrependOutline() == PrependOutline::ALWAYS) &&
+  else if ((m_settings->GetPrependOutline() == prependOutlineMode ||
+            m_settings->GetPrependOutline() == PrependOutline::ALWAYS) &&
            !m_plotOutline.empty() && m_plotOutline != "N/A")
   {
     m_plot.insert(0, m_plotOutline + "\n");
diff --git a/src/enigma2/data/BaseEntry.h b/src/enigma2/data/BaseEntry.h
index 55e0921..a68007d 100644
--- a/src/enigma2/data/BaseEntry.h
+++ b/src/enigma2/data/BaseEntry.h
@@ -7,7 +7,7 @@
 
 #pragma once
 
-#include "../Settings.h"
+#include "../InstanceSettings.h"
 
 #include <string>
 
@@ -79,6 +79,8 @@ namespace enigma2
       bool m_live = false;
       bool m_premiere = false;
       bool m_finale = false;
+
+      std::shared_ptr<enigma2::InstanceSettings> m_settings;
     };
   } //namespace data
 } //namespace enigma2
diff --git a/src/enigma2/data/Channel.cpp b/src/enigma2/data/Channel.cpp
index f2edaf4..5611c27 100644
--- a/src/enigma2/data/Channel.cpp
+++ b/src/enigma2/data/Channel.cpp
@@ -7,7 +7,7 @@
 
 #include "Channel.h"
 
-#include "../Settings.h"
+#include "../InstanceSettings.h"
 #include "../utilities/WebUtils.h"
 #include "../utilities/XMLUtils.h"
 #include "ChannelGroup.h"
@@ -82,8 +82,7 @@ bool Channel::UpdateFrom(TiXmlElement* channelNode)
 
   const std::string iptvStreamURL = ExtractIptvStreamURL();
 
-  Settings& settings = Settings::GetInstance();
-  if (settings.UseStandardServiceReference())
+  if (m_settings->UseStandardServiceReference())
     m_serviceReference = m_standardServiceReference;
 
   std::sscanf(m_serviceReference.c_str(), "%*X:%*X:%*X:%X:%*s", &m_streamProgramNumber);
@@ -95,16 +94,16 @@ bool Channel::UpdateFrom(TiXmlElement* channelNode)
     Logger::Log(LEVEL_DEBUG, "%s: Loaded Channel: %s, sRef=%s, IPTV Stream URL: %s", __func__, m_channelName.c_str(), m_serviceReference.c_str(), iptvStreamURL.c_str());
   }
 
-  m_m3uURL = StringUtils::Format("%sweb/stream.m3u?ref=%s", Settings::GetInstance().GetConnectionURL().c_str(), WebUtils::URLEncodeInline(m_serviceReference).c_str());
+  m_m3uURL = StringUtils::Format("%sweb/stream.m3u?ref=%s", m_settings->GetConnectionURL().c_str(), WebUtils::URLEncodeInline(m_serviceReference).c_str());
 
   if (!m_isIptvStream)
   {
     m_streamURL = StringUtils::Format(
       "http%s://%s%s:%d/%s",
-      settings.UseSecureConnectionStream() ? "s" : "",
-      settings.UseLoginStream() ? StringUtils::Format("%s:%s@", settings.GetUsername().c_str(), settings.GetPassword().c_str()).c_str() : "",
-      settings.GetHostname().c_str(),
-      settings.GetStreamPortNum(),
+      m_settings->UseSecureConnectionStream() ? "s" : "",
+      m_settings->UseLoginStream() ? StringUtils::Format("%s:%s@", m_settings->GetUsername().c_str(), m_settings->GetPassword().c_str()).c_str() : "",
+      m_settings->GetHostname().c_str(),
+      m_settings->GetStreamPortNum(),
       commonServiceReference.c_str()
     );
   }
@@ -116,9 +115,9 @@ bool Channel::UpdateFrom(TiXmlElement* channelNode)
   return true;
 }
 
-std::string Channel::NormaliseServiceReference(const std::string& serviceReference)
+std::string Channel::NormaliseServiceReference(const std::string& serviceReference, bool useStandardServiceReference)
 {
-  if (Settings::GetInstance().UseStandardServiceReference())
+  if (useStandardServiceReference)
     return CreateStandardServiceReference(serviceReference);
   else
     return serviceReference;
@@ -174,17 +173,17 @@ std::string Channel::CreateIconPath(const std::string& commonServiceReference)
 {
   std::string iconPath = commonServiceReference;
 
-  if (Settings::GetInstance().UsePiconsEuFormat())
+  if (m_settings->UsePiconsEuFormat())
   {
     iconPath = m_genericServiceReference;
   }
 
   std::replace(iconPath.begin(), iconPath.end(), ':', '_');
 
-  if (Settings::GetInstance().UseOnlinePicons())
-    iconPath = StringUtils::Format("%spicon/%s.png", Settings::GetInstance().GetConnectionURL().c_str(), iconPath.c_str());
+  if (m_settings->UseOnlinePicons())
+    iconPath = StringUtils::Format("%spicon/%s.png", m_settings->GetConnectionURL().c_str(), iconPath.c_str());
   else
-    iconPath = Settings::GetInstance().GetIconPath().c_str() + iconPath + ".png";
+    iconPath = m_settings->GetIconPath().c_str() + iconPath + ".png";
 
   return iconPath;
 }
diff --git a/src/enigma2/data/Channel.h b/src/enigma2/data/Channel.h
index 8c12d2f..91e5dac 100644
--- a/src/enigma2/data/Channel.h
+++ b/src/enigma2/data/Channel.h
@@ -18,6 +18,8 @@
 
 namespace enigma2
 {
+  class InstanceSettings;
+
   namespace data
   {
     class ChannelGroup;
@@ -30,7 +32,7 @@ namespace enigma2
       // There are at least two different service types for radio, see EN300468 Table 87
       const std::array<std::string, 3> RADIO_SERVICE_TYPES = {"2", "A", "a"};
 
-      Channel() = default;
+      Channel(std::shared_ptr<enigma2::InstanceSettings> settings) : m_settings(settings) {}
       Channel(const Channel &c) : m_radio(c.IsRadio()), m_uniqueId(c.GetUniqueId()),
         m_channelName(c.GetChannelName()), m_serviceReference(c.GetServiceReference()),
         m_channelNumber(c.GetChannelNumber()), m_standardServiceReference(c.GetStandardServiceReference()),
@@ -38,7 +40,7 @@ namespace enigma2
         m_streamURL(c.GetStreamURL()), m_m3uURL(c.GetM3uURL()), m_iconPath(c.GetIconPath()),
         m_providerName(c.GetProviderName()), m_providerUniqueId(c.GetProviderUniqueId()),
         m_fuzzyChannelName(c.GetFuzzyChannelName()), m_streamProgramNumber(c.GetStreamProgramNumber()),
-        m_usingDefaultChannelNumber(c.UsingDefaultChannelNumber()), m_isIptvStream(c.IsIptvStream()) {};
+        m_usingDefaultChannelNumber(c.UsingDefaultChannelNumber()), m_isIptvStream(c.IsIptvStream()), m_settings(c.m_settings) {};
       ~Channel() = default;
 
       bool IsRadio() const { return m_radio; }
@@ -101,7 +103,7 @@ namespace enigma2
       bool operator==(const Channel& right) const;
       bool operator!=(const Channel& right) const;
 
-      static std::string NormaliseServiceReference(const std::string& serviceReference);
+      static std::string NormaliseServiceReference(const std::string& serviceReference, bool useStandardServiceReference);
       static std::string CreateStandardServiceReference(const std::string& serviceReference);
 
     private:
@@ -130,6 +132,8 @@ namespace enigma2
       int m_streamProgramNumber;
 
       std::vector<std::shared_ptr<enigma2::data::ChannelGroup>> m_channelGroupList;
+
+      std::shared_ptr<enigma2::InstanceSettings> m_settings;
     };
   } //namespace data
 } //namespace enigma2
diff --git a/src/enigma2/data/ChannelGroup.cpp b/src/enigma2/data/ChannelGroup.cpp
index 3835e57..7dbfd80 100644
--- a/src/enigma2/data/ChannelGroup.cpp
+++ b/src/enigma2/data/ChannelGroup.cpp
@@ -71,10 +71,10 @@ bool ChannelGroup::UpdateFrom(TiXmlElement* groupNode, bool radio)
   m_groupName = groupName;
   m_radio = radio;
 
-  if (!radio && (Settings::GetInstance().GetTVChannelGroupMode() == ChannelGroupMode::SOME_GROUPS ||
-                 Settings::GetInstance().GetTVChannelGroupMode() == ChannelGroupMode::CUSTOM_GROUPS))
+  if (!radio && (m_settings->GetTVChannelGroupMode() == ChannelGroupMode::SOME_GROUPS ||
+                 m_settings->GetTVChannelGroupMode() == ChannelGroupMode::CUSTOM_GROUPS))
   {
-    auto& customGroupNamelist = Settings::GetInstance().GetCustomTVChannelGroupNameList();
+    auto& customGroupNamelist = m_settings->GetCustomTVChannelGroupNameList();
     auto it = std::find_if(customGroupNamelist.begin(), customGroupNamelist.end(),
       [&groupName](std::string& customGroupName) { return customGroupName == groupName; });
 
@@ -83,10 +83,10 @@ bool ChannelGroup::UpdateFrom(TiXmlElement* groupNode, bool radio)
     else
       Logger::Log(LEVEL_DEBUG, "%s Custom TV groups are set, current e2servicename '%s' matched", __func__, groupName.c_str());
   }
-  else if (radio && (Settings::GetInstance().GetRadioChannelGroupMode() == ChannelGroupMode::SOME_GROUPS ||
-                     Settings::GetInstance().GetRadioChannelGroupMode() == ChannelGroupMode::CUSTOM_GROUPS))
+  else if (radio && (m_settings->GetRadioChannelGroupMode() == ChannelGroupMode::SOME_GROUPS ||
+                     m_settings->GetRadioChannelGroupMode() == ChannelGroupMode::CUSTOM_GROUPS))
   {
-    auto& customGroupNamelist = Settings::GetInstance().GetCustomRadioChannelGroupNameList();
+    auto& customGroupNamelist = m_settings->GetCustomRadioChannelGroupNameList();
     auto it = std::find_if(customGroupNamelist.begin(), customGroupNamelist.end(),
       [&groupName](std::string& customGroupName) { return customGroupName == groupName; });
 
diff --git a/src/enigma2/data/ChannelGroup.h b/src/enigma2/data/ChannelGroup.h
index e0f7ed3..f8eaf6b 100644
--- a/src/enigma2/data/ChannelGroup.h
+++ b/src/enigma2/data/ChannelGroup.h
@@ -20,12 +20,14 @@
 
 namespace enigma2
 {
+  class InstanceSettings;
+
   namespace data
   {
     class ATTR_DLL_LOCAL ChannelGroup
     {
     public:
-      ChannelGroup() = default;
+      ChannelGroup(std::shared_ptr<enigma2::InstanceSettings> settings) : m_settings(settings) {}
       ChannelGroup(ChannelGroup &c) : m_radio(c.IsRadio()), m_uniqueId(c.GetUniqueId()),
         m_groupName(c.GetGroupName()), m_serviceReference(c.GetServiceReference()), m_lastScannedGroup(c.IsLastScannedGroup()),
         m_startChannelNumber(c.GetStartChannelNumber()), m_emptyGroup(c.IsEmptyGroup()) {};
@@ -77,6 +79,8 @@ namespace enigma2
       int m_startChannelNumber = -1;
 
       std::vector<enigma2::data::ChannelGroupMember> m_channelGroupMembers;
+
+      std::shared_ptr<enigma2::InstanceSettings> m_settings;
     };
   } //namespace data
 } //namespace enigma2
diff --git a/src/enigma2/data/EpgEntry.cpp b/src/enigma2/data/EpgEntry.cpp
index 9a6d615..78c4869 100644
--- a/src/enigma2/data/EpgEntry.cpp
+++ b/src/enigma2/data/EpgEntry.cpp
@@ -63,9 +63,9 @@ bool EpgEntry::UpdateFrom(TiXmlElement* eventNode, std::map<std::string, std::sh
   if (m_serviceReference.compare(0, 5, "1:64:") == 0)
     return false;
 
-  m_serviceReference = Channel::NormaliseServiceReference(m_serviceReference);
+  m_serviceReference = Channel::NormaliseServiceReference(m_serviceReference, m_settings->UseStandardServiceReference());
 
-  std::shared_ptr<data::Channel> channel = std::make_shared<data::Channel>();
+  std::shared_ptr<data::Channel> channel = std::make_shared<data::Channel>(m_settings);
 
   auto channelSearch = channelsMap.find(m_serviceReference);
   if (channelSearch != channelsMap.end())
diff --git a/src/enigma2/data/EpgEntry.h b/src/enigma2/data/EpgEntry.h
index 7b46e34..4b3831b 100644
--- a/src/enigma2/data/EpgEntry.h
+++ b/src/enigma2/data/EpgEntry.h
@@ -23,6 +23,11 @@ namespace enigma2
     class ATTR_DLL_LOCAL EpgEntry : public BaseEntry
     {
     public:
+      EpgEntry(std::shared_ptr<enigma2::InstanceSettings> settings)
+      {
+        m_settings = settings;
+      };
+
       unsigned int GetEpgId() const { return m_epgId; }
       void SetEpgId(int value) { m_epgId = value; }
 
diff --git a/src/enigma2/data/RecordingEntry.cpp b/src/enigma2/data/RecordingEntry.cpp
index dcdba7b..6fce6e2 100644
--- a/src/enigma2/data/RecordingEntry.cpp
+++ b/src/enigma2/data/RecordingEntry.cpp
@@ -124,11 +124,11 @@ bool RecordingEntry::UpdateFrom(TiXmlElement* recordingNode, const std::string&
 
     m_edlURL = strTmp;
 
-    strTmp = StringUtils::Format("%sfile?file=%s", Settings::GetInstance().GetConnectionURL().c_str(), WebUtils::URLEncodeInline(strTmp).c_str());
+    strTmp = StringUtils::Format("%sfile?file=%s", m_settings->GetConnectionURL().c_str(), WebUtils::URLEncodeInline(strTmp).c_str());
     m_streamURL = strTmp;
 
     m_edlURL = m_edlURL.substr(0, m_edlURL.find_last_of('.')) + ".edl";
-    m_edlURL = StringUtils::Format("%sfile?file=%s", Settings::GetInstance().GetConnectionURL().c_str(), WebUtils::URLEncodeInline(m_edlURL).c_str());
+    m_edlURL = StringUtils::Format("%sfile?file=%s", m_settings->GetConnectionURL().c_str(), WebUtils::URLEncodeInline(m_edlURL).c_str());
   }
 
   double filesizeInBytes;
@@ -232,19 +232,19 @@ void RecordingEntry::UpdateTo(kodi::addon::PVRRecording& left, Channels& channel
 
   std::string newDirectory = m_directory;
 
-  if (Settings::GetInstance().GetKeepRecordingsFolders())
+  if (m_settings->GetKeepRecordingsFolders())
   {
-    if (Settings::GetInstance().GetRecordingsFoldersOmitLocation() && StringUtils::StartsWith(m_directory, m_location))
+    if (m_settings->GetRecordingsFoldersOmitLocation() && StringUtils::StartsWith(m_directory, m_location))
       newDirectory = m_directory.substr(m_location.size());
   }
 
-  if (Settings::GetInstance().GetVirtualRecordingsFolders())
+  if (m_settings->GetVirtualRecordingsFolders())
   {
-    if (Settings::GetInstance().GetKeepRecordingsFolders())
+    if (m_settings->GetKeepRecordingsFolders())
     {
       if (InLocationRoot() && isInVirtualRecordingFolder)
       {
-        if (Settings::GetInstance().GetRecordingsFoldersOmitLocation())
+        if (m_settings->GetRecordingsFoldersOmitLocation())
           newDirectory = StringUtils::Format("/%s/", m_title.c_str());
         else
           newDirectory = StringUtils::Format("/%s/%s/", m_directory.c_str(), m_title.c_str());
@@ -346,7 +346,7 @@ std::shared_ptr<Channel> RecordingEntry::GetChannelFromChannelReferenceTag(Chann
 
   if (ContainsTag(TAG_FOR_CHANNEL_REFERENCE))
   {
-    channelServiceReference = Channel::NormaliseServiceReference(ReadTagValue(TAG_FOR_CHANNEL_REFERENCE, true));
+    channelServiceReference = Channel::NormaliseServiceReference(ReadTagValue(TAG_FOR_CHANNEL_REFERENCE, true), m_settings->UseStandardServiceReference());
 
     std::sscanf(channelServiceReference.c_str(), "%*X:%*X:%*X:%X:%*s", &m_streamProgramNumber);
     m_hasStreamProgramNumber = true;
diff --git a/src/enigma2/data/RecordingEntry.h b/src/enigma2/data/RecordingEntry.h
index 680204f..737098a 100644
--- a/src/enigma2/data/RecordingEntry.h
+++ b/src/enigma2/data/RecordingEntry.h
@@ -29,6 +29,11 @@ namespace enigma2
     class ATTR_DLL_LOCAL RecordingEntry : public BaseEntry, public Tags
     {
     public:
+      RecordingEntry(std::shared_ptr<enigma2::InstanceSettings> settings)
+      {
+        m_settings = settings;
+      };
+
       const std::string& GetRecordingId() const { return m_recordingId; }
       void SetRecordingId(const std::string& value) { m_recordingId = value; }
 
diff --git a/src/enigma2/data/Timer.cpp b/src/enigma2/data/Timer.cpp
index 7a8b549..94664f5 100644
--- a/src/enigma2/data/Timer.cpp
+++ b/src/enigma2/data/Timer.cpp
@@ -184,7 +184,7 @@ bool Timer::UpdateFrom(TiXmlElement* timerNode, Channels& channels)
   if (xml::GetString(timerNode, "e2servicereference", strTmp))
   {
     m_serviceReference = strTmp;
-    m_channelId = channels.GetChannelUniqueId(Channel::NormaliseServiceReference(strTmp.c_str()));
+    m_channelId = channels.GetChannelUniqueId(Channel::NormaliseServiceReference(strTmp.c_str(), m_settings->UseStandardServiceReference()));
   }
 
   // Skip timers for channels we don't know about, such as when the addon only uses one bouquet or an old channel referene that doesn't exist
@@ -223,7 +223,7 @@ bool Timer::UpdateFrom(TiXmlElement* timerNode, Channels& channels)
     m_plot = m_plotOutline;
     m_plotOutline.clear();
   }
-  else if (Settings::GetInstance().GetPrependOutline() == PrependOutline::ALWAYS &&
+  else if (m_settings->GetPrependOutline() == PrependOutline::ALWAYS &&
            m_plot != m_plotOutline && !m_plotOutline.empty() && m_plotOutline != "N/A")
   {
     m_plot.insert(0, m_plotOutline + "\n");
@@ -324,8 +324,8 @@ bool Timer::UpdateFrom(TiXmlElement* timerNode, Channels& channels)
         {
           //We need to add this as these timers are created by the backend so won't have a padding to read
           m_tags.append(StringUtils::Format(" Padding=%u,%u",
-            Settings::GetInstance().GetDeviceSettings()->GetGlobalRecordingStartMargin(),
-            Settings::GetInstance().GetDeviceSettings()->GetGlobalRecordingEndMargin()));
+            m_settings->GetDeviceSettings()->GetGlobalRecordingStartMargin(),
+            m_settings->GetDeviceSettings()->GetGlobalRecordingEndMargin()));
         }
       }
       else
diff --git a/src/enigma2/data/Timer.h b/src/enigma2/data/Timer.h
index c1789a4..b9758d9 100644
--- a/src/enigma2/data/Timer.h
+++ b/src/enigma2/data/Timer.h
@@ -44,7 +44,7 @@ namespace enigma2
         EPG_AUTO_ONCE           = PVR_TIMER_TYPE_NONE + 7,
       };
 
-      Timer()
+      Timer(std::shared_ptr<enigma2::InstanceSettings> settings) : EpgEntry(settings)
       {
         m_updateState = enigma2::utilities::UPDATE_STATE_NEW;
         m_parentClientIndex = PVR_TIMER_NO_PARENT;
diff --git a/src/enigma2/extract/EpgEntryExtractor.cpp b/src/enigma2/extract/EpgEntryExtractor.cpp
index 78be5d4..f3d8b20 100644
--- a/src/enigma2/extract/EpgEntryExtractor.cpp
+++ b/src/enigma2/extract/EpgEntryExtractor.cpp
@@ -17,18 +17,18 @@ using namespace enigma2::data;
 using namespace enigma2::extract;
 using namespace enigma2::utilities;
 
-EpgEntryExtractor::EpgEntryExtractor()
-  : IExtractor()
+EpgEntryExtractor::EpgEntryExtractor(const std::shared_ptr<enigma2::InstanceSettings>& settings)
+  : IExtractor(settings)
 {
   FileUtils::CopyDirectory(FileUtils::GetResourceDataPath() + GENRE_DIR, GENRE_ADDON_DATA_BASE_DIR, true);
   FileUtils::CopyDirectory(FileUtils::GetResourceDataPath() + SHOW_INFO_DIR, SHOW_INFO_ADDON_DATA_BASE_DIR, true);
 
-  if (Settings::GetInstance().GetMapGenreIds())
-    m_extractors.emplace_back(new GenreIdMapper());
-  if (Settings::GetInstance().GetMapRytecTextGenres())
-    m_extractors.emplace_back(new GenreRytecTextMapper());
-  if (Settings::GetInstance().GetExtractShowInfo())
-    m_extractors.emplace_back(new ShowInfoExtractor());
+  if (m_settings->GetMapGenreIds())
+    m_extractors.emplace_back(new GenreIdMapper(m_settings));
+  if (m_settings->GetMapRytecTextGenres())
+    m_extractors.emplace_back(new GenreRytecTextMapper(m_settings));
+  if (m_settings->GetExtractShowInfo())
+    m_extractors.emplace_back(new ShowInfoExtractor(m_settings));
 
   m_anyExtractorEnabled = false;
   for (auto& extractor : m_extractors)
diff --git a/src/enigma2/extract/EpgEntryExtractor.h b/src/enigma2/extract/EpgEntryExtractor.h
index da3f4c3..dedd3c0 100644
--- a/src/enigma2/extract/EpgEntryExtractor.h
+++ b/src/enigma2/extract/EpgEntryExtractor.h
@@ -25,7 +25,7 @@ namespace enigma2
     class ATTR_DLL_LOCAL EpgEntryExtractor : public IExtractor
     {
     public:
-      EpgEntryExtractor();
+      EpgEntryExtractor(const std::shared_ptr<enigma2::InstanceSettings>& settings);
       ~EpgEntryExtractor();
 
       void ExtractFromEntry(enigma2::data::BaseEntry& entry);
diff --git a/src/enigma2/extract/GenreIdMapper.cpp b/src/enigma2/extract/GenreIdMapper.cpp
index e508ccc..49798a8 100644
--- a/src/enigma2/extract/GenreIdMapper.cpp
+++ b/src/enigma2/extract/GenreIdMapper.cpp
@@ -17,7 +17,7 @@ using namespace enigma2::data;
 using namespace enigma2::extract;
 using namespace enigma2::utilities;
 
-GenreIdMapper::GenreIdMapper() : IExtractor()
+GenreIdMapper::GenreIdMapper(const std::shared_ptr<enigma2::InstanceSettings>& settings) : IExtractor(settings)
 {
   LoadGenreIdMapFile();
 }
@@ -42,7 +42,7 @@ void GenreIdMapper::ExtractFromEntry(BaseEntry& entry)
 
 bool GenreIdMapper::IsEnabled()
 {
-  return Settings::GetInstance().GetMapGenreIds();
+  return m_settings->GetMapGenreIds();
 }
 
 int GenreIdMapper::GetGenreTypeFromCombined(int combinedGenreType)
@@ -70,8 +70,8 @@ int GenreIdMapper::LookupGenreIdInMap(const int combinedGenreType)
 
 void GenreIdMapper::LoadGenreIdMapFile()
 {
-  if (!LoadIdToIdGenreFile(Settings::GetInstance().GetMapGenreIdsFile(), m_genreIdToDvbIdMap))
-    Logger::Log(LEVEL_ERROR, "%s Could not load genre id to dvb id file: %s", __func__, Settings::GetInstance().GetMapGenreIdsFile().c_str());
+  if (!LoadIdToIdGenreFile(m_settings->GetMapGenreIdsFile(), m_genreIdToDvbIdMap))
+    Logger::Log(LEVEL_ERROR, "%s Could not load genre id to dvb id file: %s", __func__, m_settings->GetMapGenreIdsFile().c_str());
 }
 
 bool GenreIdMapper::LoadIdToIdGenreFile(const std::string& xmlFile, std::map<int, int>& map)
diff --git a/src/enigma2/extract/GenreIdMapper.h b/src/enigma2/extract/GenreIdMapper.h
index 1af2141..b84a1b5 100644
--- a/src/enigma2/extract/GenreIdMapper.h
+++ b/src/enigma2/extract/GenreIdMapper.h
@@ -19,7 +19,7 @@ namespace enigma2
     class ATTR_DLL_LOCAL GenreIdMapper : public IExtractor
     {
     public:
-      GenreIdMapper();
+      GenreIdMapper(const std::shared_ptr<enigma2::InstanceSettings>& settings);
       ~GenreIdMapper();
 
       void ExtractFromEntry(enigma2::data::BaseEntry& entry);
diff --git a/src/enigma2/extract/GenreRytecTextMapper.cpp b/src/enigma2/extract/GenreRytecTextMapper.cpp
index 3365567..1273f1d 100644
--- a/src/enigma2/extract/GenreRytecTextMapper.cpp
+++ b/src/enigma2/extract/GenreRytecTextMapper.cpp
@@ -17,7 +17,7 @@ using namespace enigma2::data;
 using namespace enigma2::extract;
 using namespace enigma2::utilities;
 
-GenreRytecTextMapper::GenreRytecTextMapper() : IExtractor()
+GenreRytecTextMapper::GenreRytecTextMapper(const std::shared_ptr<enigma2::InstanceSettings>& settings) : IExtractor(settings)
 {
   LoadGenreTextMappingFiles();
 
@@ -44,7 +44,7 @@ void GenreRytecTextMapper::ExtractFromEntry(BaseEntry& entry)
 
       if (combinedGenreType == EPG_EVENT_CONTENTMASK_UNDEFINED)
       {
-        if (m_settings.GetLogMissingGenreMappings())
+        if (m_settings->GetLogMissingGenreMappings())
           Logger::Log(LEVEL_INFO, "%s: Could not lookup genre using genre description string instead:'%s'", __func__, genreText.c_str());
 
         entry.SetGenreType(EPG_GENRE_USE_STRING);
@@ -61,7 +61,7 @@ void GenreRytecTextMapper::ExtractFromEntry(BaseEntry& entry)
 
 bool GenreRytecTextMapper::IsEnabled()
 {
-  return Settings::GetInstance().GetMapRytecTextGenres();
+  return m_settings->GetMapRytecTextGenres();
 }
 
 int GenreRytecTextMapper::GetGenreTypeFromCombined(int combinedGenreType)
@@ -80,7 +80,7 @@ int GenreRytecTextMapper::GetGenreTypeFromText(const std::string& genreText, con
 
   if (genreType == EPG_EVENT_CONTENTMASK_UNDEFINED)
   {
-    if (m_settings.GetLogMissingGenreMappings())
+    if (m_settings->GetLogMissingGenreMappings())
       Logger::Log(LEVEL_INFO, "%s: Tried to find genre text but no value: '%s', show - '%s'", __func__, genreText.c_str(), showName.c_str());
 
     std::string genreMajorText = GetMatchTextFromString(genreText, m_genreMajorPattern);
@@ -89,7 +89,7 @@ int GenreRytecTextMapper::GetGenreTypeFromText(const std::string& genreText, con
     {
       genreType = LookupGenreValueInMaps(genreMajorText);
 
-      if (genreType == EPG_EVENT_CONTENTMASK_UNDEFINED && m_settings.GetLogMissingGenreMappings())
+      if (genreType == EPG_EVENT_CONTENTMASK_UNDEFINED && m_settings->GetLogMissingGenreMappings())
         Logger::Log(LEVEL_INFO, "%s: Tried to find major genre text but no value: '%s', show - '%s'", __func__, genreMajorText.c_str(), showName.c_str());
     }
   }
@@ -123,8 +123,8 @@ void GenreRytecTextMapper::LoadGenreTextMappingFiles()
   if (!LoadTextToIdGenreFile(GENRE_KODI_DVB_FILEPATH, m_kodiGenreTextToDvbIdMap))
     Logger::Log(LEVEL_ERROR, "%s Could not load text to genre id file: %s", __func__, GENRE_KODI_DVB_FILEPATH.c_str());
 
-  if (!LoadTextToIdGenreFile(Settings::GetInstance().GetMapRytecTextGenresFile(), m_genreMap))
-    Logger::Log(LEVEL_ERROR, "%s Could not load genre id to dvb id file: %s", __func__, Settings::GetInstance().GetMapRytecTextGenresFile().c_str());
+  if (!LoadTextToIdGenreFile(m_settings->GetMapRytecTextGenresFile(), m_genreMap))
+    Logger::Log(LEVEL_ERROR, "%s Could not load genre id to dvb id file: %s", __func__, m_settings->GetMapRytecTextGenresFile().c_str());
 }
 
 bool GenreRytecTextMapper::LoadTextToIdGenreFile(const std::string& xmlFile, std::map<std::string, int>& map)
diff --git a/src/enigma2/extract/GenreRytecTextMapper.h b/src/enigma2/extract/GenreRytecTextMapper.h
index ffe808c..ce8e3ae 100644
--- a/src/enigma2/extract/GenreRytecTextMapper.h
+++ b/src/enigma2/extract/GenreRytecTextMapper.h
@@ -26,7 +26,7 @@ namespace enigma2
     class ATTR_DLL_LOCAL GenreRytecTextMapper : public IExtractor
     {
     public:
-      GenreRytecTextMapper();
+      GenreRytecTextMapper(const std::shared_ptr<enigma2::InstanceSettings>& settings);
       ~GenreRytecTextMapper();
 
       void ExtractFromEntry(enigma2::data::BaseEntry& entry);
diff --git a/src/enigma2/extract/IExtractor.h b/src/enigma2/extract/IExtractor.h
index 6a6facf..a7a2ff3 100644
--- a/src/enigma2/extract/IExtractor.h
+++ b/src/enigma2/extract/IExtractor.h
@@ -7,7 +7,7 @@
 
 #pragma once
 
-#include "../Settings.h"
+#include "../InstanceSettings.h"
 #include "../data/BaseEntry.h"
 
 #include <regex>
@@ -19,7 +19,7 @@ namespace enigma2
     class ATTR_DLL_LOCAL IExtractor
     {
     public:
-      IExtractor() = default;
+      IExtractor(const std::shared_ptr<enigma2::InstanceSettings>& settings) : m_settings(settings) {};
       virtual ~IExtractor() = default;
       virtual void ExtractFromEntry(enigma2::data::BaseEntry& entry) = 0;
       virtual bool IsEnabled() = 0;
@@ -70,7 +70,7 @@ namespace enigma2
         return matches;
       };
 
-      enigma2::Settings& m_settings = Settings::GetInstance();
+      std::shared_ptr<enigma2::InstanceSettings> m_settings;
     };
   } //namespace extract
 } //namespace enigma2
diff --git a/src/enigma2/extract/ShowInfoExtractor.cpp b/src/enigma2/extract/ShowInfoExtractor.cpp
index d521d79..1ca93dd 100644
--- a/src/enigma2/extract/ShowInfoExtractor.cpp
+++ b/src/enigma2/extract/ShowInfoExtractor.cpp
@@ -20,10 +20,10 @@ using namespace enigma2::extract;
 using namespace enigma2::utilities;
 using namespace kodi::tools;
 
-ShowInfoExtractor::ShowInfoExtractor() : IExtractor()
+ShowInfoExtractor::ShowInfoExtractor(const std::shared_ptr<enigma2::InstanceSettings>& settings) : IExtractor(settings)
 {
-  if (!LoadShowInfoPatternsFile(Settings::GetInstance().GetExtractShowInfoFile(), m_episodeSeasonPatterns, m_yearPatterns, m_titleTextPatterns, m_descriptionTextPatterns))
-    Logger::Log(LEVEL_ERROR, "%s Could not load show info patterns file: %s", __func__, Settings::GetInstance().GetExtractShowInfoFile().c_str());
+  if (!LoadShowInfoPatternsFile(m_settings->GetExtractShowInfoFile(), m_episodeSeasonPatterns, m_yearPatterns, m_titleTextPatterns, m_descriptionTextPatterns))
+    Logger::Log(LEVEL_ERROR, "%s Could not load show info patterns file: %s", __func__, m_settings->GetExtractShowInfoFile().c_str());
 }
 
 ShowInfoExtractor::~ShowInfoExtractor() {}
@@ -116,7 +116,7 @@ void ShowInfoExtractor::ExtractFromEntry(BaseEntry& entry)
 
 bool ShowInfoExtractor::IsEnabled()
 {
-  return Settings::GetInstance().GetExtractShowInfo();
+  return m_settings->GetExtractShowInfo();
 }
 
 bool ShowInfoExtractor::LoadShowInfoPatternsFile(const std::string& xmlFile, std::vector<EpisodeSeasonPattern>& episodeSeasonPatterns, std::vector<std::regex>& yearPatterns, std::vector<std::pair<TextPropertyType, std::regex>>& titleTextPatterns, std::vector<std::pair<TextPropertyType, std::regex>>& descTextPatterns)
diff --git a/src/enigma2/extract/ShowInfoExtractor.h b/src/enigma2/extract/ShowInfoExtractor.h
index 2bed927..2b7d764 100644
--- a/src/enigma2/extract/ShowInfoExtractor.h
+++ b/src/enigma2/extract/ShowInfoExtractor.h
@@ -53,7 +53,7 @@ namespace enigma2
     class ATTR_DLL_LOCAL ShowInfoExtractor : public IExtractor
     {
     public:
-      ShowInfoExtractor();
+      ShowInfoExtractor(const std::shared_ptr<enigma2::InstanceSettings>& settings);
       ~ShowInfoExtractor();
 
       void ExtractFromEntry(enigma2::data::BaseEntry& entry);
diff --git a/src/enigma2/utilities/CurlFile.cpp b/src/enigma2/utilities/CurlFile.cpp
index 71a0e93..4256d69 100644
--- a/src/enigma2/utilities/CurlFile.cpp
+++ b/src/enigma2/utilities/CurlFile.cpp
@@ -7,7 +7,7 @@
 
 #include "CurlFile.h"
 
-#include "../Settings.h"
+#include "../InstanceSettings.h"
 #include "Logger.h"
 #include "WebUtils.h"
 
@@ -57,7 +57,7 @@ bool CurlFile::Post(const std::string& strURL, std::string& strResult)
   return false;
 }
 
-bool CurlFile::Check(const std::string& strURL)
+bool CurlFile::Check(const std::string& strURL, int connectionTimeoutSecs)
 {
   kodi::vfs::CFile fileHandle;
   if (!fileHandle.CURLCreate(strURL))
@@ -67,7 +67,7 @@ bool CurlFile::Check(const std::string& strURL)
   }
 
   fileHandle.CURLAddOption(ADDON_CURL_OPTION_PROTOCOL, "connection-timeout",
-                      std::to_string(Settings::GetInstance().GetConnectioncCheckTimeoutSecs()));
+                      std::to_string(connectionTimeoutSecs));
 
   if (!fileHandle.CURLOpen(ADDON_READ_NO_CACHE))
   {
diff --git a/src/enigma2/utilities/CurlFile.h b/src/enigma2/utilities/CurlFile.h
index 070d347..2739324 100644
--- a/src/enigma2/utilities/CurlFile.h
+++ b/src/enigma2/utilities/CurlFile.h
@@ -21,7 +21,7 @@ namespace enigma2
 
       bool Get(const std::string& strURL, std::string& strResult);
       bool Post(const std::string& strURL, std::string& strResult);
-      bool Check(const std::string& strURL);
+      bool Check(const std::string& strURL, int connectionTimeoutSecs);
     };
   } // namespace utilities
 } // namespace enigma2
diff --git a/src/enigma2/utilities/SettingsMigration.cpp b/src/enigma2/utilities/SettingsMigration.cpp
new file mode 100644
index 0000000..3d953b4
--- /dev/null
+++ b/src/enigma2/utilities/SettingsMigration.cpp
@@ -0,0 +1,206 @@
+/*
+ *  Copyright (C) 2005-2022 Team Kodi (https://kodi.tv)
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ *  See LICENSE.md for more information.
+ */
+
+#include "SettingsMigration.h"
+
+#include "kodi/General.h"
+
+#include <algorithm>
+#include <utility>
+#include <vector>
+
+using namespace enigma2;
+using namespace enigma2::utilities;
+
+namespace
+{
+// <setting name, default value> maps
+const std::vector<std::pair<const char*, const char*>> stringMap = {{"host", "127.0.0.1"},
+                                                                    {"user", ""},
+                                                                    {"pass", ""},
+                                                                    {"iconpath", ""},
+                                                                    {"defaultprovidername", ""},
+                                                                    {"providermapfile", "special://userdata/addon_data/pvr.vuplus/providers/providerMappings.xml"},
+                                                                    {"onetvgroup", ""},
+                                                                    {"twotvgroup", ""},
+                                                                    {"threetvgroup", ""},
+                                                                    {"fourtvgroup", ""},
+                                                                    {"fivetvgroup", ""},
+                                                                    {"customtvgroupsfile", "special://userdata/addon_data/pvr.vuplus/channelGroups/customTVGroups-example.xml"},
+                                                                    {"oneradiogroup", ""},
+                                                                    {"tworadiogroup", ""},
+                                                                    {"threeradiogroup", ""},
+                                                                    {"fourradiogroup", ""},
+                                                                    {"fiveradiogroup", ""},
+                                                                    {"customradiogroupsfile", "special://userdata/addon_data/pvr.vuplus/channelGroups/customRadioGroups-example.xml"},
+                                                                    {"extractshowinfofile", "special://userdata/addon_data/pvr.vuplus/showInfo/English-ShowInfo.xml"},
+                                                                    {"genreidmapfile", "special://userdata/addon_data/pvr.vuplus/genres/genreIdMappings/Sky-UK.xml"},
+                                                                    {"rytecgenretextmapfile", "special://userdata/addon_data/pvr.vuplus/genres/genreRytecTextMappings/Rytec-UK-Ireland.xml"},
+                                                                    {"recordingpath", ""},
+                                                                    {"timeshiftbufferpath", "special://userdata/addon_data/pvr.vuplus"},
+                                                                    {"wakeonlanmac", ""}};
+
+const std::vector<std::pair<const char*, int>> intMap = {{"webport", 80},
+                                                         {"streamport", 8001},
+                                                         {"connectionchecktimeout", 10},
+                                                         {"connectioncheckinterval", 1},
+                                                         {"updateint", 2},
+                                                         {"updatemode", 0},
+                                                         {"channelandgroupupdatemode", 2},
+                                                         {"channelandgroupupdatehour", 4},
+                                                         {"tvgroupmode", 0},
+                                                         {"numtvgroups", 1},
+                                                         {"tvfavouritesmode", 0},
+                                                         {"radiogroupmode", 0},
+                                                         {"numradiogroups", 1},
+                                                         {"radiofavouritesmode", 0},
+                                                         {"epgdelayperchannel", 0},
+                                                         {"sharerecordinglastplayed", 0},
+                                                         {"edlpaddingstart", 0},
+                                                         {"edlpaddingstop", 0},
+                                                         {"numgenrepeattimers", 1},
+                                                         {"enabletimeshift", 0},
+                                                         {"powerstatemode", 0},
+                                                         {"globalstartpaddingstb", 0},
+                                                         {"globalendpaddingstb", 0},
+                                                         {"prependoutline", 0},
+                                                         {"readtimeout", 0},
+                                                         {"streamreadchunksize", 0}};
+
+const std::vector<std::pair<const char*, float>> floatMap = {{"timeshiftdisklimit", 4.0}};
+
+const std::vector<std::pair<const char*, bool>> boolMap = {{"use_secure", false},
+                                                           {"autoconfig", false},
+                                                           {"use_secure_stream", false},
+                                                           {"use_login_stream", false},
+                                                           {"setprogramid", false},
+                                                           {"onlinepicons", true},
+                                                           {"useopenwebifpiconpath", false},
+                                                           {"usepiconseuformat", false},
+                                                           {"zap", false},
+                                                           {"usegroupspecificnumbers", false},
+                                                           {"usestandardserviceref", true},
+                                                           {"retrieveprovidername", true},
+                                                           {"excludelastscannedtv", true},
+                                                           {"excludelastscannedradio", true},
+                                                           {"extractshowinfoenabled", true},
+                                                           {"genreidmapenabled", true},
+                                                           {"rytecgenretextmapenabled", false},
+                                                           {"logmissinggenremapping", true},
+                                                           {"storeextrarecordinginfo", true},
+                                                           {"virtualfolders", true},
+                                                           {"keepfolders", true},
+                                                           {"keepfoldersomitlocation", true},
+                                                           {"recordingsrecursive", true},
+                                                           {"onlycurrent", false},
+                                                           {"enablerecordingedls", false},
+                                                           {"enablegenrepeattimers", true},
+                                                           {"timerlistcleanup", false},
+                                                           {"enableautotimers", true},
+                                                           {"limitanychannelautotimers", true},
+                                                           {"limitanychannelautotimerstogroups", true},
+                                                           {"enabletimeshiftdisklimit", false},
+                                                           {"timeshiftEnabledIptv", true},
+                                                           {"useFFmpegReconnect", true},
+                                                           {"useMpegtsForUnknownStreams", true}};
+
+} // unnamed namespace
+
+bool SettingsMigration::MigrateSettings(kodi::addon::IAddonInstance& target)
+{
+  std::string stringValue;
+  bool boolValue{false};
+  int intValue{0};
+
+  if (target.CheckInstanceSettingString("kodi_addon_instance_name", stringValue) &&
+      !stringValue.empty())
+  {
+    // Instance already has valid instance settings
+    return false;
+  }
+
+  // Read pre-multi-instance settings from settings.xml, transfer to instance settings
+  SettingsMigration mig(target);
+
+  for (const auto& setting : stringMap)
+    mig.MigrateStringSetting(setting.first, setting.second);
+
+  for (const auto& setting : intMap)
+    mig.MigrateIntSetting(setting.first, setting.second);
+
+  for (const auto& setting : floatMap)
+    mig.MigrateFloatSetting(setting.first, setting.second);
+
+  for (const auto& setting : boolMap)
+    mig.MigrateBoolSetting(setting.first, setting.second);
+
+  if (mig.Changed())
+  {
+    // Set a title for the new instance settings
+    std::string title;
+    target.CheckInstanceSettingString("host", title);
+    if (title.empty())
+      title = "Migrated Add-on Config";
+
+    target.SetInstanceSettingString("kodi_addon_instance_name", title);
+
+    return true;
+  }
+  return false;
+}
+
+bool SettingsMigration::IsMigrationSetting(const std::string& key)
+{
+  return std::any_of(stringMap.cbegin(), stringMap.cend(),
+                     [&key](const auto& entry) { return entry.first == key; }) ||
+         std::any_of(intMap.cbegin(), intMap.cend(),
+                     [&key](const auto& entry) { return entry.first == key; }) ||
+         std::any_of(floatMap.cbegin(), floatMap.cend(),
+                     [&key](const auto& entry) { return entry.first == key; }) ||
+         std::any_of(boolMap.cbegin(), boolMap.cend(),
+                     [&key](const auto& entry) { return entry.first == key; });
+}
+
+void SettingsMigration::MigrateStringSetting(const char* key, const std::string& defaultValue)
+{
+  std::string value;
+  if (kodi::addon::CheckSettingString(key, value) && value != defaultValue)
+  {
+    m_target.SetInstanceSettingString(key, value);
+    m_changed = true;
+  }
+}
+
+void SettingsMigration::MigrateIntSetting(const char* key, int defaultValue)
+{
+  int value;
+  if (kodi::addon::CheckSettingInt(key, value) && value != defaultValue)
+  {
+    m_target.SetInstanceSettingInt(key, value);
+    m_changed = true;
+  }
+}
+
+void SettingsMigration::MigrateFloatSetting(const char* key, float defaultValue)
+{
+  float value;
+  if (kodi::addon::CheckSettingFloat(key, value) && value != defaultValue)
+  {
+    m_target.SetInstanceSettingFloat(key, value);
+    m_changed = true;
+  }
+}
+
+void SettingsMigration::MigrateBoolSetting(const char* key, bool defaultValue)
+{
+  bool value;
+  if (kodi::addon::CheckSettingBoolean(key, value) && value != defaultValue)
+  {
+    m_target.SetInstanceSettingBoolean(key, value);
+    m_changed = true;
+  }
+}
\ No newline at end of file
diff --git a/src/enigma2/utilities/SettingsMigration.h b/src/enigma2/utilities/SettingsMigration.h
new file mode 100644
index 0000000..aaf719c
--- /dev/null
+++ b/src/enigma2/utilities/SettingsMigration.h
@@ -0,0 +1,46 @@
+/*
+ *  Copyright (C) 2005-2022 Team Kodi (https://kodi.tv)
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ *  See LICENSE.md for more information.
+ */
+
+#pragma once
+
+#include <string>
+
+namespace kodi
+{
+namespace addon
+{
+class IAddonInstance;
+}
+} // namespace kodi
+
+namespace enigma2
+{
+namespace utilities
+{
+class SettingsMigration
+{
+public:
+  static bool MigrateSettings(kodi::addon::IAddonInstance& target);
+  static bool IsMigrationSetting(const std::string& key);
+
+private:
+  SettingsMigration() = delete;
+  explicit SettingsMigration(kodi::addon::IAddonInstance& target) : m_target(target) {}
+
+  void MigrateStringSetting(const char* key, const std::string& defaultValue);
+  void MigrateIntSetting(const char* key, int defaultValue);
+  void MigrateFloatSetting(const char* key, float defaultValue);
+  void MigrateBoolSetting(const char* key, bool defaultValue);
+
+  bool Changed() const { return m_changed; }
+
+  kodi::addon::IAddonInstance& m_target;
+  bool m_changed{false};
+};
+
+} // namespace utilities
+} // namespace enigma2
diff --git a/src/enigma2/utilities/StreamUtils.cpp b/src/enigma2/utilities/StreamUtils.cpp
index d154ee1..6baacc3 100644
--- a/src/enigma2/utilities/StreamUtils.cpp
+++ b/src/enigma2/utilities/StreamUtils.cpp
@@ -7,7 +7,7 @@
 
 #include "StreamUtils.h"
 
-#include "../Settings.h"
+#include "../InstanceSettings.h"
 #include "FileUtils.h"
 #include "Logger.h"
 #include "WebUtils.h"
@@ -64,7 +64,7 @@ const StreamType StreamUtils::GetStreamType(const std::string& url)
   return StreamType::OTHER_TYPE;
 }
 
-const StreamType StreamUtils::InspectStreamType(const std::string& url)
+const StreamType StreamUtils::InspectStreamType(const std::string& url, bool useMpegtsForUnknownStreams)
 {
   if (!FileUtils::FileExists(url))
     return StreamType::OTHER_TYPE;
@@ -85,7 +85,7 @@ const StreamType StreamUtils::InspectStreamType(const std::string& url)
   }
 
   // There is no other way to select this stream type other than this setting
-  if (Settings::GetInstance().UseMpegtsForUnknownStreams())
+  if (useMpegtsForUnknownStreams)
     return StreamType::TS;
 
   return StreamType::OTHER_TYPE;
@@ -130,7 +130,7 @@ std::string StreamUtils::GetURLWithFFmpegReconnectOptions(const std::string& str
 {
   std::string newStreamUrl = streamUrl;
 
-  if (WebUtils::IsHttpUrl(streamUrl) && Settings::GetInstance().UseFFmpegReconnect())
+  if (WebUtils::IsHttpUrl(streamUrl))
   {
     newStreamUrl = AddHeaderToStreamUrl(newStreamUrl, "reconnect", "1");
     if (streamType != StreamType::HLS)
diff --git a/src/enigma2/utilities/StreamUtils.h b/src/enigma2/utilities/StreamUtils.h
index 0a8141f..5fb37d7 100644
--- a/src/enigma2/utilities/StreamUtils.h
+++ b/src/enigma2/utilities/StreamUtils.h
@@ -32,7 +32,7 @@ namespace enigma2
     {
     public:
       static const StreamType GetStreamType(const std::string& url);
-      static const StreamType InspectStreamType(const std::string& url);
+      static const StreamType InspectStreamType(const std::string& url, bool useMpegtsForUnknownStreams);
       static std::string GetURLWithFFmpegReconnectOptions(const std::string& streamUrl, const StreamType& streamType);
       static bool CheckInputstreamInstalledAndEnabled(const std::string& inputstreamName);
       static void SetFFmpegDirectManifestTypeStreamProperty(std::vector<kodi::addon::PVRStreamProperty>& properties, const std::string& streamURL, const StreamType& streamType);
diff --git a/src/enigma2/utilities/WebUtils.cpp b/src/enigma2/utilities/WebUtils.cpp
index 6612734..f4c0d1b 100644
--- a/src/enigma2/utilities/WebUtils.cpp
+++ b/src/enigma2/utilities/WebUtils.cpp
@@ -7,7 +7,7 @@
 
 #include "WebUtils.h"
 
-#include "../Settings.h"
+#include "../InstanceSettings.h"
 #include "CurlFile.h"
 #include "Logger.h"
 #include "XMLUtils.h"
@@ -87,12 +87,12 @@ std::string WebUtils::RedactUrl(const std::string& url)
   return redactedUrl;
 }
 
-bool WebUtils::CheckHttp(const std::string& url)
+bool WebUtils::CheckHttp(const std::string& url, int connectionTimeoutSecs)
 {
   Logger::Log(LEVEL_TRACE, "%s Check webAPI with URL: '%s'", __func__, RedactUrl(url).c_str());
 
   CurlFile http;
-  if (!http.Check(url))
+  if (!http.Check(url, connectionTimeoutSecs))
   {
     Logger::Log(LEVEL_DEBUG, "%s - Could not open webAPI.", __func__);
     return false;
@@ -156,9 +156,9 @@ std::string WebUtils::PostHttpJson(const std::string& url)
   return strTmp;
 }
 
-bool WebUtils::SendSimpleCommand(const std::string& strCommandURL, std::string& strResultText, bool bIgnoreResult)
+bool WebUtils::SendSimpleCommand(const std::string& strCommandURL, const std::string& connectionURL, std::string& strResultText, bool bIgnoreResult)
 {
-  const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), strCommandURL.c_str());
+  const std::string url = StringUtils::Format("%s%s", connectionURL.c_str(), strCommandURL.c_str());
 
   const std::string strXML = WebUtils::GetHttpXML(url);
 
@@ -207,9 +207,9 @@ bool WebUtils::SendSimpleCommand(const std::string& strCommandURL, std::string&
   return true;
 }
 
-bool WebUtils::SendSimpleJsonCommand(const std::string& strCommandURL, std::string& strResultText, bool bIgnoreResult)
+bool WebUtils::SendSimpleJsonCommand(const std::string& strCommandURL, const std::string& connectionURL,std::string& strResultText, bool bIgnoreResult)
 {
-  const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), strCommandURL.c_str());
+  const std::string url = StringUtils::Format("%s%s", connectionURL.c_str(), strCommandURL.c_str());
 
   const std::string strJson = WebUtils::GetHttp(url);
 
@@ -230,9 +230,9 @@ bool WebUtils::SendSimpleJsonCommand(const std::string& strCommandURL, std::stri
   return true;
 }
 
-bool WebUtils::SendSimpleJsonPostCommand(const std::string& strCommandURL, std::string& strResultText, bool bIgnoreResult)
+bool WebUtils::SendSimpleJsonPostCommand(const std::string& strCommandURL, const std::string& connectionURL,std::string& strResultText, bool bIgnoreResult)
 {
-  const std::string url = StringUtils::Format("%s%s", Settings::GetInstance().GetConnectionURL().c_str(), strCommandURL.c_str());
+  const std::string url = StringUtils::Format("%s%s", connectionURL.c_str(), strCommandURL.c_str());
 
   const std::string strJson = WebUtils::PostHttpJson(url);
 
diff --git a/src/enigma2/utilities/WebUtils.h b/src/enigma2/utilities/WebUtils.h
index 53d5e31..d9abbde 100644
--- a/src/enigma2/utilities/WebUtils.h
+++ b/src/enigma2/utilities/WebUtils.h
@@ -20,13 +20,13 @@ namespace enigma2
     {
     public:
       static std::string URLEncodeInline(const std::string& sStr);
-      static bool CheckHttp(const std::string& url);
+      static bool CheckHttp(const std::string& url, int connectionTimeoutSecs);
       static std::string GetHttp(const std::string& url);
       static std::string GetHttpXML(const std::string& url);
       static std::string PostHttpJson(const std::string& url);
-      static bool SendSimpleCommand(const std::string& strCommandURL, std::string& strResultText, bool bIgnoreResult = false);
-      static bool SendSimpleJsonCommand(const std::string& strCommandURL, std::string& strResultText, bool bIgnoreResult = false);
-      static bool SendSimpleJsonPostCommand(const std::string& strCommandURL, std::string& strResultText, bool bIgnoreResult = false);
+      static bool SendSimpleCommand(const std::string& strCommandURL, const std::string& connectionURL, std::string& strResultText, bool bIgnoreResult = false);
+      static bool SendSimpleJsonCommand(const std::string& strCommandURL, const std::string& connectionURL, std::string& strResultText, bool bIgnoreResult = false);
+      static bool SendSimpleJsonPostCommand(const std::string& strCommandURL, const std::string& connectionURL, std::string& strResultText, bool bIgnoreResult = false);
       static std::string& Escape(std::string& s, const std::string from, const std::string to);
       static const std::string UrlEncode(const std::string& value);
       static std::string ReadFileContentsStartOnly(const std::string& url, int* httpCode);

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/debug/.build-id/d4/4afa736dc5a064de9ce6792fa75388b8b89895.debug
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/kodi/addons/pvr.vuplus/pvr.vuplus.so.20.5.1
-rw-r--r--  root/root   /usr/share/kodi/addons/pvr.vuplus/resources/instance-settings.xml
-rw-r--r--  root/root   /usr/share/kodi/addons/pvr.vuplus/resources/language/resource.language.ast_es/strings.po
lrwxrwxrwx  root/root   /usr/lib/x86_64-linux-gnu/kodi/addons/pvr.vuplus/pvr.vuplus.so.20.2 -> pvr.vuplus.so.20.5.1

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/debug/.build-id/9e/0fb29ee32a5388ee2f5b7e5692ed20253aeaee.debug
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/kodi/addons/pvr.vuplus/pvr.vuplus.so.20.4.1
lrwxrwxrwx  root/root   /usr/lib/x86_64-linux-gnu/kodi/addons/pvr.vuplus/pvr.vuplus.so.20.2 -> pvr.vuplus.so.20.4.1

No differences were encountered between the control files of package kodi-pvr-vuplus

Control files of package kodi-pvr-vuplus-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 9e0fb29ee32a5388ee2f5b7e5692ed20253aeaee d44afa736dc5a064de9ce6792fa75388b8b89895

More details

Full run details