diff --git a/jeepyb/cmd/manage_projects.py b/jeepyb/cmd/manage_projects.py
index 92962c8..af46218 100644
--- a/jeepyb/cmd/manage_projects.py
+++ b/jeepyb/cmd/manage_projects.py
@@ -103,32 +103,6 @@
     return (status, out)
 
 
-def write_acl_config(project, acl_dir, acl_base, acl_append, parameters):
-    project_parts = os.path.split(project)
-    if len(project_parts) > 1:
-        repo_base = os.path.join(acl_dir, *project_parts[:-1])
-        if not os.path.exists(repo_base):
-            os.makedirs(repo_base)
-        if not os.path.isdir(repo_base):
-            return 1
-        project = project_parts[-1]
-        config_file = os.path.join(repo_base, "%s.config" % project)
-    else:
-        config_file = os.path.join(acl_dir, "%s.config" % project)
-    if 'project' not in parameters:
-        parameters['project'] = project
-    with open(config_file, 'w') as config:
-        if acl_base and os.path.exists(acl_base):
-            config.write(open(acl_base, 'r').read())
-        for acl_snippet in acl_append:
-            if not os.path.exists(acl_snippet):
-                acl_snippet = os.path.join(acl_dir, acl_snippet)
-            if not os.path.exists(acl_snippet):
-                continue
-            with open(acl_snippet, 'r') as append_content:
-                config.write(append_content.read() % parameters)
-
-
 def fetch_config(project, remote_url, repo_path, env={}):
     # Poll for refs/meta/config as gerrit may not have written it out for
     # us yet.
@@ -289,20 +263,20 @@
                                has_issues=has_issues,
                                has_downloads=has_downloads,
                                has_wiki=has_wiki)
+        if description:
+            repo.edit(repo_name, description=description)
+        if homepage:
+            repo.edit(repo_name, homepage=homepage)
+        repo.edit(repo_name, has_issues=has_issues,
+                  has_downloads=has_downloads,
+                  has_wiki=has_wiki)
+
+        if 'gerrit' not in [team.name for team in repo.get_teams()]:
+            teams = org.get_teams()
+            teams_dict = dict(zip([t.name.lower() for t in teams], teams))
+            teams_dict['gerrit'].add_to_repos(repo)
         created = True
-    if description:
-        repo.edit(repo_name, description=description)
-    if homepage:
-        repo.edit(repo_name, homepage=homepage)
 
-    repo.edit(repo_name, has_issues=has_issues,
-              has_downloads=has_downloads,
-              has_wiki=has_wiki)
-
-    if 'gerrit' not in [team.name for team in repo.get_teams()]:
-        teams = org.get_teams()
-        teams_dict = dict(zip([t.name.lower() for t in teams], teams))
-        teams_dict['gerrit'].add_to_repos(repo)
     return created
 
 
@@ -464,11 +438,7 @@
 def process_acls(acl_config, project, ACL_DIR, section,
                  remote_url, repo_path, ssh_env, gerrit, GERRIT_GITID):
     if not os.path.isfile(acl_config):
-        write_acl_config(project,
-                         ACL_DIR,
-                         section.get('acl-base', None),
-                         section.get('acl-append', []),
-                         section.get('acl-parameters', {}))
+        return
     try:
         if (fetch_config(project,
                          remote_url,
