diff --git a/git_command.py b/git_command.py
index 5988cc2..82709b9 100644
--- a/git_command.py
+++ b/git_command.py
@@ -37,11 +37,11 @@
   if _ssh_sock_path is None:
     if not create:
       return None
-    dir = '/tmp'
-    if not os.path.exists(dir):
-      dir = tempfile.gettempdir()
+    tmp_dir = '/tmp'
+    if not os.path.exists(tmp_dir):
+      tmp_dir = tempfile.gettempdir()
     _ssh_sock_path = os.path.join(
-      tempfile.mkdtemp('', 'ssh-', dir),
+      tempfile.mkdtemp('', 'ssh-', tmp_dir),
       'master-%r@%h:%p')
   return _ssh_sock_path
 
diff --git a/main.py b/main.py
index 5c8772c..665a655 100755
--- a/main.py
+++ b/main.py
@@ -209,8 +209,8 @@
     cp %s %s
 """ % (exp_str, _MyWrapperPath(), repo_path)
 
-def _CheckRepoDir(dir):
-  if not dir:
+def _CheckRepoDir(repo_dir):
+  if not repo_dir:
     print >>sys.stderr, 'no --repo-dir argument'
     sys.exit(1)
 
diff --git a/project.py b/project.py
index d81152c..96ab907 100644
--- a/project.py
+++ b/project.py
@@ -209,9 +209,9 @@
         if os.path.exists(dest):
           os.remove(dest)
         else:
-          dir = os.path.dirname(dest)
-          if not os.path.isdir(dir):
-            os.makedirs(dir)
+          dest_dir = os.path.dirname(dest)
+          if not os.path.isdir(dest_dir):
+            os.makedirs(dest_dir)
         shutil.copy(src, dest)
         # make the file read-only
         mode = os.stat(dest)[stat.ST_MODE]
diff --git a/repo b/repo
index f540cbb..32cd178 100755
--- a/repo
+++ b/repo
@@ -538,19 +538,19 @@
 def _FindRepo():
   """Look for a repo installation, starting at the current directory.
   """
-  dir = os.getcwd()
+  curdir = os.getcwd()
   repo = None
 
   olddir = None
-  while dir != '/' \
-    and dir != olddir \
+  while curdir != '/' \
+    and curdir != olddir \
     and not repo:
-    repo = os.path.join(dir, repodir, REPO_MAIN)
+    repo = os.path.join(curdir, repodir, REPO_MAIN)
     if not os.path.isfile(repo):
       repo = None
-      olddir = dir
-      dir = os.path.dirname(dir)
-  return (repo, os.path.join(dir, repodir))
+      olddir = curdir
+      curdir = os.path.dirname(curdir)
+  return (repo, os.path.join(curdir, repodir))
 
 
 class _Options:
@@ -656,13 +656,13 @@
 
 
 def main(orig_args):
-  main, dir = _FindRepo()
+  repo_main, rel_repo_dir = _FindRepo()
   cmd, opt, args = _ParseArguments(orig_args)
 
   wrapper_path = os.path.abspath(__file__)
   my_main, my_git = _RunSelf(wrapper_path)
 
-  if not main:
+  if not repo_main:
     if opt.help:
       _Usage()
     if cmd == 'help':
@@ -682,25 +682,25 @@
             os.rmdir(os.path.join(root, name))
         os.rmdir(repodir)
         sys.exit(1)
-      main, dir = _FindRepo()
+      repo_main, rel_repo_dir = _FindRepo()
     else:
       _NoCommands(cmd)
 
   if my_main:
-    main = my_main
+    repo_main = my_main
 
   ver_str = '.'.join(map(lambda x: str(x), VERSION))
-  me = [main,
-        '--repo-dir=%s' % dir,
+  me = [repo_main,
+        '--repo-dir=%s' % rel_repo_dir,
         '--wrapper-version=%s' % ver_str,
         '--wrapper-path=%s' % wrapper_path,
         '--']
   me.extend(orig_args)
   me.extend(extra_args)
   try:
-    os.execv(main, me)
+    os.execv(repo_main, me)
   except OSError, e:
-    print >>sys.stderr, "fatal: unable to start %s" % main
+    print >>sys.stderr, "fatal: unable to start %s" % repo_main
     print >>sys.stderr, "fatal: %s" % e
     sys.exit(148)
 
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 1b71635..e68a025 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -339,13 +339,13 @@
                 print >>sys.stderr, 'Deleting obsolete path %s' % project.worktree
                 shutil.rmtree(project.worktree)
                 # Try deleting parent subdirs if they are empty
-                dir = os.path.dirname(project.worktree)
-                while dir != self.manifest.topdir:
+                project_dir = os.path.dirname(project.worktree)
+                while project_dir != self.manifest.topdir:
                   try:
-                    os.rmdir(dir)
+                    os.rmdir(project_dir)
                   except OSError:
                     break
-                  dir = os.path.dirname(dir)
+                  project_dir = os.path.dirname(project_dir)
 
     new_project_paths.sort()
     fd = open(file_path, 'w')
