diff --git a/functions b/functions
index 445af5f..95ae239 100644
--- a/functions
+++ b/functions
@@ -57,15 +57,12 @@
 # die $LINENO "message"
 function die() {
     local exitcode=$?
+    set +o xtrace
+    local line=$1; shift
     if [ $exitcode == 0 ]; then
         exitcode=1
     fi
-    set +o xtrace
-    local msg="[ERROR] $0:$1 $2"
-    echo $msg 1>&2;
-    if [[ -n ${SCREEN_LOGDIR} ]]; then
-        echo $msg >> "${SCREEN_LOGDIR}/error.log"
-    fi
+    err $line "$*"
     exit $exitcode
 }
 
@@ -75,14 +72,49 @@
 # NOTE: env-var is the variable name without a '$'
 # die_if_not_set $LINENO env-var "message"
 function die_if_not_set() {
-    (
-        local exitcode=$?
-        set +o xtrace
-        local evar=$2; shift
-        if ! is_set $evar || [ $exitcode != 0 ]; then
-            die $@
-        fi
-    )
+    local exitcode=$?
+    FXTRACE=$(set +o | grep xtrace)
+    set +o xtrace
+    local line=$1; shift
+    local evar=$1; shift
+    if ! is_set $evar || [ $exitcode != 0 ]; then
+        die $line "$*"
+    fi
+    $FXTRACE
+}
+
+
+# Prints line number and "message" in error format
+# err $LINENO "message"
+function err() {
+    local exitcode=$?
+    errXTRACE=$(set +o | grep xtrace)
+    set +o xtrace
+    local msg="[ERROR] $0:$1 $2"
+    echo $msg 1>&2;
+    if [[ -n ${SCREEN_LOGDIR} ]]; then
+        echo $msg >> "${SCREEN_LOGDIR}/error.log"
+    fi
+    $errXTRACE
+    return $exitcode
+}
+
+
+# Checks an environment variable is not set or has length 0 OR if the
+# exit code is non-zero and prints "message"
+# NOTE: env-var is the variable name without a '$'
+# err_if_not_set $LINENO env-var "message"
+function err_if_not_set() {
+    local exitcode=$?
+    errinsXTRACE=$(set +o | grep xtrace)
+    set +o xtrace
+    local line=$1; shift
+    local evar=$1; shift
+    if ! is_set $evar || [ $exitcode != 0 ]; then
+        err $line "$*"
+    fi
+    $errinsXTRACE
+    return $exitcode
 }
 
 
@@ -538,6 +570,7 @@
     sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=.*$\)|#\1|" "$file"
 }
 
+
 # Uncomment an option in an INI file
 # iniuncomment config-file section option
 function iniuncomment() {
@@ -559,6 +592,7 @@
     echo ${line#*=}
 }
 
+
 # Determinate is the given option present in the INI file
 # ini_has_option config-file section option
 function ini_has_option() {
@@ -570,6 +604,7 @@
     [ -n "$line" ]
 }
 
+
 # Set an option in an INI file
 # iniset config-file section option value
 function iniset() {
@@ -592,6 +627,7 @@
     fi
 }
 
+
 # Get a multiple line option from an INI file
 # iniget_multiline config-file section option
 function iniget_multiline() {
@@ -603,6 +639,7 @@
     echo ${values}
 }
 
+
 # Set a multiple line option in an INI file
 # iniset_multiline config-file section option value1 value2 valu3 ...
 function iniset_multiline() {
@@ -632,6 +669,7 @@
     done
 }
 
+
 # Append a new option in an ini file without replacing the old value
 # iniadd config-file section option value1 value2 value3 ...
 function iniadd() {
@@ -643,6 +681,17 @@
     iniset_multiline $file $section $option $values
 }
 
+# Find out if a process exists by partial name.
+# is_running name
+function is_running() {
+    local name=$1
+    ps auxw | grep -v grep | grep ${name} > /dev/null
+    RC=$?
+    # some times I really hate bash reverse binary logic
+    return $RC
+}
+
+
 # is_service_enabled() checks if the service(s) specified as arguments are
 # enabled by the user in ``ENABLED_SERVICES``.
 #
