diff --git a/tools/rfc.sh b/tools/rfc.sh
new file mode 100755
index 0000000..ed287e8
--- /dev/null
+++ b/tools/rfc.sh
@@ -0,0 +1,136 @@
+#!/bin/sh -e
+# Copyright (c) 2010-2011 Gluster, Inc. <http://www.gluster.com> 
+# This initial version of this file was taken from the source tree
+# of GlusterFS. It was not directly attributed, but is assumed to be
+# Copyright (c) 2010-2011 Gluster, Inc and release GPLv3
+# Subsequent modifications are Copyright (c) 2011 OpenStack, LLC.
+#
+# GlusterFS is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3 of the License,
+# or (at your option) any later version.
+#
+# GlusterFS is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+
+branch="master";
+
+set_hooks_commit_msg()
+{
+    top_dir=`git rev-parse --show-toplevel`
+    f="${top_dir}/.git/hooks/commit-msg";
+    u="https://review.openstack.org/tools/hooks/commit-msg";
+
+    if [ -x "$f" ]; then
+        return;
+    fi
+
+    curl -o $f $u || wget -O $f $u;
+
+    chmod +x $f;
+
+    GIT_EDITOR=true git commit --amend
+}
+
+add_remote()
+{
+    username=$1
+    project=$2
+
+    echo "No remote set, testing ssh://$username@review.openstack.org:29418"
+    if ssh -p29418 -o StrictHostKeyChecking=no $username@review.openstack.org gerrit ls-projects >/dev/null 2>&1
+    then
+        echo "$username@review.openstack.org:29418 worked."
+        echo "Creating a git remote called gerrit that maps to:"
+        echo "  ssh://$username@review.openstack.org:29418/$project"
+        git remote add gerrit ssh://$username@review.openstack.org:29418/$project
+        return 0
+    fi
+    return 1
+}
+
+check_remote()
+{
+    if ! git remote | grep gerrit >/dev/null 2>&1
+    then
+        origin_project=`git remote show origin | grep 'Fetch URL' | perl -nle '@fields = split(m|[:/]|); $len = $#fields; print $fields[$len-1], "/", $fields[$len];'`
+        if add_remote $USERNAME $origin_project
+        then
+            return 0
+        else
+            echo "Your local name doesn't work on Gerrit."
+            echo -n "Enter Gerrit username (same as launchpad): "
+            read gerrit_user
+            if add_remote $gerrit_user $origin_project
+            then
+                return 0
+            else
+                echo "Can't infer where gerrit is - please set a remote named"
+                echo "gerrit manually and then try again."
+                echo
+                echo "For more information, please see:"
+                echo "\thttp://wiki.openstack.org/GerritWorkflow"
+                exit 1
+            fi
+        fi
+    fi
+}
+
+rebase_changes()
+{
+    git fetch;
+
+    GIT_EDITOR=true git rebase -i origin/$branch || exit $?;
+}
+
+
+assert_diverge()
+{
+    if ! git diff origin/$branch..HEAD | grep -q .
+    then
+	echo "No changes between the current branch and origin/$branch."
+	exit 1
+    fi
+}
+
+
+main()
+{
+    set_hooks_commit_msg;
+
+    check_remote;
+
+    rebase_changes;
+
+    assert_diverge;
+
+    bug=$(git show --format='%s %b' | perl -nle 'if (/\b([Bb]ug|[Ll][Pp])\s*[#:]?\s*(\d+)/) {print "$2"; exit}')
+
+    bp=$(git show --format='%s %b' | perl -nle 'if (/\b([Bb]lue[Pp]rint|[Bb][Pp])\s*[#:]?\s*([0-9a-zA-Z-_]+)/) {print "$2"; exit}')
+
+    if [ "$DRY_RUN" = 1 ]; then
+        drier='echo -e Please use the following command to send your commits to review:\n\n'
+    else
+        drier=
+    fi
+
+    local_branch=`git branch | grep -Ei "\* (.*)" | cut -f2 -d' '`
+    if [ -z "$bug" ]; then
+	if [ -z "$bp" ]; then
+            $drier git push gerrit HEAD:refs/for/$branch/$local_branch;
+	else
+	    $drier git push gerrit HEAD:refs/for/$branch/bp/$bp;
+	fi
+    else
+        $drier git push gerrit HEAD:refs/for/$branch/bug/$bug;
+    fi
+}
+
+main "$@"
