diff --git a/nvm.sh b/nvm.sh
index 9980515..ef593cb 100755
--- a/nvm.sh
+++ b/nvm.sh
@@ -68,13 +68,16 @@
 
 # Make zsh glob matching behave same as bash
 # This fixes the "zsh: no matches found" errors
+if [ -z "${NVM_CD_FLAGS-}"]; then
+  export NVM_CD_FLAGS=''
+fi
 if nvm_has "unsetopt"; then
   unsetopt nomatch 2>/dev/null
   NVM_CD_FLAGS="-q"
 fi
 
 # Auto detect the NVM_DIR when not set
-if [ -z "$NVM_DIR" ]; then
+if [ -z "${NVM_DIR-}" ]; then
   if [ -n "$BASH_SOURCE" ]; then
     NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}"
   fi
@@ -85,7 +88,7 @@
 
 
 # Setup mirror location if not already set
-if [ -z "$NVM_NODEJS_ORG_MIRROR" ]; then
+if [ -z "${NVM_NODEJS_ORG_MIRROR-}" ]; then
   export NVM_NODEJS_ORG_MIRROR="https://nodejs.org/dist"
 fi
 
@@ -529,7 +532,7 @@
 
 nvm_ls() {
   local PATTERN
-  PATTERN="$1"
+  PATTERN="${1-}"
   local VERSIONS
   VERSIONS=''
   if [ "$PATTERN" = 'current' ]; then
@@ -659,7 +662,7 @@
     fi
   fi
 
-  if [ "$NVM_ADD_SYSTEM" = true ]; then
+  if [ "${NVM_ADD_SYSTEM-}" = true ]; then
     if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then
       VERSIONS="$VERSIONS$(command printf '\n%s' 'system')"
     elif [ "$PATTERN" = 'system' ]; then
@@ -700,6 +703,7 @@
   local TYPE
   TYPE="$1"
   local PREFIX
+  PREFIX=''
   case "$TYPE-$2" in
     iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
     node-std) PREFIX='' ;;
@@ -835,7 +839,7 @@
   local NVM_ADD_PREFIX_COMMAND
   local LAST_TWO
   case "$NVM_IMPLICIT" in
-    "$NVM_IOJS_PREFIX" | "$NVM_IOJS_RC_PREFIX")
+    "$NVM_IOJS_PREFIX")
       NVM_COMMAND="nvm_ls_remote_iojs"
       NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix"
       if [ "_$1" = "_local" ]; then
@@ -1146,7 +1150,7 @@
   local REINSTALL_PACKAGES_FROM
   REINSTALL_PACKAGES_FROM="$2"
 
-  if nvm_is_iojs_version "$PREFIXED_VERSION"; then
+  if nvm_is_iojs_version "$VERSION"; then
     echo 'nvm_install_node_binary does not allow an iojs-prefixed version.' >&2
     return 10
   fi
@@ -1201,11 +1205,11 @@
 }
 
 nvm_get_make_jobs() {
-  if nvm_is_natural_num "$1"; then
+  if nvm_is_natural_num "${1-}"; then
     NVM_MAKE_JOBS="$1"
     echo "number of \`make\` jobs: $NVM_MAKE_JOBS"
     return
-  elif [ -n "$1" ]; then
+  elif [ -n "${1-}" ]; then
     unset NVM_MAKE_JOBS
     echo >&2 "$1 is invalid for number of \`make\` jobs, must be a natural number"
   fi
@@ -1290,9 +1294,9 @@
     command tar -xzf "$tmptarball" -C "$tmpdir" && \
     cd "$tmpdir/node-$VERSION" && \
     ./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \
-    $make -j $NVM_MAKE_JOBS $MAKE_CXX && \
+    $make -j $NVM_MAKE_JOBS ${MAKE_CXX-} && \
     command rm -f "$VERSION_PATH" 2>/dev/null && \
-    $make -j $NVM_MAKE_JOBS $MAKE_CXX install
+    $make -j $NVM_MAKE_JOBS ${MAKE_CXX-} install
     )
   then
     if ! nvm_has "npm" ; then
@@ -1371,14 +1375,14 @@
     return 2
   fi
 
