diff --git a/jeepyb/cmd/update_bug.py b/jeepyb/cmd/update_bug.py
index fdf2b5a..f714e18 100644
--- a/jeepyb/cmd/update_bug.py
+++ b/jeepyb/cmd/update_bug.py
@@ -59,7 +59,8 @@
                               submitter, branch, git_log, related=False):
     subject = '%s merged to %s (%s)' % (fix_or_related_fix(related),
                                         u.short_project_name(project), branch)
-    git_url = 'http://github.com/%s/commit/%s' % (project, commit)
+    git_url = 'https://git.openstack.org/cgit/%s/commit/?id=%s' % (project,
+                                                                   commit)
     body = '''Reviewed:  %s
 Committed: %s
 Submitter: %s
diff --git a/jeepyb/cmd/welcome_message.py b/jeepyb/cmd/welcome_message.py
new file mode 100644
index 0000000..31df892
--- /dev/null
+++ b/jeepyb/cmd/welcome_message.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+#
+# 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.
+
+# This is designed to be called by a gerrit hook.  It searched new
+# patchsets for those from a first time commiter, then posts a helpful
+# message welcoming them to the community and explaining the review process
+#
+# For example, this might be called as follows
+# python welcome_message.py -change Ia1fea1eab3976f1a9cb89ceb3ce1c6c6a7e79c42
+# --change-url \ https://review-dev.openstack.org/81 --project gtest-org/test \
+# --branch master --uploader User A. Example (user@example.com) --commit \
+# 05508ae633852469d2fd7786a3d6f1d06f87055b --patchset 1 patchset-merged user \
+# ~/.ssh/id_rsa
+# and if this was the first commit from "user@example.com", a message
+# would be posted on review 81.
+
+
+import argparse
+import logging
+import paramiko
+
+import jeepyb.gerritdb
+
+BASE_DIR = '/home/gerrit2/review_site'
+
+logger = logging.getLogger('welcome_reviews')
+logger.setLevel(logging.INFO)
+
+
+def is_newbie(uploader):
+    """Determine if the owner of the patch is a first-timer."""
+
+    # Retrieve uploader email
+    try:
+        searchkey = uploader[uploader.rindex("(") + 1:-1]
+    except ValueError:
+        logger.info('Couldnt get email for %s', uploader)
+        return False
+
+    # this query looks for all distinct patchsets for the given
+    # user. If there's only 1, they're a first-timer.
+    query = """SELECT COUNT(DISTINCT p.change_id + p.patch_set_id)
+               FROM patch_sets p, account_external_ids a
+               WHERE a.email_address = %s
+               AND a.account_id = p.uploader_account_id;"""
+
+    cursor = jeepyb.gerritdb.connect().cursor()
+    cursor.execute(query, searchkey)
+    data = cursor.fetchone()
+    if data:
+        if data[0] == "1":
+            return True
+        else:
+            return False
+
+
+def post_message(change_id, gerrit_user, gerrit_ssh_key):
+    """Post a welcome message on the patch set specified by the change_id."""
+
+    welcome_text = """Thank you for your first contribution to OpenStack.
+
+    Your patch will now be tested automatically by OpenStack testing frameworks
+    and once the automatic tests pass, it will be reviewed by other friendly
+    developers. They will give you feedback and may require you to refine it.
+
+    People seldom get their patch approved on the first try, so don't be
+    concerned if requested to make corrections. Feel free to modify your patch
+    and resubmit a new change-set.
+
+    Patches usually take 3 to 7 days to be reviewed so be patient and be
+    available on IRC to ask and answer questions about your work. The more you
+    participate in the community the more rewarding it is for you. You may also
+    notice that the more you get to know people and get to be known, the faster
+    your patches will be reviewed and eventually approved. Get to know others
+    and become known by doing code reviews: anybody can do it, and it's a
+    great way to learn the code base.
+
+    Thanks again for supporting OpenStack, we look forward to working with you.
+
+    IRC: https://wiki.openstack.org/wiki/IRC
+    Workflow: https://wiki.openstack.org/wiki/Gerrit_Workflow
+    """
+    # get the patch_id
+    query = """SELECT change_id FROM patch_sets WHERE change_id = %s;"""
+
+    cursor = jeepyb.gerritdb.connect().cursor()
+    cursor.execute(query, change_id)
+    data = cursor.fetchone()
+    if data[0]:
+        # post the above message, using ssh.
+        command = ('gerrit review '
+                   '--message="{message}" {patch_id}').format(
+                       message=welcome_text,
+                       patch_id=data)
+        logger.info('Welcoming: %s', data[0])
+        ssh = paramiko.SSHClient()
+        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+        ssh.connect('localhost', username=gerrit_user,
+                    key_filename=gerrit_ssh_key, port=29418)
+        stdin, stdout, stderr = ssh.exec_command(command)
+
+    else:
+        logger.info('Unable to find patch_id for change_id=%s', change_id)
+
+
+def main():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('hook')
+    # common
+    parser.add_argument('--change', default=None)
+    parser.add_argument('--change-url', default=None)
+    parser.add_argument('--project', default=None)
+    parser.add_argument('--branch', default=None)
+    parser.add_argument('--commit', default=None)
+    # change-merged
+    parser.add_argument('--submitter', default=None)
+    # patchset-created
+    parser.add_argument('--uploader', default=None)
+    parser.add_argument('--patchset', default=None)
+    # for Welcome Message
+    parser.add_argument('user', help='The gerrit admin user')
+    parser.add_argument('ssh_key', help='The gerrit admin SSH key file')
+
+    args = parser.parse_args()
+
+    # they're a first-timer, post the message on 1st patchset
+    if is_newbie(args.uploader) and args.patchset == 1:
+        post_message(args.change, args.user, args.ssh_key)
+
+if __name__ == "__main__":
+    main()
