diff --git a/cfg_checker/modules/packages/repos.py b/cfg_checker/modules/packages/repos.py
index 1a040ff..6853a8f 100644
--- a/cfg_checker/modules/packages/repos.py
+++ b/cfg_checker/modules/packages/repos.py
@@ -12,6 +12,8 @@
 from cfg_checker.common.const import _repos_info_archive
 from cfg_checker.common.const import _repos_versions_archive
 from cfg_checker.common.const import ubuntu_releases
+from cfg_checker.common.const import kaas_ubuntu_active
+from cfg_checker.common.const import mcp_active_tags as active_tags
 from cfg_checker.common.file_utils import ensure_folder_exists
 from cfg_checker.common.file_utils import get_gzipped_file
 from cfg_checker.common.settings import pkg_dir
@@ -218,14 +220,27 @@
                 _tags.remove('hotfix')
             if "update" in _tags:
                 _tags.remove('update')
+            # Filter out not active tags
+            logger_cli.info("Active tags for mcp: {}".format(
+                ", ".join(active_tags)
+            ))
+            logger_cli.info("Active kaas ubuntu repos: {}".format(
+                ", ".join(kaas_ubuntu_active)
+            ))
+            _active_tags = [t for t in _tags if t in active_tags]
+
             # search tags in subfolders
             _h_tags, _ = self._ls_repo_page(base_url + 'hotfix')
             _u_tags, _ = self._ls_repo_page(base_url + 'update')
-            _tags.extend([t for t in _h_tags if t not in _tags])
-            _tags.extend([t for t in _u_tags if t not in _tags])
-            _progress = Progress(len(_tags))
+            _active_tags.extend(
+                [t for t in _h_tags if t not in _tags and t in active_tags]
+            )
+            _active_tags.extend(
+                [t for t in _u_tags if t not in _tags and t in active_tags]
+            )
+            _progress = Progress(len(_active_tags))
             _index = 0
-            for _tag in _tags:
+            for _tag in _active_tags:
                 _repos.update(self._find_tag(_tag, base_url))
                 _repos.update(self._find_tag(_tag, base_url, label="hotfix"))
                 _repos.update(self._find_tag(_tag, base_url, label="update"))
@@ -237,7 +252,7 @@
         for _label in _repos.keys():
             logger_cli.info("-> processing tag '{}'".format(_label))
             _name = _label + ".json"
-            if _repotgz.has_file(_name):
+            if _repotgz.has_file(_name) and not tag:
                 logger_cli.info(
                     "-> skipping, '{}' already has '{}'".format(
                         _repos_info_archive,
@@ -271,7 +286,7 @@
                 )
 
                 # Searching Package collections
-                if _stag in ubuntu_releases or _stag.startswith("ubuntu-2020"):
+                if _stag in ubuntu_releases or _stag in kaas_ubuntu_active:
                     # if stag is the release, this is all packages
                     _repo["all"][_stag] = []
                     _repo["all"]["url"] = _n_url(_u)
@@ -572,7 +587,7 @@
         _other_repos = 0
         for _c, _d in _info.items():
             for _ur, _l in _d.items():
-                if _ur in ubuntu_releases or _ur.startswith("ubuntu-2020"):
+                if _ur in ubuntu_releases or _ur in kaas_ubuntu_active:
                     _ubuntu_package_repos += len(_l)
                 elif _ur != 'url':
                     _other_repos += len(_l)
