diff --git a/progress.py b/progress.py
new file mode 100644
index 0000000..89d6c5b
--- /dev/null
+++ b/progress.py
@@ -0,0 +1,45 @@
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import sys
+
+class Progress(object):
+  def __init__(self, title, total):
+    self._title = title
+    self._total = total
+    self._done = 0
+    self._lastp = -1
+
+  def update(self, inc=1):
+    self._done += inc
+    p = (100 * self._done) / self._total
+
+    if self._lastp != p:
+      self._lastp = p
+      sys.stderr.write('\r%s: %3d%% (%d/%d)  ' % (
+        self._title,
+        p,
+        self._done,
+        self._total))
+      sys.stderr.flush()
+
+  def end(self):
+    p = (100 * self._done) / self._total
+    sys.stderr.write('\r%s: %3d%% (%d/%d), done.  \n' % (
+      self._title,
+      p,
+      self._done,
+      self._total))
+    sys.stderr.flush()
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 21e0899..79ffcf5 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -23,6 +23,7 @@
 from command import Command, MirrorSafeCommand
 from error import RepoChangedException, GitError
 from project import R_HEADS
+from progress import Progress
 
 class Sync(Command, MirrorSafeCommand):
   common = True
@@ -71,12 +72,16 @@
 
   def _Fetch(self, *projects):
     fetched = set()
+    pm = Progress('Fetching projects', len(projects))
     for project in projects:
+      pm.update()
+
       if project.Sync_NetworkHalf():
         fetched.add(project.gitdir)
       else:
         print >>sys.stderr, 'error: Cannot fetch %s' % project.name
         sys.exit(1)
+    pm.end()
     return fetched
 
   def Execute(self, opt, args):
@@ -130,12 +135,14 @@
             missing.append(project)
         self._Fetch(*missing)
 
+    pm = Progress('Syncing work tree', len(all))
     for project in all:
+      pm.update()
       if project.worktree:
         if not project.Sync_LocalHalf(
             detach_head=opt.detach_head):
           sys.exit(1)
-
+    pm.end()
 
 def _VerifyTag(project):
   gpg_dir = os.path.expanduser('~/.repoconfig/gnupg')
