diff --git a/functions-common b/functions-common
index d92e39c..79003fc 100644
--- a/functions-common
+++ b/functions-common
@@ -39,59 +39,76 @@
 # Append a new option in an ini file without replacing the old value
 # iniadd config-file section option value1 value2 value3 ...
 function iniadd() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local file=$1
     local section=$2
     local option=$3
     shift 3
     local values="$(iniget_multiline $file $section $option) $@"
     iniset_multiline $file $section $option $values
+    $xtrace
 }
 
 # Comment an option in an INI file
 # inicomment config-file section option
 function inicomment() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local file=$1
     local section=$2
     local option=$3
     sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=.*$\)|#\1|" "$file"
+    $xtrace
 }
 
 # Get an option from an INI file
 # iniget config-file section option
 function iniget() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local file=$1
     local section=$2
     local option=$3
     local line
     line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" "$file")
     echo ${line#*=}
+    $xtrace
 }
 
 # Get a multiple line option from an INI file
 # iniget_multiline config-file section option
 function iniget_multiline() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local file=$1
     local section=$2
     local option=$3
     local values
     values=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { s/^$option[ \t]*=[ \t]*//gp; }" "$file")
     echo ${values}
+    $xtrace
 }
 
 # Determinate is the given option present in the INI file
 # ini_has_option config-file section option
 function ini_has_option() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local file=$1
     local section=$2
     local option=$3
     local line
     line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" "$file")
+    $xtrace
     [ -n "$line" ]
 }
 
 # Set an option in an INI file
 # iniset config-file section option value
 function iniset() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local file=$1
     local section=$2
     local option=$3
@@ -113,11 +130,14 @@
         # Replace it
         sed -i -e '/^\['${section}'\]/,/^\[.*\]/ s'${sep}'^\('${option}'[ \t]*=[ \t]*\).*$'${sep}'\1'"${value}"${sep} "$file"
     fi
+    $xtrace
 }
 
 # Set a multiple line option in an INI file
 # iniset_multiline config-file section option value1 value2 valu3 ...
 function iniset_multiline() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local file=$1
     local section=$2
     local option=$3
@@ -142,15 +162,19 @@
 $option = $v
 " "$file"
     done
+    $xtrace
 }
 
 # Uncomment an option in an INI file
 # iniuncomment config-file section option
 function iniuncomment() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local file=$1
     local section=$2
     local option=$3
     sed -i -e "/^\[$section\]/,/^\[.*\]/ s|[^ \t]*#[ \t]*\($option[ \t]*=.*$\)|\1|" "$file"
+    $xtrace
 }
 
 # Normalize config values to True or False
@@ -158,6 +182,8 @@
 # Accepts as True: 1 yes Yes YES true True TRUE
 # VAR=$(trueorfalse default-value test-value)
 function trueorfalse() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local default=$1
     local testval=$2
 
@@ -165,6 +191,7 @@
     [[ "0 no No NO false False FALSE" =~ "$testval" ]] && { echo "False"; return; }
     [[ "1 yes Yes YES true True TRUE" =~ "$testval" ]] && { echo "True"; return; }
     echo "$default"
+    $xtrace
 }
 
 
@@ -675,9 +702,14 @@
 # Uses globals ``OFFLINE``, ``*_proxy``
 # apt_get operation package [package ...]
 function apt_get() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
+
     [[ "$OFFLINE" = "True" || -z "$@" ]] && return
     local sudo="sudo"
     [[ "$(id -u)" = "0" ]] && sudo="env"
+
+    $xtrace
     $sudo DEBIAN_FRONTEND=noninteractive \
         http_proxy=$http_proxy https_proxy=$https_proxy \
         no_proxy=$no_proxy \
@@ -695,6 +727,8 @@
 # - ``# dist:DISTRO`` or ``dist:DISTRO1,DISTRO2`` limits the selection
 #   of the package to the distros listed.  The distro names are case insensitive.
 function get_packages() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local services=$@
     local package_dir=$(_get_package_dir)
     local file_to_parse
@@ -706,6 +740,7 @@
     fi
     if [[ -z "$DISTRO" ]]; then
         GetDistro
+        echo "Found Distro $DISTRO"
     fi
     for service in ${services//,/ }; do
         # Allow individual services to specify dependencies
@@ -797,23 +832,30 @@
         done
         IFS=$OIFS
     done
+    $xtrace
 }
 
 # Distro-agnostic package installer
 # install_package package [package ...]
 function install_package() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     if is_ubuntu; then
         # if there are transient errors pulling the updates, that's fine. It may
         # be secondary repositories that we don't really care about.
         [[ "$NO_UPDATE_REPOS" = "True" ]] || apt_get update || /bin/true
         NO_UPDATE_REPOS=True
 
+        $xtrace
         apt_get install "$@"
     elif is_fedora; then
+        $xtrace
         yum_install "$@"
     elif is_suse; then
+        $xtrace
         zypper_install "$@"
     else
