diff --git a/jeepyb/cmd/notify_impact.py b/jeepyb/cmd/notify_impact.py
index 029c5d2..9c505a3 100644
--- a/jeepyb/cmd/notify_impact.py
+++ b/jeepyb/cmd/notify_impact.py
@@ -31,6 +31,7 @@
 from __future__ import print_function
 
 import argparse
+import logging
 import os
 import re
 import smtplib
@@ -43,6 +44,9 @@
 
 from jeepyb import projects
 
+
+logger = logging.getLogger('notify_impact')
+
 BASE_DIR = '/home/gerrit2/review_site'
 EMAIL_TEMPLATE = """
 Hi, I'd like you to take a look at this patch for potential
@@ -140,6 +144,11 @@
     author_class = None
 
     buginfo, buglink = actions.create(project, bug_title, bug_descr, args)
+    logger.info('Created a bug in project %(project)s with title "%(title)s": '
+                '%(buglink)s'
+                % {'project': project,
+                   'title': bug_title,
+                   'buglink': buglink})
 
     # If the author of the merging patch matches our configured
     # subscriber lists, then subscribe the configured victims.
@@ -154,6 +163,9 @@
         config = config.get('subscriber_map', {}).get(author_class, [])
         for subscriber in config:
             actions.subscribe(buginfo, subscriber)
+            logger.info('Subscribed %(subscriber)s to bug %(buglink)s'
+                        % {'subscriber': subscriber,
+                           'buglink': buglink})
 
     return buglink
 
diff --git a/jeepyb/cmd/register_zanata_projects.py b/jeepyb/cmd/register_zanata_projects.py
new file mode 100644
index 0000000..355662a
--- /dev/null
+++ b/jeepyb/cmd/register_zanata_projects.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
+#
+# 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.
+
+import logging
+import os
+
+import jeepyb.projects as p
+import jeepyb.translations as t
+import jeepyb.utils as u
+
+PROJECTS_YAML = os.environ.get('PROJECTS_YAML', '/home/gerrit2/projects.yaml')
+ZANATA_URL = os.environ.get('ZANATA_URL')
+ZANATA_USER = os.environ.get('ZANATA_USER')
+ZANATA_KEY = os.environ.get('ZANATA_KEY')
+
+log = logging.getLogger('register_zanata_projects')
+
+
+def main():
+    logging.basicConfig(level=logging.ERROR,
+                        format='%(asctime)-6s: %(name)s - %(levelname)s'
+                               ' - %(message)s')
+    registry = u.ProjectsRegistry(PROJECTS_YAML)
+    rest_service = t.ZanataRestService(ZANATA_URL, ZANATA_USER, ZANATA_KEY)
+    log.info("Registering projects in Zanata")
+    for entry in registry.configs_list:
+        project = entry['project']
+        if not p.has_translations(project):
+            continue
+        log.info("Processing project %s" % project)
+        (org, name) = project.split('/')
+        try:
+            translation_proect = t.TranslationProject(rest_service, name)
+            translation_proect.register()
+        except ValueError as e:
+            log.error(e)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/jeepyb/cmd/update_bug.py b/jeepyb/cmd/update_bug.py
index 807aa46..43bd6c2 100644
--- a/jeepyb/cmd/update_bug.py
+++ b/jeepyb/cmd/update_bug.py
@@ -206,6 +206,7 @@
     """Apply changes to lp bug tasks, based on hook / branch."""
 
     bugtask = task.lp_task
+    series = None
 
     if args.hook == "change-abandoned":
         add_change_abandoned_message(bugtask, args.change_url,
@@ -223,11 +224,13 @@
                     set_fix_committed(bugtask)
         elif args.branch.startswith('proposed/'):
             release_fixcommitted(bugtask)
-        elif args.branch.startswith('stable/'):
-            series = args.branch[7:]
+        else:
+            series = args.branch.rsplit('/', 1)[-1]
+
+        if series:
             # Look for a related task matching the series.
             for reltask in bugtask.related_tasks:
-                if (reltask.bug_target_name.endswith("/" + series) and
+                if (reltask.bug_target_name.endswith(series) and
                         reltask.status != u'Fix Released' and
                         task.needs_change('set_fix_committed')):
                     set_fix_committed(reltask)
@@ -248,10 +251,13 @@
                     task.needs_change('set_in_progress')):
                 set_in_progress(bugtask, launchpad,
                                 args.uploader, args.change_url)
-        elif args.branch.startswith('stable/'):
-            series = args.branch[7:]
+        else:
+            series = args.branch.rsplit('/', 1)[-1]
+
+        if series:
+            # Look for a related task matching the series.
             for reltask in bugtask.related_tasks:
-                if (reltask.bug_target_name.endswith("/" + series) and
+                if (reltask.bug_target_name.endswith(series) and
                         task.needs_change('set_in_progress') and
                         reltask.status not in [u'Fix Committed',
                                                u'Fix Released']):
diff --git a/jeepyb/gerritdb.py b/jeepyb/gerritdb.py
index 767991f..3f5db66 100644
--- a/jeepyb/gerritdb.py
+++ b/jeepyb/gerritdb.py
@@ -52,7 +52,7 @@
         DB_PASS = secure_config.get("database", "password")
         DB_DB = gerrit_config.get("database", "database")
 
-        if DB_TYPE == "MYSQL":
+        if DB_TYPE.upper() == "MYSQL":
             import MySQLdb
             db_connection = MySQLdb.connect(
                 host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_DB)
diff --git a/jeepyb/projects.py b/jeepyb/projects.py
index 81db5ba..5caaa66 100644
--- a/jeepyb/projects.py
+++ b/jeepyb/projects.py
@@ -75,6 +75,13 @@
     return True
 
 
+def has_translations(project_full_name):
+    try:
+        return 'translate' in registry[project_full_name]['options']
+    except KeyError:
+        return False
+
+
 def is_direct_release(project_full_name):
     try:
         return 'direct-release' in registry[project_full_name]['options']
diff --git a/jeepyb/translations.py b/jeepyb/translations.py
new file mode 100755
index 0000000..b814c74
--- /dev/null
+++ b/jeepyb/translations.py
@@ -0,0 +1,91 @@
+# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
+#
+# 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.
+
+import json
+try:
+    from urllib.parse import urljoin
+except ImportError:
+    from urlparse import urljoin
+
+import requests
+
+
+class ZanataRestService:
+    def __init__(self, url, username, api_key, verify=False):
+        self.url = url
+        self.verify = verify
+        content_type = 'application/json;charset=utf8'
+        self.headers = {'Accept': content_type,
+                        'Content-Type': content_type,
+                        'X-Auth-User': username,
+                        'X-Auth-Token': api_key}
+
+    def _construct_url(self, url_fragment):
+        return urljoin(self.url, url_fragment)
+
+    def query(self, url_fragment):
+        request_url = self._construct_url(url_fragment)
+        try:
+            return requests.get(request_url, verify=self.verify,
+                                headers=self.headers)
+        except requests.exceptions.ConnectionError:
+            raise ValueError('Connection error')
+
+    def push(self, url_fragment, data):
+        request_url = self._construct_url(url_fragment)
+        try:
+            return requests.put(request_url, verify=self.verify,
+                                headers=self.headers, data=json.dumps(data))
+        except requests.exceptions.ConnectionError:
+            raise ValueError('Connection error')
+
+
+class TranslationProject:
+    def __init__(self, rest_service, project):
+        self.rest_service = rest_service
+        self.project = project
+
+    def is_registered(self):
+        r = self.rest_service.query('/rest/projects/p/%s' % self.project)
+        return r.status_code == 200
+
+    def has_master(self):
+        r = self.rest_service.query(
+            '/rest/projects/p/%s/iterations/i/master' % self.project)
+        return r.status_code == 200
+
+    def register_project(self):
+        project_data = {u'defaultType': u'Gettext', u'status': u'ACTIVE',
+                        u'id': self.project, u'name': self.project,
+                        u'description': self.project.title()}
+        r = self.rest_service.push('/rest/projects/p/%s' % self.project,
+                                   project_data)
+        return r.status_code in (200, 201)
+
+    def register_master_iteration(self):
+        iteration = {u'status': u'ACTIVE', u'projectType': u'Gettext',
+                     u'id': u'master'}
+        r = self.rest_service.push(
+            '/rest/projects/p/%s/iterations/i/master' % self.project,
+            iteration)
+        return r.status_code in (200, 201)
+
+    def register(self):
+        if not self.is_registered():
+            if not self.register_project():
+                raise ValueError('Failed to register project.')
+        if not self.has_master():
+            if not self.register_master_iteration():
+                raise ValueError('Failed to register master iteration.')
diff --git a/requirements.txt b/requirements.txt
index 32faa12..65d5218 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,4 +9,5 @@
 pkginfo
 PyRSS2Gen
 python-swiftclient
+requests>=2.5.2
 six>=1.7.0
diff --git a/setup.cfg b/setup.cfg
index 12e056e..937ebee 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -25,6 +25,7 @@
     notify-impact = jeepyb.cmd.notify_impact:main
     openstackwatch = jeepyb.cmd.openstackwatch:main
     process-cache = jeepyb.cmd.process_cache:main
+    register-zanata-projects = jeepyb.cmd.register_zanata_projects:main
     trivial-rebase = jeepyb.cmd.trivial_rebase:main
     update-blueprint = jeepyb.cmd.update_blueprint:main
     update-bug = jeepyb.cmd.update_bug:main
