diff --git a/lib/cinder b/lib/cinder
index d9f8d63..8b1ccd7 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -184,14 +184,7 @@
         iniset $CINDER_CONF DEFAULT use_syslog True
     fi
 
-    if is_service_enabled qpid ; then
-        iniset $CINDER_CONF DEFAULT rpc_backend cinder.openstack.common.rpc.impl_qpid
-    elif is_service_enabled zeromq; then
-        iniset $CINDER_CONF DEFAULT rpc_backend nova.openstack.common.rpc.impl_zmq
-    elif [ -n "$RABBIT_HOST" ] &&  [ -n "$RABBIT_PASSWORD" ]; then
-        iniset $CINDER_CONF DEFAULT rabbit_host $RABBIT_HOST
-        iniset $CINDER_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
-    fi
+    iniset_rpc_backend cinder $CINDER_CONF DEFAULT
 
     if [[ "$CINDER_SECURE_DELETE" == "False" ]]; then
         iniset $CINDER_CONF DEFAULT secure_delete False
diff --git a/lib/heat b/lib/heat
index 89bd44f..5b8b360 100644
--- a/lib/heat
+++ b/lib/heat
@@ -69,13 +69,7 @@
     iniset $HEAT_API_CFN_CONF DEFAULT bind_host $HEAT_API_CFN_HOST
     iniset $HEAT_API_CFN_CONF DEFAULT bind_port $HEAT_API_CFN_PORT
 
-    if is_service_enabled rabbit; then
-        iniset $HEAT_API_CFN_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
-        iniset $HEAT_API_CFN_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
-        iniset $HEAT_API_CFN_CONF DEFAULT rabbit_host $RABBIT_HOST
-    elif is_service_enabled qpid; then
-        iniset $HEAT_API_CFN_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
-    fi
+    iniset_rpc_backend heat $HEAT_API_CFN_CONF DEFAULT
 
     HEAT_API_CFN_PASTE_INI=$HEAT_CONF_DIR/heat-api-cfn-paste.ini
     cp $HEAT_DIR/etc/heat/heat-api-cfn-paste.ini $HEAT_API_CFN_PASTE_INI
@@ -98,13 +92,7 @@
     iniset $HEAT_API_CONF DEFAULT bind_host $HEAT_API_HOST
     iniset $HEAT_API_CONF DEFAULT bind_port $HEAT_API_PORT
 
-    if is_service_enabled rabbit; then
-        iniset $HEAT_API_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
-        iniset $HEAT_API_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
-        iniset $HEAT_API_CONF DEFAULT rabbit_host $RABBIT_HOST
-    elif is_service_enabled qpid; then
-        iniset $HEAT_API_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
-    fi
+    iniset_rpc_backend heat $HEAT_API_CONF DEFAULT
 
     HEAT_API_PASTE_INI=$HEAT_CONF_DIR/heat-api-paste.ini
     cp $HEAT_DIR/etc/heat/heat-api-paste.ini $HEAT_API_PASTE_INI
@@ -134,13 +122,7 @@
     iniset $HEAT_ENGINE_CONF DEFAULT sql_connection $dburl
     iniset $HEAT_ENGINE_CONF DEFAULT auth_encryption_key `hexdump -n 16 -v -e '/1 "%02x"' /dev/random`
 
-    if is_service_enabled rabbit; then
-        iniset $HEAT_ENGINE_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
-        iniset $HEAT_ENGINE_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
-        iniset $HEAT_ENGINE_CONF DEFAULT rabbit_host $RABBIT_HOST
-    elif is_service_enabled qpid; then
-        iniset $HEAT_ENGINE_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
-    fi
+    iniset_rpc_backend heat $HEAT_ENGINE_CONF DEFAULT
 
     # Cloudwatch API
     HEAT_API_CW_CONF=$HEAT_CONF_DIR/heat-api-cloudwatch.conf
@@ -151,13 +133,7 @@
     iniset $HEAT_API_CW_CONF DEFAULT bind_host $HEAT_API_CW_HOST
     iniset $HEAT_API_CW_CONF DEFAULT bind_port $HEAT_API_CW_PORT
 
-    if is_service_enabled rabbit; then
-        iniset $HEAT_API_CW_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
-        iniset $HEAT_API_CW_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
-        iniset $HEAT_API_CW_CONF DEFAULT rabbit_host $RABBIT_HOST
-    elif is_service_enabled qpid; then
-        iniset $HEAT_API_CW_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
-    fi
+    iniset_rpc_backend heat $HEAT_API_CW_CONF DEFAULT
 
     HEAT_API_CW_PASTE_INI=$HEAT_CONF_DIR/heat-api-cloudwatch-paste.ini
     cp $HEAT_DIR/etc/heat/heat-api-cloudwatch-paste.ini $HEAT_API_CW_PASTE_INI
diff --git a/lib/quantum b/lib/quantum
index 343e5a9..19df499 100644
--- a/lib/quantum
+++ b/lib/quantum
@@ -176,7 +176,7 @@
 # Set common config for all quantum server and agents.
 function configure_quantum() {
     _configure_quantum_common
-    _configure_quantum_rpc
+    iniset_rpc_backend quantum $QUANTUM_CONF DEFAULT
 
     if is_service_enabled q-svc; then
         _configure_quantum_service
@@ -596,19 +596,6 @@
     AGENT_BINARY="$QUANTUM_DIR/quantum/plugins/ryu/agent/ryu_quantum_agent.py"
 }
 
