diff --git a/jeepyb/cmd/manage_projects.py b/jeepyb/cmd/manage_projects.py
index 98d0acb..2c4eec7 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.
@@ -198,7 +172,7 @@
         raise CopyACLException()
 
     status = git_command(repo_path, "diff --quiet")
-    return status == 0
+    return status != 0
 
 
 def push_acl_config(project, remote_url, repo_path, gitid, env={}):
@@ -493,11 +467,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
