diff --git a/jeepyb/cmd/create_hound_config.py b/jeepyb/cmd/create_hound_config.py
index 2fcc7fe..7824db7 100644
--- a/jeepyb/cmd/create_hound_config.py
+++ b/jeepyb/cmd/create_hound_config.py
@@ -25,6 +25,7 @@
 PROJECTS_YAML = os.environ.get('PROJECTS_YAML', '/home/hound/projects.yaml')
 GIT_SERVER = os.environ.get('GIT_BASE', 'git.openstack.org')
 DATA_PATH = os.environ.get('DATA_PATH', 'data')
+GIT_PROTOCOL = os.environ.get('GIT_PROTOCOL', 'git://')
 
 
 def main():
@@ -33,8 +34,8 @@
     repos = {}
     for project in projects:
         repos[os.path.basename(project)] = {
-            'url': "git://%(gitbase)s/%(project)s" % dict(
-                gitbase=GIT_SERVER, project=project),
+            'url': "%(proto)s%(gitbase)s/%(project)s" % dict(
+                proto=GIT_PROTOCOL, gitbase=GIT_SERVER, project=project),
             'url-pattern': {
                 'base-url': "http://%(gitbase)s/cgit/%(project)s"
                             "/tree/{path}{anchor}" % dict(gitbase=GIT_SERVER,
diff --git a/jeepyb/cmd/expire_old_reviews.py b/jeepyb/cmd/expire_old_reviews.py
index 9ec1064..5a62c05 100644
--- a/jeepyb/cmd/expire_old_reviews.py
+++ b/jeepyb/cmd/expire_old_reviews.py
@@ -74,7 +74,7 @@
 
     for line in stdout:
         row = json.loads(line)
-        if 'rowCount' not in row:
+        if 'rowCount' not in row and 'open' in row and row['open']:
             # Search for negative approvals
             for approval in row['currentPatchSet']['approvals']:
                 if approval['value'] in ('-1', '-2'):
diff --git a/jeepyb/cmd/manage_projects.py b/jeepyb/cmd/manage_projects.py
index 256cae3..580ae23 100644
--- a/jeepyb/cmd/manage_projects.py
+++ b/jeepyb/cmd/manage_projects.py
@@ -176,7 +176,7 @@
     return True
 
 
-def _get_group_uuid(group):
+def _get_group_uuid(group, retries=10):
     """
     Gerrit keeps internal user groups in the DB while it keeps systems
     groups in All-Projects groups file (in refs/meta/config).  This
@@ -189,7 +189,7 @@
     """
     query = "SELECT group_uuid FROM account_groups WHERE name = %s"
     con = jeepyb.gerritdb.connect()
-    for x in range(10):
+    for x in range(retries):
         cursor = con.cursor()
         cursor.execute(query, (group,))
         data = cursor.fetchone()
@@ -197,12 +197,13 @@
         con.commit()
         if data:
             return data[0]
-        time.sleep(1)
+        if retries > 1:
+            time.sleep(1)
     return None
 
 
 def get_group_uuid(gerrit, group):
-    uuid = _get_group_uuid(group)
+    uuid = _get_group_uuid(group, retries=1)
     if uuid:
         return uuid
     if group in GERRIT_SYSTEM_GROUPS:
@@ -291,44 +292,51 @@
     except KeyError:
         # We do not have control of this github org ignore the project.
         return False
+
     try:
+        log.info("Fetching github info about %s", repo_name)
         repo = org.get_repo(repo_name)
 
     except github.GithubException:
+        log.info("Creating %s in github", repo_name)
         repo = org.create_repo(repo_name,
                                homepage=homepage,
                                has_issues=has_issues,
                                has_downloads=has_downloads,
                                has_wiki=has_wiki)
-        cache['created-in-github'] = True
-        cache['has_wiki'] = has_wiki
-        cache['has_downloads'] = has_downloads
-        cache['has_issues'] = has_issues
-
         created = True
 
-        kwargs = {}
-        # If necessary, update project on Github
-        if description and description != repo.description:
-            kwargs['description'] = description
-        if homepage and homepage != repo.homepage:
-            kwargs['homepage'] = homepage
-        if has_issues != repo.has_issues:
-            kwargs['has_issues'] = has_issues
-        if has_downloads != repo.has_downloads:
-            kwargs['has_downloads'] = has_downloads
-        if has_wiki != repo.has_wiki:
-            kwargs['has_wiki'] = has_wiki
+    cache['created-in-github'] = True
+    cache['has_wiki'] = has_wiki
+    cache['has_downloads'] = has_downloads
+    cache['has_issues'] = has_issues
 
+    kwargs = {}
+    # If necessary, update project on Github
+    if description and description != repo.description:
+        kwargs['description'] = description
+    if homepage and homepage != repo.homepage:
+        kwargs['homepage'] = homepage
+    if has_issues != repo.has_issues:
+        kwargs['has_issues'] = has_issues
+    if has_downloads != repo.has_downloads:
+        kwargs['has_downloads'] = has_downloads
+    if has_wiki != repo.has_wiki:
+        kwargs['has_wiki'] = has_wiki
+
+    if kwargs:
+        log.info("Updating github repo info about %s", repo_name)
         repo.edit(repo_name, **kwargs)
-        cache.update(kwargs)
+    cache.update(kwargs)
 
-    if cache.get('gerrit-in-team', False):
+    if not cache.get('gerrit-in-team', False):
         if 'gerrit' not in [team.name for team in repo.get_teams()]:
+            log.info("Adding gerrit to github team for %s", repo_name)
             teams = org.get_teams()
             teams_dict = dict(zip([t.name.lower() for t in teams], teams))
             teams_dict['gerrit'].add_to_repos(repo)
         cache['gerrit-in-team'] = True
+        created = True
 
     return created
 
@@ -413,7 +421,11 @@
                                              '/var/lib/jeepyb')
     ACL_DIR = registry.get_defaults('acl-dir')
     GERRIT_HOST = registry.get_defaults('gerrit-host')
+    GITREVIEW_GERRIT_HOST = registry.get_defaults(
+        'gitreview-gerrit-host', GERRIT_HOST)
     GERRIT_PORT = int(registry.get_defaults('gerrit-port', '29418'))
+    GITREVIEW_GERRIT_PORT = int(registry.get_defaults(
+        'gitreview-gerrit-port', GERRIT_PORT))
     GERRIT_USER = registry.get_defaults('gerrit-user')
     GERRIT_KEY = registry.get_defaults('gerrit-key')
     GERRIT_GITID = registry.get_defaults('gerrit-committer')
@@ -446,7 +458,6 @@
     project_list = gerrit.listProjects()
     ssh_env = u.make_ssh_wrapper(GERRIT_USER, GERRIT_KEY)
     try:
-
         for section in registry.configs_list:
             project = section['project']
             if args.projects and project not in args.projects:
@@ -503,8 +514,8 @@
                     # Make Local repo
                     push_string = u.make_local_copy(
                         repo_path, project, project_list,
-                        git_opts, ssh_env, upstream, GERRIT_HOST,
-                        GERRIT_PORT, project_git, GERRIT_GITID)
+                        git_opts, ssh_env, upstream, GITREVIEW_GERRIT_HOST,
+                        GITREVIEW_GERRIT_PORT, project_git, GERRIT_GITID)
 
                     description = (
                         find_description_override(repo_path)
