diff --git a/lib/apache b/lib/apache
index f7255be..c0d32df 100644
--- a/lib/apache
+++ b/lib/apache
@@ -8,7 +8,6 @@
 #
 # lib/apache exports the following functions:
 #
-# - is_apache_enabled_service
 # - install_apache_wsgi
 # - config_apache_wsgi
 # - apache_site_config_for
@@ -42,23 +41,6 @@
 
 # Functions
 # ---------
-
-# is_apache_enabled_service() checks if the service(s) specified as arguments are
-# apache enabled by the user in ``APACHE_ENABLED_SERVICES`` as web front end.
-#
-# Multiple services specified as arguments are ``OR``'ed together; the test
-# is a short-circuit boolean, i.e it returns on the first match.
-#
-# Uses global ``APACHE_ENABLED_SERVICES``
-# APACHE_ENABLED_SERVICES service [service ...]
-function is_apache_enabled_service {
-    services=$@
-    for service in ${services}; do
-        [[ ,${APACHE_ENABLED_SERVICES}, =~ ,${service}, ]] && return 0
-    done
-    return 1
-}
-
 # install_apache_wsgi() - Install Apache server and wsgi module
 function install_apache_wsgi {
     # Apache installation, because we mark it NOPRIME
diff --git a/lib/keystone b/lib/keystone
index 06cd7eb..ec124cb 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -46,6 +46,9 @@
 # Example of KEYSTONE_EXTENSIONS=oauth1,federation
 KEYSTONE_EXTENSIONS=${KEYSTONE_EXTENSIONS:-}
 
+# Toggle for deploying Keystone under HTTPD + mod_wsgi
+KEYSTONE_USE_MOD_WSGI=${KEYSTONE_USE_MOD_WSGI:-False}
+
 # Select the backend for Keystone's service catalog
 KEYSTONE_CATALOG_BACKEND=${KEYSTONE_CATALOG_BACKEND:-sql}
 KEYSTONE_CATALOG=$KEYSTONE_CONF_DIR/default_catalog.templates
@@ -112,6 +115,7 @@
     sudo rm -f $KEYSTONE_WSGI_DIR/*.wsgi
     disable_apache_site keystone
     sudo rm -f $(apache_site_config_for keystone)
+    restart_apache_server
 }
 
 # _config_keystone_apache_wsgi() - Set WSGI config files of Keystone
@@ -265,11 +269,11 @@
     fi
 
     # Format logging
-    if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ] &&  ! is_apache_enabled_service key ; then
+    if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ] && [ "$KEYSTONE_USE_MOD_WSGI" == "False" ]  ; then
         setup_colorized_logging $KEYSTONE_CONF DEFAULT
     fi
 
-    if is_apache_enabled_service key; then
+    if [ "$KEYSTONE_USE_MOD_WSGI" == "True" ]; then
         iniset $KEYSTONE_CONF DEFAULT debug "True"
         # Eliminate the %(asctime)s.%(msecs)03d from the log format strings
         iniset $KEYSTONE_CONF DEFAULT logging_context_format_string "%(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s"
@@ -442,7 +446,7 @@
     fi
     git_clone $KEYSTONE_REPO $KEYSTONE_DIR $KEYSTONE_BRANCH
     setup_develop $KEYSTONE_DIR
-    if is_apache_enabled_service key; then
+    if [ "$KEYSTONE_USE_MOD_WSGI" == "True" ]; then
         install_apache_wsgi
     fi
 }
@@ -455,7 +459,7 @@
         service_port=$KEYSTONE_SERVICE_PORT_INT
     fi
 
-    if is_apache_enabled_service key; then
+    if [ "$KEYSTONE_USE_MOD_WSGI" == "True" ]; then
         restart_apache_server
         screen_it key "cd $KEYSTONE_DIR && sudo tail -f /var/log/$APACHE_NAME/keystone"
     else
diff --git a/lib/swift b/lib/swift
index cf1c052..b01dd95 100644
--- a/lib/swift
+++ b/lib/swift
@@ -118,6 +118,8 @@
 # Tell Tempest this project is present
 TEMPEST_SERVICES+=,swift
 
+# Toggle for deploying Keystone under HTTPD + mod_wsgi
+SWIFT_USE_MOD_WSGI=${SWIFT_USE_MOD_WSGI:-False}
 
 # Functions
 # ---------
@@ -139,7 +141,7 @@
         rm ${SWIFT_DISK_IMAGE}
     fi
     rm -rf ${SWIFT_DATA_DIR}/run/
-    if is_apache_enabled_service swift; then
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
         _cleanup_swift_apache_wsgi
     fi
 }
@@ -470,7 +472,7 @@
         sudo killall -HUP rsyslogd
     fi
 
-    if is_apache_enabled_service swift; then
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
         _config_swift_apache_wsgi
     fi
 }
@@ -621,7 +623,7 @@
 function install_swift {
     git_clone $SWIFT_REPO $SWIFT_DIR $SWIFT_BRANCH
     setup_develop $SWIFT_DIR
-    if is_apache_enabled_service swift; then
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
         install_apache_wsgi
     fi
 }
@@ -645,7 +647,7 @@
         start_service rsyncd
     fi
 
-    if is_apache_enabled_service swift; then
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
         restart_apache_server
         swift-init --run-dir=${SWIFT_DATA_DIR}/run rest start
         screen_it s-proxy "cd $SWIFT_DIR && sudo tail -f /var/log/$APACHE_NAME/proxy-server"
@@ -682,7 +684,7 @@
 # stop_swift() - Stop running processes (non-screen)
 function stop_swift {
 
-    if is_apache_enabled_service swift; then
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
         swift-init --run-dir=${SWIFT_DATA_DIR}/run rest stop && return 0
     fi
 
