diff --git a/cfg_checker/modules/packages/checker.py b/cfg_checker/modules/packages/checker.py
index bf192f9..83ecc94 100644
--- a/cfg_checker/modules/packages/checker.py
+++ b/cfg_checker/modules/packages/checker.py
@@ -188,9 +188,6 @@
         _total_processed = 0
         # Collect packages from all of the nodes in flat dict
         _all_packages = {}
-        _all_tags = set([])
-        # get env tag's year and major version
-        _tag_major = _mcp[:_mcp.find('.', _mcp.find('.')+1)]
         for node_name, node_value in salt_master.nodes.iteritems():
             _uniq_len = len(_all_packages.keys())
             _progress_index += 1
@@ -205,66 +202,54 @@
             )
             for _name, _value in node_value['packages'].iteritems():
                 _total_processed += 1
-                # Parse versions
+                # Parse versions from nodes
                 _ver_ins = DebianVersion(_value['installed'])
                 _ver_can = DebianVersion(_value['candidate'])
 
-                # All packages list with version and node list
+                # Process package description and release version
+                # at a first sight
                 if _name not in _all_packages:
-                    # get repo versions list,
+                    # get node attributes
                     _linux = salt_master.nodes[node_name]['linux_codename']
                     _arch = salt_master.nodes[node_name]['linux_arch']
-                    if _name == u'qemu-block-extra':
-                        a = 1
-                    # omit tag as target versions might be of different tag
+                    # get versions for this tag and repo headers
+                    # excluding 'nightly' repos
                     _r = self.rm.get_filtered_versions(
                         _name,
                         tag=_mcp,
                         include=[_os, _linux, _arch],
                         exclude=["nightly"]
                     )
-                    # save versions for matching major tags
+                    # repack versions in flat format
                     _vs = {}
                     _sections = {}
                     _apps = {}
-                    # get all versions for this year
                     for s, apps in _r.iteritems():
                         for a, versions in apps.iteritems():
                             for v, repos in versions.iteritems():
                                 for repo in repos:
-                                    t = repo['tag']
-                                    _major = t[:t.find('.', t.find('.')+1)]
-                                    if _tag_major == _major:
-                                        if v not in _vs:
-                                            _vs[v] = []
-                                        _vs[v].append(repo)
-                                        if v not in _sections:
-                                            _sections[v] = []
-                                        _sections[v].append(s)
-                                        if v not in _apps:
-                                            _apps[v] = []
-                                        _apps[v].append(a)
-
-                    # check if we have candidate version among found
+                                    if v not in _vs:
+                                        _vs[v] = []
+                                    _vs[v].append(repo)
+                                    if v not in _sections:
+                                        _sections[v] = []
+                                    _sections[v].append(s)
+                                    if v not in _apps:
+                                        _apps[v] = []
+                                    _apps[v].append(a)
+                    # search for the newest version among filtered
                     _r_desc = []
                     _vs_keys = _vs.keys()
                     if _vs_keys:
                         _newest = _newest = DebianVersion(_vs_keys.pop())
                     else:
                         _newest = DebianVersion('')
-                    # if _ver_ins.version in _vs_keys:
-                    #     # exact match, save it
-                    #     _release = _ver_ins
-                    # else:
-                    # detect newest version among saved
-
                     for v in _vs_keys:
                         _this = DebianVersion(v)
                         if _this > _newest:
                             _newest = _this
-                    # newest version for the YEAR.MAJOR will be the release
                     _release = _newest
-                    # save repos list for this version
+                    # Get best description for the package
                     if _release.version != 'n/a':
                         _r_desc = _vs[_release.version]
                     # preload special description
@@ -272,6 +257,7 @@
                         _pkg_desc = _desc[_name]
                     else:
                         _pkg_desc = _desc.dummy_desc
+                    # Save repos list and desc for this version
                     # Check if we can provide better from the package
                     if _release.version != 'n/a':
                         if not _pkg_desc['section']:
@@ -281,49 +267,7 @@
                             _pkg_desc['app'] = \
                                 "/".join(_apps[_release.version])
 
-                    # get specific set for this OS release if present
-                    # if not, try search in all repos for this tag
-                    # _r_desc = _r[_newest.version]
-                    # if _r:
-                    #     _vs = _r.keys()
-                    #     if len(_vs) > 1:
-                    #         # search best match
-                    #         _release = None
-                    #         for _v in _vs:
-                    #             _deb = DebianVersion(_v)
-                    #             if _ver_can == _deb:
-                    #                 _release = _deb
-                    #                 _r_desc = _r[_v]
-                    #                 break
-                    #         if not _release:
-                    #             _progress.clearline()
-                    #             logger_cli.error(
-                    #                 "# ERROR: No release version found "
-                    #                 "for '{}'".format(_name)
-                    #             )
-                    #             _release = DebianVersion('')
-                    #     else:
-                    #         _release = DebianVersion(_vs[0])
-                    #         _r_desc = _r[_vs[0]]
-                    # else:
-                    #     # not found... 99% that it will not happen
-                    #     _release = DebianVersion('')
-
-                    # Old versions match routine
-                    # ########
-                    # if _os in _vers:
-                    #     _v = _vers[_os]
-                    # elif 'any' in _vers:
-                    #     _v = _vers['any']
-                    # else:
-                    #     _v = {}
-
-                    # Finally, get specific version
-                    # _release = DebianVersion(_v[_mcp] if _mcp in _v else '')
-                    for repo in _r_desc:
-                        _all_tags.add(repo['tag'])
-
-                    # Populate package info
+                    # Populate package info, once for package
                     _m = _r_desc[0]["maintainer"] if _r_desc else 'n/a'
                     _all_packages[_name] = {
                         "desc": _pkg_desc,
@@ -331,18 +275,18 @@
                         "maintainer": _m,
                         "is_mirantis": self.rm.is_mirantis(
                             _name,
-                            tag=_tag_major
+                            tag=_mcp
                         ),
                         "results": {},
                         "r": _release,
                     }
-
+                # Cross-compare versions
                 _cmp = VersionCmpResult(
                     _ver_ins,
                     _ver_can,
                     _all_packages[_name]['r']
                 )
-
+                # Update results structure
                 # shortcut to results
                 _res = _all_packages[_name]['results']
                 # update status
