diff --git a/git_command.py b/git_command.py
index a3bd919..b6a4a34 100644
--- a/git_command.py
+++ b/git_command.py
@@ -17,18 +17,14 @@
 import sys
 import subprocess
 from error import GitError
+from trace import REPO_TRACE, IsTrace, Trace
 
 GIT = 'git'
 MIN_GIT_VERSION = (1, 5, 4)
 GIT_DIR = 'GIT_DIR'
-REPO_TRACE = 'REPO_TRACE'
 
 LAST_GITDIR = None
 LAST_CWD = None
-try:
-  TRACE = os.environ[REPO_TRACE] == '1'
-except KeyError:
-  TRACE = False
 
 
 class _GitCall(object):
@@ -101,7 +97,7 @@
     else:
       stderr = None
 
-    if TRACE:
+    if IsTrace():
       global LAST_CWD
       global LAST_GITDIR
 
@@ -127,7 +123,7 @@
         dbg += ' 1>|'
       if stderr == subprocess.PIPE:
         dbg += ' 2>|'
-      print >>sys.stderr, dbg
+      Trace('%s', dbg)
 
     try:
       p = subprocess.Popen(command,
diff --git a/git_config.py b/git_config.py
index f65a035..78069c5 100644
--- a/git_config.py
+++ b/git_config.py
@@ -19,7 +19,8 @@
 import sys
 from urllib2 import urlopen, HTTPError
 from error import GitError, UploadError
-from git_command import GitCommand, TRACE
+from trace import Trace
+from git_command import GitCommand
 
 R_HEADS = 'refs/heads/'
 R_TAGS  = 'refs/tags/'
@@ -189,8 +190,7 @@
     except OSError:
       return None
     try:
-      if TRACE:
-        print >>sys.stderr, ': unpickle %s' % self.file
+      Trace(': unpickle %s', self.file)
       return cPickle.load(open(self._pickle, 'r'))
     except IOError:
       os.remove(self._pickle)
diff --git a/git_refs.py b/git_refs.py
index be8d271..2476091 100644
--- a/git_refs.py
+++ b/git_refs.py
@@ -15,7 +15,7 @@
 
 import os
 import sys
-from git_command import TRACE
+from trace import Trace
 
 HEAD    = 'HEAD'
 R_HEADS = 'refs/heads/'
@@ -65,8 +65,8 @@
       self._LoadAll()
 
   def _NeedUpdate(self):
-    if TRACE:
-      print >>sys.stderr, ': scan refs %s' % self._gitdir
+    Trace(': scan refs %s', self._gitdir)
+
     for name, mtime in self._mtime.iteritems():
       try:
         if mtime != os.path.getmtime(os.path.join(self._gitdir, name)):
@@ -76,8 +76,8 @@
     return False
 
   def _LoadAll(self):
-    if TRACE:
-      print >>sys.stderr, ': load refs %s' % self._gitdir
+    Trace(': load refs %s', self._gitdir)
+
     self._phyref = {}
     self._symref = {}
     self._mtime = {}
diff --git a/main.py b/main.py
index df18183..740fb3a 100755
--- a/main.py
+++ b/main.py
@@ -27,7 +27,7 @@
 import re
 import sys
 
-import git_command
+from trace import SetTrace
 from command import InteractiveCommand
 from command import MirrorSafeCommand
 from command import PagedCommand
@@ -79,7 +79,7 @@
     gopts, gargs = global_options.parse_args(glob)
 
     if gopts.trace:
-      git_command.TRACE = True
+      SetTrace()
     if gopts.show_version:
       if name == 'help':
         name = 'version'
diff --git a/trace.py b/trace.py
new file mode 100644
index 0000000..0376d2b
--- /dev/null
+++ b/trace.py
@@ -0,0 +1,34 @@
+#
+# Copyright (C) 2008 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
+import os
+REPO_TRACE = 'REPO_TRACE'
+
+try:
+  _TRACE = os.environ[REPO_TRACE] == '1'
+except KeyError:
+  _TRACE = False
+
+def IsTrace():
+  return _TRACE
+
+def SetTrace():
+  global _TRACE
+  _TRACE = True
+
+def Trace(fmt, *args):
+  if IsTrace():
+    print >>sys.stderr, fmt % args
