diff --git a/hggit/compat.py b/hggit/compat.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvY29tcGF0LnB5..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvY29tcGF0LnB5 100644
--- a/hggit/compat.py
+++ b/hggit/compat.py
@@ -109,8 +109,8 @@
 def registerconfigs(configitem):
     global hasconfigitems
     hasconfigitems = True
-    for section, items in CONFIG_DEFAULTS.iteritems():
-        for item, default in items.iteritems():
+    for section, items in iteritems(CONFIG_DEFAULTS):
+        for item, default in iteritems(items):
             configitem(section, item, default=default)
 
 
diff --git a/hggit/git2hg.py b/hggit/git2hg.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvZ2l0MmhnLnB5..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvZ2l0MmhnLnB5 100644
--- a/hggit/git2hg.py
+++ b/hggit/git2hg.py
@@ -5,6 +5,7 @@
 import urllib
 from dulwich.objects import Commit, Tag
 
+from . import compat
 
 def find_incoming(git_object_store, git_map, refs):
     '''find what commits need to be imported
@@ -28,7 +29,7 @@
     def get_heads(refs):
         todo = []
         seenheads = set()
-        for ref, sha in refs.iteritems():
+        for ref, sha in compat.iteritems(refs):
             # refs could contain refs on the server that we haven't pulled down
             # the objects for; also make sure it's a sha and not a symref
             if ref != 'HEAD' and sha in git_object_store:
diff --git a/hggit/git_handler.py b/hggit/git_handler.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvZ2l0X2hhbmRsZXIucHk=..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvZ2l0X2hhbmRsZXIucHk= 100644
--- a/hggit/git_handler.py
+++ b/hggit/git_handler.py
@@ -220,7 +220,7 @@
             map_hg = self._map_hg
             buf = io.BytesIO()
             bwrite = buf.write
-            for hgsha, gitsha in map_hg.iteritems():
+            for hgsha, gitsha in compat.iteritems(map_hg):
                 bwrite("%s %s\n" % (gitsha, hgsha))
             file.write(buf.getvalue())
             buf.close()
@@ -238,7 +238,7 @@
 
     def save_tags(self):
         file = self.vfs(self.tags_file, 'w+', atomictemp=True)
-        for name, sha in sorted(self.tags.iteritems()):
+        for name, sha in sorted(compat.iteritems(self.tags)):
             if not self.repo.tagtype(name) == 'global':
                 file.write("%s %s\n" % (sha, name))
         # If this complains, atomictempfile no longer has close
@@ -388,7 +388,7 @@
         try:
             client.send_pack(path, changed, lambda have, want: [])
 
-            changed_refs = [ref for ref, sha in new_refs.iteritems()
+            changed_refs = [ref for ref, sha in compat.iteritems(new_refs)
                             if sha != old_refs.get(ref)]
             new = [bin(self.map_hg_get(new_refs[ref])) for ref in changed_refs]
             old = {}
@@ -407,7 +407,7 @@
         remote_name = self.remote_name(remote)
 
         if remote_name and new_refs:
-            for ref, new_sha in sorted(new_refs.iteritems()):
+            for ref, new_sha in sorted(compat.iteritems(new_refs)):
                 old_sha = old_refs.get(ref)
                 if old_sha is None:
                     if self.ui.verbose:
@@ -872,5 +872,5 @@
                 parentsubdata = p1ctx.filectx('.hgsubstate').data()
                 parentsubdata = parentsubdata.splitlines()
                 parentsubstate = util.parse_hgsubstate(parentsubdata)
-                for path, sha in parentsubstate.iteritems():
+                for path, sha in compat.iteritems(parentsubstate):
                     hgsubstate[path] = sha
@@ -876,5 +876,5 @@
                     hgsubstate[path] = sha
-        for path, sha in gitlinks.iteritems():
+        for path, sha in compat.iteritems(gitlinks):
             if sha is None:
                 hgsubstate.pop(path, None)
             else:
@@ -953,7 +953,7 @@
                 return []
             manifest1 = self.repo[p1].manifest()
             manifest2 = self.repo[p2].manifest()
-            return [path for path, node1 in manifest1.iteritems() if path not
+            return [path for path, node1 in compat.iteritems(manifest1) if path not
                     in files and manifest2.get(path, node1) != node1]
 
         def getfilectx(repo, memctx, f):
@@ -1148,7 +1148,7 @@
 
         # mapped nodes might be hidden
         unfiltered = self.repo.unfiltered()
-        for rev, rev_refs in exportable.iteritems():
+        for rev, rev_refs in compat.iteritems(exportable):
             ctx = self.repo[rev]
             if not rev_refs:
                 raise error.Abort("revision %s cannot be pushed since"
@@ -1213,7 +1213,7 @@
             if refs is None:
                 return None
             filteredrefs = self.filter_refs(refs, heads)
-            return [x for x in filteredrefs.itervalues() if x not in self.git]
+            return [x for x in compat.itervalues(filteredrefs) if x not in self.git]
 
         try:
             progress = GitProgress(self.ui)
@@ -1267,7 +1267,7 @@
                         raise error.Abort("ambiguous reference %s: %r"
                                           % (h, r))
         else:
-            for ref, sha in refs.iteritems():
+            for ref, sha in compat.iteritems(refs):
                 if (not ref.endswith('^{}') and
                     (ref.startswith('refs/heads/') or
                      ref.startswith('refs/tags/'))):
@@ -1295,7 +1295,7 @@
                 return obj.tag_time >= min_timestamp
             else:
                 return obj.commit_time >= min_timestamp
-        return util.OrderedDict((ref, sha) for ref, sha in refs.iteritems()
+        return util.OrderedDict((ref, sha) for ref, sha in compat.iteritems(refs)
                                 if check_min_time(self.git[sha]))
 
     def update_references(self):
@@ -1303,10 +1303,10 @@
 
         # Create a local Git branch name for each
         # Mercurial bookmark.
-        for hg_sha, refs in exportable.iteritems():
+        for hg_sha, refs in compat.iteritems(exportable):
             for git_ref in refs.heads:
                 git_sha = self.map_git_get(hg_sha)
                 if git_sha:
                     self.git.refs[git_ref] = git_sha
 
     def export_hg_tags(self):
@@ -1307,10 +1307,10 @@
             for git_ref in refs.heads:
                 git_sha = self.map_git_get(hg_sha)
                 if git_sha:
                     self.git.refs[git_ref] = git_sha
 
     def export_hg_tags(self):
-        for tag, sha in self.repo.tags().iteritems():
+        for tag, sha in compat.iteritems(self.repo.tags()):
             if self.repo.tagtype(tag) in ('global', 'git'):
                 tag = tag.replace(' ', '_')
                 target = self.map_git_get(hex(sha))
@@ -1356,7 +1356,7 @@
         bms = self.repo._bookmarks
         for filtered_bm, bm in self._filter_for_bookmarks(bms):
             res[hex(bms[bm])].heads.add('refs/heads/' + filtered_bm)
-        for tag, sha in self.tags.iteritems():
+        for tag, sha in compat.iteritems(self.tags):
             res[sha].tags.add('refs/tags/' + tag)
         return res
 
@@ -1402,7 +1402,7 @@
 
             suffix = self.branch_bookmark_suffix or ''
             changes = []
-            for head, sha in heads.iteritems():
+            for head, sha in compat.iteritems(heads):
                 # refs contains all the refs in the server, not just
                 # the ones we are pulling
                 hgsha = self.map_hg_get(sha)
@@ -1433,7 +1433,7 @@
         for t in list(remote_refs):
             if t.startswith(remote_name + '/'):
                 del remote_refs[t]
-        for ref_name, sha in refs.iteritems():
+        for ref_name, sha in compat.iteritems(refs):
             if ref_name.startswith('refs/heads'):
                 hgsha = self.map_hg_get(sha)
                 if hgsha is None or hgsha not in self.repo:
diff --git a/hggit/gitdirstate.py b/hggit/gitdirstate.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvZ2l0ZGlyc3RhdGUucHk=..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvZ2l0ZGlyc3RhdGUucHk= 100644
--- a/hggit/gitdirstate.py
+++ b/hggit/gitdirstate.py
@@ -51,7 +51,7 @@
             rootsuffixes = ['', '**/']
         for rootsuffix in rootsuffixes:
             pat = syntax + rootprefix + rootsuffix + line
-            for s, rels in syntaxes.iteritems():
+            for s, rels in compat.iteritems(syntaxes):
                 if line.startswith(rels):
                     pat = line
                     break
diff --git a/hggit/gitrepo.py b/hggit/gitrepo.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvZ2l0cmVwby5weQ==..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvZ2l0cmVwby5weQ== 100644
--- a/hggit/gitrepo.py
+++ b/hggit/gitrepo.py
@@ -6,6 +6,8 @@
     util
 )
 
+from . import compat
+
 peerapi = False
 try:
     from mercurial.interfaces.repository import peer as peerrepository
@@ -62,7 +64,7 @@
                 # map any git shas that exist in hg to hg shas
                 stripped_refs = {
                     ref[11:]: handler.map_hg_get(val) or val
-                    for ref, val in result.refs.iteritems()
+                    for ref, val in compat.iteritems(result.refs)
                     if ref.startswith('refs/heads/')
                 }
                 return stripped_refs
diff --git a/hggit/hg2git.py b/hggit/hg2git.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvaGcyZ2l0LnB5..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvaGcyZ2l0LnB5 100644
--- a/hggit/hg2git.py
+++ b/hggit/hg2git.py
@@ -144,7 +144,7 @@
         while todo:
             path, tree = todo.pop()
             self._dirs[path] = tree
-            for entry in tree.iteritems():
+            for entry in compat.iteritems(tree):
                 if entry.mode == dirkind:
                     if path == '':
                         newpath = entry.path
@@ -396,7 +396,7 @@
         def isgit(sub, path):
             return path not in sub or sub[path].startswith('[git]')
 
-        for path, sha in substate.iteritems():
+        for path, sha in compat.iteritems(substate):
             if not isgit(sub, path):
                 # old = hg -- will be handled in next loop
                 continue
@@ -405,7 +405,7 @@
                 # new = hg or no, case (2) or (3)
                 removed.append(path)
 
-        for path, sha in newsubstate.iteritems():
+        for path, sha in compat.iteritems(newsubstate):
             if not isgit(newsub, path):
                 # new = hg or no; the only cases we care about are handled
                 # above
diff --git a/hggit/hgrepo.py b/hggit/hgrepo.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvaGdyZXBvLnB5..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvaGdyZXBvLnB5 100644
--- a/hggit/hgrepo.py
+++ b/hggit/hgrepo.py
@@ -8,6 +8,7 @@
 
 from .git_handler import GitHandler
 from .gitrepo import gitrepo
+from . import compat
 from . import util
 
 
@@ -47,8 +48,8 @@
         def _findtags(self):
             (tags, tagtypes) = super(hgrepo, self)._findtags()
 
-            for tag, rev in self.githandler.tags.iteritems():
+            for tag, rev in compat.iteritems(self.githandler.tags):
                 if isinstance(tag, unicode):
                     tag = tag.encode('utf-8')
                 tags[tag] = bin(rev)
                 tagtypes[tag] = 'git'
@@ -51,8 +52,8 @@
                 if isinstance(tag, unicode):
                     tag = tag.encode('utf-8')
                 tags[tag] = bin(rev)
                 tagtypes[tag] = 'git'
-            for tag, rev in self.githandler.remote_refs.iteritems():
+            for tag, rev in compat.iteritems(self.githandler.remote_refs):
                 if isinstance(tag, unicode):
                     tag = tag.encode('utf-8')
                 tags[tag] = rev
@@ -72,7 +73,7 @@
             # TODO consider using self._tagscache
             tagscache = super(hgrepo, self).tags()
             tagscache.update(self.githandler.remote_refs)
-            for tag, rev in self.githandler.tags.iteritems():
+            for tag, rev in compat.iteritems(self.githandler.tags):
                 if tag in tagscache:
                     continue
 
diff --git a/hggit/overlay.py b/hggit/overlay.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvb3ZlcmxheS5weQ==..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvb3ZlcmxheS5weQ== 100644
--- a/hggit/overlay.py
+++ b/hggit/overlay.py
@@ -33,7 +33,7 @@
 
     def withflags(self):
         self.load()
-        return set([path for path, flag in self._flags.iteritems()
+        return set([path for path, flag in compat.iteritems(self._flags)
                     if flag != ''])
 
     def copy(self):
@@ -62,7 +62,7 @@
                 return ''
 
         def addtree(tree, dirname):
-            for entry in tree.iteritems():
+            for entry in compat.iteritems(tree):
                 if entry.mode & 0o40000:
                     # expand directory
                     subtree = self.repo.handler.git.get_object(entry.sha)
@@ -87,7 +87,7 @@
 
     def iteritems(self):
         self.load()
-        return self._map.iteritems()
+        return compat.iteritems(self._map)
 
     def __iter__(self):
         self.load()
@@ -128,7 +128,7 @@
 
         if match is None:
             match = matchmod.always('', '')
-        for fn, n1 in self.iteritems():
+        for fn, n1 in compat.iteritems(self):
             if not match(fn):
                 continue
             fl1 = self._flags.get(fn)
@@ -141,7 +141,7 @@
             elif clean:
                 diff[fn] = None
 
-        for fn, n2 in m2.iteritems():
+        for fn, n2 in compat.iteritems(m2):
             if fn not in self:
                 if not match(fn):
                     continue
diff --git a/hggit/util.py b/hggit/util.py
index c77e882038360e3fffa9024e5063f3a746e86362_aGdnaXQvdXRpbC5weQ==..1a19b41460aa40a765d8f49130e62cc07738de15_aGdnaXQvdXRpbC5weQ== 100644
--- a/hggit/util.py
+++ b/hggit/util.py
@@ -19,6 +19,8 @@
     util as hgutil,
 )
 
+from . import compat
+
 gitschemes = ('git', 'git+ssh', 'git+http', 'git+https')
 
 
@@ -36,7 +38,7 @@
 
 def serialize_hgsub(data):
     """Produces a string from OrderedDict hgsub content"""
-    return ''.join(['%s = %s\n' % (n, v) for n, v in data.iteritems()])
+    return ''.join(['%s = %s\n' % (n, v) for n, v in compat.iteritems(data)])
 
 
 def parse_hgsubstate(lines):