diff --git a/cfg_checker/modules/packages/repos.py b/cfg_checker/modules/packages/repos.py
index e7c4c6a..334cbb5 100644
--- a/cfg_checker/modules/packages/repos.py
+++ b/cfg_checker/modules/packages/repos.py
@@ -821,8 +821,6 @@
             # <10symbols> \t <md5> \t sorted headers with no tag
             # ...
             # section
-            _o = ""
-
             _ss = _p.keys()
             _ss.sort()
             for _s in _ss:
@@ -830,9 +828,8 @@
                 _apps.sort()
                 # app
                 for _a in _apps:
-                    logger_cli.info(
-                        "\n# Package: {}/{}/{}".format(_s, _a, name)
-                    )
+                    _o = ""
+                    _mm = []
                     # get and sort tags
                     _vs = _p[_s][_a].keys()
                     _vs.sort()
@@ -847,18 +844,26 @@
                             _rr = _p[_s][_a][_v][_md5].keys()
                             _rr.sort()
                             for _r in _rr:
-                                _o += " "*24 + _r.replace('_', ' ')
-                                _o += " ({})\n".format(
-                                    _p[_s][_a][_v][_md5][_r]["maintainer"]
-                                )
+                                _o += " "*24 + _r.replace('_', ' ') + '\n'
+                                _m = _p[_s][_a][_v][_md5][_r]["maintainer"]
+                                if _m not in _mm:
+                                    _mm.append(_m)
 
-            logger_cli.info(_o)
+                    logger_cli.info(
+                        "\n# Package: {}/{}/{}\nMaintainers: {}".format(
+                            _s,
+                            _a,
+                            name,
+                            ", ".join(_mm)
+                        )
+                    )
+
+                    logger_cli.info(_o)
 
     @staticmethod
     def get_apps(versions, name):
         _all = True if name == '*' else False
-        _s_max = 0
-        _a_max = 0
+        _s_max = _a_max = _p_max = _v_max = 0
         _rows = []
         for _p in versions.keys():
             _vs = versions[_p]
@@ -867,13 +872,30 @@
                     if _all or name == _info['app']:
                         _s_max = max(len(_info['section']), _s_max)
                         _a_max = max(len(_info['app']), _a_max)
+                        _p_max = max(len(_p), _p_max)
+                        _v_max = max(len(_v), _v_max)
                         _rows.append([
                             _info['section'],
                             _info['app'],
-                            _p
+                            _p,
+                            _v,
+                            _md5,
+                            len(_info['repo'])
                         ])
-        _fmt = "{:"+str(_s_max)+"} {:"+str(_a_max)+"} {}"
-        _rows = [_fmt.format(s, a, p) for s, a, p in _rows]
+        # format columns
+        # section
+        _fmt = "{:"+str(_s_max)+"} "
+        # app
+        _fmt += "{:"+str(_a_max)+"} "
+        # package name
+        _fmt += "{:"+str(_p_max)+"} "
+        # version
+        _fmt += "{:"+str(_v_max)+"} "
+        # md5 and number of repos is fixed
+        _fmt += "{} in {} repos"
+
+        # fill rows
+        _rows = [_fmt.format(s, a, p, v, m, l) for s, a, p, v, m, l in _rows]
         _rows.sort()
         return _rows
 
@@ -881,12 +903,12 @@
         c = 0
         rows = self.get_apps(self._versions_mirantis, name)
         if rows:
-            logger_cli.info("# Mirantis packages for '{}'".format(name))
+            logger_cli.info("\n# Mirantis packages for '{}'".format(name))
             logger_cli.info("\n".join(rows))
             c += 1
         rows = self.get_apps(self._versions_other, name)
         if rows:
-            logger_cli.info("# Other packages for '{}'".format(name))
+            logger_cli.info("\n# Other packages for '{}'".format(name))
             logger_cli.info("\n".join(rows))
             c += 1
         if c == 0:
