diff --git a/cfg_checker/modules/packages/checker.py b/cfg_checker/modules/packages/checker.py
index 92d9e1c..8f30f3c 100644
--- a/cfg_checker/modules/packages/checker.py
+++ b/cfg_checker/modules/packages/checker.py
@@ -8,7 +8,7 @@
 from cfg_checker.nodes import salt_master
 from cfg_checker.reports import reporter
 
-from versions import DebianVersion, PkgVersions, VersionCmpResult
+from .versions import DebianVersion, PkgVersions, VersionCmpResult
 
 
 class CloudPackageChecker(object):
@@ -78,6 +78,7 @@
             # sort packages
             _pn, _val = all_packages.popitem()
             _c = _val['desc']['section']
+            _rkeys = _val['results'].keys()
 
             if not full:
                 # Check if this packet has errors
@@ -125,9 +126,9 @@
                 _data['unlisted'].update({
                     _pn: _val
                 })
-                _eu += _val['results'].keys().count(const.VERSION_ERR)
-                _wu += _val['results'].keys().count(const.VERSION_WARN)
-                _du += _val['results'].keys().count(const.VERSION_DOWN)
+                _eu += sum(x == const.VERSION_ERR for x in _rkeys)
+                _wu += sum(x == const.VERSION_WARN for x in _rkeys)
+                _du += sum(x == const.VERSION_DOWN for x in _rkeys)
             # mirantis/critical
             # elif len(_c) > 0 and _c != 'System':
             elif _val['is_mirantis']:
@@ -135,25 +136,25 @@
                 _data['critical'].update({
                     _pn: _val
                 })
-                _ec += _val['results'].keys().count(const.VERSION_ERR)
-                _wc += _val['results'].keys().count(const.VERSION_WARN)
-                _dc += _val['results'].keys().count(const.VERSION_DOWN)
+                _ec += sum(x == const.VERSION_ERR for x in _rkeys)
+                _wc += sum(x == const.VERSION_WARN for x in _rkeys)
+                _dc += sum(x == const.VERSION_DOWN for x in _rkeys)
             # system
             elif _c == 'System':
                 _data['system'].update({
                     _pn: _val
                 })
-                _es += _val['results'].keys().count(const.VERSION_ERR)
-                _ws += _val['results'].keys().count(const.VERSION_WARN)
-                _ds += _val['results'].keys().count(const.VERSION_DOWN)
+                _es += sum(x == const.VERSION_ERR for x in _rkeys)
+                _ws += sum(x == const.VERSION_WARN for x in _rkeys)
+                _ds += sum(x == const.VERSION_DOWN for x in _rkeys)
             # rest
             else:
                 _data['other'].update({
                     _pn: _val
                 })
-                _eo += _val['results'].keys().count(const.VERSION_ERR)
-                _wo += _val['results'].keys().count(const.VERSION_WARN)
-                _do += _val['results'].keys().count(const.VERSION_DOWN)
+                _eo += sum(x == const.VERSION_ERR for x in _rkeys)
+                _wo += sum(x == const.VERSION_WARN for x in _rkeys)
+                _do += sum(x == const.VERSION_DOWN for x in _rkeys)
 
         _progress.end()
 
@@ -244,7 +245,7 @@
         _total_processed = 0
         # Collect packages from all of the nodes in flat dict
         _all_packages = {}
-        for node_name, node_value in salt_master.nodes.iteritems():
+        for node_name, node_value in salt_master.nodes.items():
             _uniq_len = len(_all_packages.keys())
             _progress_index += 1
             # progress updates shown before next node only
@@ -256,7 +257,7 @@
                     _total_processed
                 )
             )
-            for _name, _value in node_value['packages'].iteritems():
+            for _name, _value in node_value['packages'].items():
                 _total_processed += 1
                 # Parse versions from nodes
                 _ver_ins = DebianVersion(_value['installed'])
@@ -309,9 +310,9 @@
                     _vs = {}
                     _sections = {}
                     _apps = {}
-                    for s, apps in _r.iteritems():
-                        for a, versions in apps.iteritems():
-                            for v, repos in versions.iteritems():
+                    for s, apps in _r.items():
+                        for a, versions in apps.items():
+                            for v, repos in versions.items():
                                 for repo in repos:
                                     if v not in _vs:
                                         _vs[v] = []
@@ -324,11 +325,13 @@
                                     _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:
+                    _vs_keys = iter(_vs.keys())
+                    # get next version, if any
+                    try:
+                        _newest = DebianVersion(next(_vs_keys))
+                    except StopIteration:
                         _newest = DebianVersion('')
+                    # iterate others, if any
                     for v in _vs_keys:
                         _this = DebianVersion(v)
                         if _this > _newest:
