diff --git a/collate.py b/collate.py
index e156796e..e006ce62 100755
--- a/collate.py
+++ b/collate.py
@@ -77,7 +77,7 @@ def addmodules(data):
                 modules[int(row['id'])] = row	# index by int for easier lookup and sorting
     size_pre = len(modules)
 
-    for key,module in data['lastStarport'].get('modules').iteritems():
+    for key,module in data['lastStarport'].get('modules').items():
         # sanity check
         if int(key) != module.get('id'): raise AssertionError('id: %s!=%s' % (key, module['id']))
         try:
diff --git a/companion.py b/companion.py
index e7e9e6ab..11b79e00 100644
--- a/companion.py
+++ b/companion.py
@@ -516,7 +516,7 @@ def ship(data):
                 pass	# also noisy, and redundant
             elif k in ['dir', 'LessIsGood']:
                 pass	# dir is not ASCII - remove to simplify handling
-            elif hasattr(v, 'iteritems'):
+            elif hasattr(v, 'items'):
                 filtered[k] = filter_ship(v)
             else:
                 filtered[k] = v
diff --git a/coriolis.py b/coriolis.py
index a1343ea9..33cf1e99 100755
--- a/coriolis.py
+++ b/coriolis.py
@@ -39,7 +39,7 @@ if __name__ == "__main__":
     }
 
     # Symbolic name from in-game name
-    reverse_ship_map = {v: k for k, v in companion.ship_map.iteritems()}
+    reverse_ship_map = {v: k for k, v in companion.ship_map.items()}
 
     bulkheads = outfitting.armour_map.keys()
 
@@ -59,7 +59,7 @@ if __name__ == "__main__":
 
     # Module masses
     for cat in data['Modules'].values():
-        for grp, mlist in cat.iteritems():
+        for grp, mlist in cat.items():
             for m in mlist:
                 assert 'symbol' in m, m
                 key = str(m['symbol'].lower())
diff --git a/eddb.py b/eddb.py
index 2d617eb2..6437614d 100755
--- a/eddb.py
+++ b/eddb.py
@@ -52,28 +52,28 @@ if __name__ == "__main__":
     # (system_id, is_populated) by system_name (ignoring duplicate names)
     system_ids = {
         str(s['name']) : (k, s['is_populated'])
-        for k,s in systems.iteritems() if inbubble(s['x'], s['y'], s['z'])
+        for k,s in systems.items() if inbubble(s['x'], s['y'], s['z'])
     }
     print '%d\tsystems in bubble' % len(system_ids)
 
     extra_ids = {
         str(s['name']) : (k, s['is_populated'])
-        for k,s in systems.iteritems() if around_jaques(s['x'], s['y'], s['z'])
+        for k,s in systems.items() if around_jaques(s['x'], s['y'], s['z'])
     }
     system_ids.update(extra_ids)
     print '%d\tsystems in Colonia' % len(extra_ids)
 
     cut = {
-        k : s for k, s in systems.iteritems()
+        k : s for k, s in systems.items()
         if s['is_populated'] and s['name'] not in system_ids
     }
     print '%d\toutlying populated systems:' % len(cut)
     extra_ids = {}
-    for k1,o in sorted(cut.iteritems()):
+    for k1,o in sorted(cut.items()):
         ox, oy, oz = o['x'], o['y'], o['z']
         extra = {
             str(s['name']) : (k, s['is_populated'])
-            for k,s in systems.iteritems() if around_outlier(ox, oy, oz, s['x'], s['y'], s['z'])
+            for k,s in systems.items() if around_outlier(ox, oy, oz, s['x'], s['y'], s['z'])
         }
         print '%-30s%7d %11.5f %11.5f %11.5f %4d' % (o['name'], k1, ox, oy, oz, len(extra))
         extra_ids.update(extra)
@@ -82,10 +82,10 @@ if __name__ == "__main__":
 
     cut = {
         k : s
-        for k,s in systems.iteritems() if s['name'] in system_ids and system_ids[s['name']][0] != k
+        for k,s in systems.items() if s['name'] in system_ids and system_ids[s['name']][0] != k
     }
     print '\n%d duplicate systems' % len(cut)
-    for k,s in sorted(cut.iteritems()):
+    for k,s in sorted(cut.items()):
         print '%-20s%8d %8d %11.5f %11.5f %11.5f' % (s['name'], system_ids[s['name']][0], k, s['x'], s['y'], s['z'])
 
     # Hack - ensure duplicate system names are pointing at the more interesting system
diff --git a/plugins/eddn.py b/plugins/eddn.py
index f03cade3..2b6c4fba 100644
--- a/plugins/eddn.py
+++ b/plugins/eddn.py
@@ -392,10 +392,10 @@ def journal_entry(cmdr, is_beta, system, station, entry, state):
         for k, v in d.items():
             if k.endswith('_Localised'):
                 pass
-            elif hasattr(v, 'iteritems'):	# dict -> recurse
+            elif hasattr(v, 'items'):	# dict -> recurse
                 filtered[k] = filter_localised(v)
             elif isinstance(v, list):	# list of dicts -> recurse
-                filtered[k] = [filter_localised(x) if hasattr(x, 'iteritems') else x for x in v]
+                filtered[k] = [filter_localised(x) if hasattr(x, 'items') else x for x in v]
             else:
                 filtered[k] = v
         return filtered
diff --git a/prefs.py b/prefs.py
index f73855cf..a8431d67 100644
--- a/prefs.py
+++ b/prefs.py
@@ -499,7 +499,7 @@ class PreferencesDialog(tk.Toplevel):
         config.set('system_provider', self.system_provider.get())
         config.set('station_provider', self.station_provider.get())
 
-        lang_codes = { v: k for k, v in self.languages.iteritems() }	# Codes by name
+        lang_codes = { v: k for k, v in self.languages.items() }	# Codes by name
         config.set('language', lang_codes.get(self.lang.get()) or '')
         Translations.install(config.get('language') or None)