+        $xtrace
         exit_distro_not_supported "installing packages"
     fi
 }
@@ -1092,7 +1134,13 @@
 # ``TRACK_DEPENDS``, ``*_proxy``
 # pip_install package [package ...]
 function pip_install {
-    [[ "$OFFLINE" = "True" || -z "$@" ]] && return
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
+    if [[ "$OFFLINE" = "True" || -z "$@" ]]; then
+        $xtrace
+        return
+    fi
+
     if [[ -z "$os_PACKAGE" ]]; then
         GetOSVersion
     fi
@@ -1121,6 +1169,7 @@
     # this problem. See https://github.com/pypa/pip/issues/709
     local pip_build_tmp=$(mktemp --tmpdir -d pip-build.XXXXX)
 
+    $xtrace
     $SUDO_PIP PIP_DOWNLOAD_CACHE=${PIP_DOWNLOAD_CACHE:-/var/cache/pip} \
         HTTP_PROXY=$http_proxy \
         HTTPS_PROXY=$https_proxy \
@@ -1235,32 +1284,36 @@
 # Uses global ``ENABLED_SERVICES``
 # is_service_enabled service [service ...]
 function is_service_enabled() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
+    local enabled=1
     services=$@
     for service in ${services}; do
-        [[ ,${ENABLED_SERVICES}, =~ ,${service}, ]] && return 0
+        [[ ,${ENABLED_SERVICES}, =~ ,${service}, ]] && enabled=0
 
         # Look for top-level 'enabled' function for this service
         if type is_${service}_enabled >/dev/null 2>&1; then
             # A function exists for this service, use it
             is_${service}_enabled
-            return $?
+            enabled=$?
         fi
 
         # TODO(dtroyer): Remove these legacy special-cases after the is_XXX_enabled()
         #                are implemented
 
-        [[ ${service} == n-cell-* && ${ENABLED_SERVICES} =~ "n-cell" ]] && return 0
-        [[ ${service} == "nova" && ${ENABLED_SERVICES} =~ "n-" ]] && return 0
-        [[ ${service} == "cinder" && ${ENABLED_SERVICES} =~ "c-" ]] && return 0
-        [[ ${service} == "ceilometer" && ${ENABLED_SERVICES} =~ "ceilometer-" ]] && return 0
-        [[ ${service} == "glance" && ${ENABLED_SERVICES} =~ "g-" ]] && return 0
-        [[ ${service} == "ironic" && ${ENABLED_SERVICES} =~ "ir-" ]] && return 0
-        [[ ${service} == "neutron" && ${ENABLED_SERVICES} =~ "q-" ]] && return 0
-        [[ ${service} == "trove" && ${ENABLED_SERVICES} =~ "tr-" ]] && return 0
-        [[ ${service} == "swift" && ${ENABLED_SERVICES} =~ "s-" ]] && return 0
-        [[ ${service} == s-* && ${ENABLED_SERVICES} =~ "swift" ]] && return 0
+        [[ ${service} == n-cell-* && ${ENABLED_SERVICES} =~ "n-cell" ]] && enabled=0
+        [[ ${service} == "nova" && ${ENABLED_SERVICES} =~ "n-" ]] && enabled=0
+        [[ ${service} == "cinder" && ${ENABLED_SERVICES} =~ "c-" ]] && enabled=0
+        [[ ${service} == "ceilometer" && ${ENABLED_SERVICES} =~ "ceilometer-" ]] && enabled=0
+        [[ ${service} == "glance" && ${ENABLED_SERVICES} =~ "g-" ]] && enabled=0
+        [[ ${service} == "ironic" && ${ENABLED_SERVICES} =~ "ir-" ]] && enabled=0
+        [[ ${service} == "neutron" && ${ENABLED_SERVICES} =~ "q-" ]] && enabled=0
+        [[ ${service} == "trove" && ${ENABLED_SERVICES} =~ "tr-" ]] && enabled=0
+        [[ ${service} == "swift" && ${ENABLED_SERVICES} =~ "s-" ]] && enabled=0
+        [[ ${service} == s-* && ${ENABLED_SERVICES} =~ "swift" ]] && enabled=0
     done
-    return 1
+    $xtrace
+    return $enabled
 }
 
 # Toggle enable/disable_service for services that must run exclusive of each other
@@ -1286,6 +1339,8 @@
 # Only run the command if the target file (the last arg) is not on an
 # NFS filesystem.
 function _safe_permission_operation() {
+    local xtrace=$(set +o | grep xtrace)
+    set +o xtrace
     local args=( $@ )
     local last
     local sudo_cmd
@@ -1299,6 +1354,7 @@
     fi
 
     if is_nfs_directory "$dir_to_check" ; then
+        $xtrace
         return 0
     fi
 
@@ -1308,6 +1364,7 @@
         sudo_cmd="sudo"
     fi
 
+    $xtrace
     $sudo_cmd $@
 }
 
