diff --git a/build_apprtc_appengine_app.py b/build_apprtc_appengine_app.py
index 9d15b75..32f9853 100755
--- a/build_apprtc_appengine_app.py
+++ b/build_apprtc_appengine_app.py
@@ -35,7 +35,7 @@
   print 'Wiping .npm folder and trying again...'
   npm_storage = os.path.expanduser('~/.npm')
   assert npm_storage.endswith('.npm')
-  shutil.rmtree(npm_storage, ignore_errors=True)
+  utils.RemoveDirectory(npm_storage)
   utils.RunSubprocessWithRetry(command)
 
 
@@ -49,7 +49,7 @@
 
   _WorkaroundPhantomJsOnWin(apprtc_path)
   os.chdir(apprtc_path)
-  
+
   if utils.GetPlatform() is 'win':
     npm_bin = os.path.join(node_path, 'npm.cmd')
     node_bin = os.path.join(node_path, 'node.exe')
diff --git a/build_apprtc_collider.py b/build_apprtc_collider.py
index c9873a7..f9ce9aa 100755
--- a/build_apprtc_collider.py
+++ b/build_apprtc_collider.py
@@ -13,52 +13,14 @@
 import shutil
 import subprocess
 import sys
-import time
 
 import utils
 
 
-# Code partially copied from
-# https://cs.chromium.org#chromium/build/scripts/common/chromium_utils.py
-def RemoveDirectory(*path):
-  """Recursively removes a directory, even if it's marked read-only.
-
-  Remove the directory located at *path, if it exists.
-
-  shutil.rmtree() doesn't work on Windows if any of the files or directories
-  are read-only, which svn repositories and some .svn files are.  We need to
-  be able to force the files to be writable (i.e., deletable) as we traverse
-  the tree.
-
-  Even with all this, Windows still sometimes fails to delete a file, citing
-  a permission error (maybe something to do with antivirus scans or disk
-  indexing).  The best suggestion any of the user forums had was to wait a
-  bit and try again, so we do that too.  It's hand-waving, but sometimes it
-  works. :/
-  """
-  file_path = os.path.join(*path)
-  if not os.path.exists(file_path):
-    return
-
-  if sys.platform == 'win32':
-    # Give up and use cmd.exe's rd command.
-    file_path = os.path.normcase(file_path)
-    for _ in xrange(3):
-      print 'RemoveDirectory running %s' % (' '.join(
-          ['cmd.exe', '/c', 'rd', '/q', '/s', file_path]))
-      if not subprocess.call(['cmd.exe', '/c', 'rd', '/q', '/s', file_path]):
-        break
-      print '  Failed'
-      time.sleep(3)
-    return
-  else:
-    shutil.rmtree(file_path, ignore_errors=True)
-
-
 def main():
   apprtc_dir = os.path.join('apprtc', 'src')
   golang_workspace = os.path.join('src', 'out', 'go-workspace')
-  RemoveDirectory(golang_workspace)
+  utils.RemoveDirectory(golang_workspace)
 
   golang_workspace_src = os.path.join(golang_workspace, 'src')
 
diff --git a/copy_apprtc.py b/copy_apprtc.py
index 8cc40b1..ca4750e 100755
--- a/copy_apprtc.py
+++ b/copy_apprtc.py
@@ -27,12 +27,7 @@
 
 def main():
   target_dir = os.path.join('src', 'out', 'apprtc')
-  if utils.GetPlatform() is 'win':
-    # Windows shutil can't handle the long node.js paths when deleting;
-    # work around the problem.
-    os.system('rmdir /s /q %s' % target_dir)
-  else:
-    shutil.rmtree(target_dir, ignore_errors=True)
+  utils.RemoveDirectory(target_dir)
   shutil.copytree('apprtc',
                   target_dir, ignore=shutil.ignore_patterns('.svn', '.git'))
 
diff --git a/utils.py b/utils.py
index b32af09..5813271 100755
--- a/utils.py
+++ b/utils.py
@@ -25,7 +25,7 @@
       backoff = pow(2, i)
       print 'Got %s, retrying in %d seconds...' % (exception, backoff)
       time.sleep(backoff)
-  
+
   print 'Giving up.'
   raise exception
 
@@ -56,12 +56,49 @@
   return sha1.hexdigest()
 
 
+# Code partially copied from
+# https://cs.chromium.org#chromium/build/scripts/common/chromium_utils.py
+def RemoveDirectory(*path):
+  """Recursively removes a directory, even if it's marked read-only.
+
+  Remove the directory located at *path, if it exists.
+
+  shutil.rmtree() doesn't work on Windows if any of the files or directories
+  are read-only, which svn repositories and some .svn files are.  We need to
+  be able to force the files to be writable (i.e., deletable) as we traverse
+  the tree.
+
+  Even with all this, Windows still sometimes fails to delete a file, citing
+  a permission error (maybe something to do with antivirus scans or disk
+  indexing).  The best suggestion any of the user forums had was to wait a
+  bit and try again, so we do that too.  It's hand-waving, but sometimes it
+  works. :/
+  """
+  file_path = os.path.join(*path)
+  if not os.path.exists(file_path):
+    return
+
+  if sys.platform == 'win32':
+    # Give up and use cmd.exe's rd command.
+    file_path = os.path.normcase(file_path)
+    for _ in xrange(3):
+      print 'RemoveDirectory running %s' % (' '.join(
+          ['cmd.exe', '/c', 'rd', '/q', '/s', file_path]))
+      if not subprocess.call(['cmd.exe', '/c', 'rd', '/q', '/s', file_path]):
+        break
+      print '  Failed'
+      time.sleep(3)
+    return
+  else:
+    shutil.rmtree(file_path, ignore_errors=True)
+
+
 def DeleteDirNextToGclient(directory):
   # Sanity check to avoid nuking the wrong dirs.
   if not os.path.exists('.gclient'):
     raise Exception('Invoked from wrong dir; invoke from dir with .gclient')
   print 'Deleting %s in %s...' % (directory, os.getcwd())
-  shutil.rmtree(directory, ignore_errors=True)
+  RemoveDirectory(directory)
 
 
 def UnpackToWorkingDir(archive_path):
