diff --git a/jeepyb/cmd/manage_projects.py b/jeepyb/cmd/manage_projects.py
index 87890c6..f4d832f 100644
--- a/jeepyb/cmd/manage_projects.py
+++ b/jeepyb/cmd/manage_projects.py
@@ -115,32 +115,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.
@@ -473,11 +447,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:
         fetch_config(project, remote_url, repo_path, ssh_env)
         if not copy_acl_config(project, repo_path, acl_config):
diff --git a/jeepyb/gerritdb.py b/jeepyb/gerritdb.py
index 2255b64..8343b8e 100644
--- a/jeepyb/gerritdb.py
+++ b/jeepyb/gerritdb.py
@@ -15,7 +15,6 @@
 # under the License.
 
 import ConfigParser
-import MySQLdb
 import os
 import StringIO
 
@@ -47,11 +46,18 @@
         gerrit_config = get_broken_config(GERRIT_CONFIG)
         secure_config = get_broken_config(GERRIT_SECURE_CONFIG)
 
+        DB_TYPE = gerrit_config.get("database", "type")
         DB_HOST = gerrit_config.get("database", "hostname")
         DB_USER = gerrit_config.get("database", "username")
         DB_PASS = secure_config.get("database", "password")
         DB_DB = gerrit_config.get("database", "database")
 
-        db_connection = MySQLdb.connect(
-            host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_DB)
+        if DB_TYPE == "MYSQL":
+            import MySQLdb
+            db_connection = MySQLdb.connect(
+                host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_DB)
+        else:
+            import psycopg2
+            db_connection = psycopg2.connect(
+                host=DB_HOST, user=DB_USER, password=DB_PASS, database=DB_DB)
     return db_connection
