diff --git a/fetch_remotes.py b/fetch_remotes.py
index 776188e..4dda133 100755
--- a/fetch_remotes.py
+++ b/fetch_remotes.py
@@ -13,18 +13,19 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-# Ensure that the specified remote exists in the repo and pull revisions
-# from upstream
+# Fetch remotes reads a project config file called projects.yaml
+# It should look like:
 
-# [project "UPSTREAM_PROJECT"]
-# remote = https://gerrit.googlesource.com/gerrit
+# - project: PROJECT_NAME
+#   options:
+#   - remote: https://gerrit.googlesource.com/gerrit
 
-import ConfigParser
+
 import logging
 import os
-import re
 import subprocess
 import shlex
+import yaml
 
 def run_command(cmd, status=False, env={}):
     cmd_list = shlex.split(str(cmd))
@@ -46,29 +47,22 @@
 
 REPO_ROOT = os.environ.get('REPO_ROOT',
                            '/home/gerrit2/review_site/git')
-REMOTES_CONFIG = os.environ.get('REMOTES_CONFIG',
-                               '/home/gerrit2/remotes.config')
+PROJECTS_YAML = os.environ.get('PROJECTS_YAML',
+                               '/home/gerrit2/projects.yaml')
 
-PROJECT_RE = re.compile(r'^project\s+"(.*)"$')
+config = yaml.load(open(PROJECTS_YAML))
 
-config = ConfigParser.ConfigParser()
-config.read(REMOTES_CONFIG)
+for section in config:
+    project = section['project']
 
-
-for section in config.sections():
-    # Each section looks like [project "openstack/project"]
-    m = PROJECT_RE.match(section)
-    if not m:
+    if 'remote' not in section:
         continue
-    project = m.group(1)
+
     project_git = "%s.git" % project
     os.chdir(os.path.join(REPO_ROOT, project_git))
 
-    if not (config.has_option(section, "remote")):
-        continue
-
     # Make sure that the specified remote exists
-    remote_url = config.get(section, "remote")
+    remote_url = section['remote']
     # We could check if it exists first, but we're ignoring output anyway
     # So just try to make it, and it'll either make a new one or do nothing
     run_command("git remote add -f upstream %s" % remote_url)
diff --git a/make_local_repos.py b/make_local_repos.py
new file mode 100755
index 0000000..f598446
--- /dev/null
+++ b/make_local_repos.py
@@ -0,0 +1,67 @@
+#! /usr/bin/env python
+# Copyright (C) 2011 OpenStack, LLC.
+#
+# 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.
+
+# Make local repos reads a project config file called projects.yaml
+# It should look like:
+
+# - project: PROJECT_NAME
+#   options:
+#   - close-pull
+#   remote: https://gerrit.googlesource.com/gerrit
+
+# TODO: add support for
+#         ssh -p 29418 localhost gerrit -name create-project PROJECT
+
+import logging
+import os
+import subprocess
+import sys
+import shlex
+import yaml
+
+def run_command(cmd, status=False, env={}):
+    cmd_list = shlex.split(str(cmd))
+    newenv = os.environ
+    newenv.update(env)
+    p = subprocess.Popen(cmd_list, stdout=subprocess.PIPE,
+                         stderr=subprocess.STDOUT, env=newenv)
+    (out, nothing) = p.communicate()
+    if status:
+        return (p.returncode, out.strip())
+    return out.strip()
+
+
+def run_command_status(cmd, env={}):
+    return run_command(cmd, True, env)
+
+
+logging.basicConfig(level=logging.ERROR)
+
+REPO_ROOT = sys.argv[1]
+PROJECTS_YAML = os.environ.get('PROJECTS_YAML',
+                               '/home/gerrit2/projects.yaml')
+
+config = yaml.load(open(PROJECTS_YAML))
+
+for section in config:
+    project = section['project']
+
+    project_git = "%s.git" % project
+    project_dir = os.path.join(REPO_ROOT, project_git)
+
+    if os.path.exists(project_dir):
+        continue
+
+    run_command("git --bare init --shared=group %s" % project_dir)