-# Quantum RPC support - must be updated prior to starting any of the services
-function _configure_quantum_rpc() {
-    iniset $QUANTUM_CONF DEFAULT control_exchange quantum
-    if is_service_enabled qpid ; then
-        iniset $QUANTUM_CONF DEFAULT rpc_backend quantum.openstack.common.rpc.impl_qpid
-    elif is_service_enabled zeromq; then
-        iniset $QUANTUM_CONF DEFAULT rpc_backend quantum.openstack.common.rpc.impl_zmq
-    elif [ -n "$RABBIT_HOST" ] &&  [ -n "$RABBIT_PASSWORD" ]; then
-        iniset $QUANTUM_CONF DEFAULT rabbit_host $RABBIT_HOST
-        iniset $QUANTUM_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
-    fi
-}
-
 # _configure_quantum_service() - Set config files for quantum service
 # It is called when q-svc is enabled.
 function _configure_quantum_service() {
diff --git a/lib/rpc_backend b/lib/rpc_backend
new file mode 100644
index 0000000..4d7f8d2
--- /dev/null
+++ b/lib/rpc_backend
@@ -0,0 +1,123 @@
+# lib/rpc_backend
+# Interface for interactig with different rpc backend
+# rpc backend settings
+
+# Dependencies:
+# ``functions`` file
+# ``RABBIT_{HOST|PASSWORD}`` must be defined when RabbitMQ is used
+
+# ``stack.sh`` calls the entry points in this order:
+#
+# check_rpc_backend
+# install_rpc_backend
+# restart_rpc_backend
+# iniset_rpc_backend
+
+# Save trace setting
+XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+# Entry Points
+# ------------
+
+# Make sure we only have one rpc backend enabled.
+# Also check the specified rpc backend is available on your platform.
+function check_rpc_backend() {
+    local rpc_backend_cnt=0
+    for svc in qpid zeromq rabbit; do
+        is_service_enabled $svc &&
+        ((rpc_backend_cnt++))
+    done
+    if [ "$rpc_backend_cnt" -gt 1 ]; then
+        echo "ERROR: only one rpc backend may be enabled,"
+        echo "       set only one of 'rabbit', 'qpid', 'zeromq'"
+        echo "       via ENABLED_SERVICES."
+    elif [ "$rpc_backend_cnt" == 0 ]; then
+        echo "ERROR: at least one rpc backend must be enabled,"
+        echo "       set one of 'rabbit', 'qpid', 'zeromq'"
+        echo "       via ENABLED_SERVICES."
+    fi
+
+    if is_service_enabled qpid && ! qpid_is_supported; then
+        echo "Qpid support is not available for this version of your distribution."
+        exit 1
+    fi
+}
+
+# install rpc backend
+function install_rpc_backend() {
+    if is_service_enabled rabbit; then
+        # Install rabbitmq-server
+        # the temp file is necessary due to LP: #878600
+        tfile=$(mktemp)
+        install_package rabbitmq-server > "$tfile" 2>&1
+        cat "$tfile"
+        rm -f "$tfile"
+    elif is_service_enabled qpid; then
+        if is_fedora; then
+            install_package qpid-cpp-server-daemon
+        elif is_ubuntu; then
+            install_package qpidd
+        else
+            exit_distro_not_supported "qpid installation"
+        fi
+    elif is_service_enabled zeromq; then
+        if is_fedora; then
+            install_package zeromq python-zmq
+        elif is_ubuntu; then
+            install_package libzmq1 python-zmq
+        elif is_suse; then
+            install_package libzmq1 python-pyzmq
+        else
+            exit_distro_not_supported "zeromq installation"
+        fi
+    fi
+}
+
+# restart the rpc backend
+function restart_rpc_backend() {
+    if is_service_enabled rabbit; then
+        # Start rabbitmq-server
+        echo_summary "Starting RabbitMQ"
+        if is_fedora || is_suse; then
+            # service is not started by default
+            restart_service rabbitmq-server
+        fi
+        # change the rabbit password since the default is "guest"
+        sudo rabbitmqctl change_password guest $RABBIT_PASSWORD
+    elif is_service_enabled qpid; then
+        echo_summary "Starting qpid"
+        restart_service qpidd
+    fi
+}
+
+# iniset cofiguration
+function iniset_rpc_backend() {
+    local package=$1
+    local file=$2
+    local section=$3
+    if is_service_enabled zeromq; then
+        iniset $file $section rpc_backend ${package}.openstack.common.rpc.impl_zmq
+    elif is_service_enabled qpid; then
+        iniset $file $section rpc_backend ${package}.openstack.common.rpc.impl_qpid
+    elif is_service_enabled rabbit; then
+        iniset $file $section rpc_backend ${package}.openstack.common.rpc.impl_kombu
+        iniset $file $section rabbit_host $RABBIT_HOST
+        iniset $file $section rabbit_password $RABBIT_PASSWORD
+    fi
+}
+
+# Check if qpid can be used on the current distro.
+# qpid_is_supported
+function qpid_is_supported() {
+    if [[ -z "$DISTRO" ]]; then
+        GetDistro
+    fi
+
+    # Qpid was introduced to Ubuntu in precise, disallow it on oneiric; it is
+    # not in openSUSE either right now.
+    ( ! ([[ "$DISTRO" = "oneiric" ]] || is_suse) )
+}
+
+# Restore xtrace
+$XTRACE