-  if [ -n "$PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then
+  if [ -n "${PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then
     nvm deactivate >/dev/null 2>&1
     echo >&2 "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\""
     echo >&2 "Run \`unset PREFIX\` to unset it."
     return 3
   fi
 
-  if [ -n "$NPM_CONFIG_PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then
+  if [ -n "${NPM_CONFIG_PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then
     nvm deactivate >/dev/null 2>&1
     echo >&2 "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\""
     echo >&2 "Run \`unset NPM_CONFIG_PREFIX\` to unset it."
@@ -1702,6 +1706,9 @@
         fi
       fi
       if [ "$NVM_INSTALL_SUCCESS" != true ]; then
+        if [ -z "${NVM_MAKE_JOBS-}" ]; then
+          nvm_get_make_jobs
+        fi
         if [ "$NVM_IOJS" != true ] &&  [ "$NVM_NODE_MERGED" != true ]; then
           if nvm_install_node_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS"; then
             NVM_INSTALL_SUCCESS=true
@@ -1794,18 +1801,22 @@
         echo "$NVM_DIR/*/bin removed from \$PATH"
       fi
 
-      NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
-      if [ "_$MANPATH" = "_$NEWPATH" ]; then
-        echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2
-      else
-        export MANPATH="$NEWPATH"
-        echo "$NVM_DIR/*/share/man removed from \$MANPATH"
+      if [ -n "${MANPATH-}" ]; then
+        NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
+        if [ "_$MANPATH" = "_$NEWPATH" ]; then
+          echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2
+        else
+          export MANPATH="$NEWPATH"
+          echo "$NVM_DIR/*/share/man removed from \$MANPATH"
+        fi
       fi
 
-      NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
-      if [ "_$NODE_PATH" != "_$NEWPATH" ]; then
-        export NODE_PATH="$NEWPATH"
-        echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
+      if [ -n "${NODE_PATH-}" ]; then
+        NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
+        if [ "_$NODE_PATH" != "_$NEWPATH" ]; then
+          export NODE_PATH="$NEWPATH"
+          echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
+        fi
       fi
     ;;
     "use" )
@@ -1898,7 +1909,7 @@
       hash -r
       export NVM_PATH="$NVM_VERSION_DIR/lib/node"
       export NVM_BIN="$NVM_VERSION_DIR/bin"
-      if [ "$NVM_SYMLINK_CURRENT" = true ]; then
+      if [ "${NVM_SYMLINK_CURRENT-}" = true ]; then
         command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
       fi
       local NVM_USE_OUTPUT
@@ -2057,7 +2068,7 @@
     "ls" | "list" )
       local NVM_LS_OUTPUT
       local NVM_LS_EXIT_CODE
-      NVM_LS_OUTPUT=$(nvm_ls "$2")
+      NVM_LS_OUTPUT=$(nvm_ls "${2-}")
       NVM_LS_EXIT_CODE=$?
       nvm_print_versions "$NVM_LS_OUTPUT"
       if [ $# -eq 1 ]; then
@@ -2067,7 +2078,7 @@
     ;;
     "ls-remote" | "list-remote" )
       local PATTERN
-      PATTERN="$2"
+      PATTERN="${2-}"
       local NVM_IOJS_PREFIX
       NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
       local NVM_NODE_PREFIX
@@ -2172,7 +2183,7 @@
       command mkdir -p "$NVM_ALIAS_DIR"
       if [ $# -le 2 ]; then
         local DEST
-        for ALIAS_PATH in "$NVM_ALIAS_DIR"/"$2"*; do
+        for ALIAS_PATH in "$NVM_ALIAS_DIR"/"${2-}"*; do
           ALIAS="$(command basename "$ALIAS_PATH")"
           DEST="$(nvm_alias "$ALIAS" 2> /dev/null)"
           if [ -n "$DEST" ]; then
@@ -2202,7 +2213,7 @@
         done
         return
       fi
-      if [ -z "$3" ]; then
+      if [ -z "${3-}" ]; then
         command rm -f "$NVM_ALIAS_DIR/$2"
         echo "$2 -> *poof*"
         return
