diff --git a/templates/TEMPLATE.sh.tpl b/templates/TEMPLATE.sh.tpl
index 4df31c29bc173d2a0dab9b4646346eb258eb075b..a30c70d8a5c6652f5de29c779d6ed12ce9a10e4f 100644
--- a/templates/TEMPLATE.sh.tpl
+++ b/templates/TEMPLATE.sh.tpl
@@ -34,7 +34,22 @@ function usage() {
     cat <<EOF
 \$program \$version, ${2:short description }
 
-Usage: \$program [OPTIONS] ${3:arguments}
+Usage:
+  \$program [OPTIONS] ${3:arguments}
+EOF
+}
+
+function short_help() {
+    cat <<EOF
+\$(usage)
+
+For more details see \$program -h.
+EOF
+}
+
+function long_help() {
+    cat <<EOF
+\$(usage)
 
 \$program ${4:long description}
 
@@ -47,8 +62,7 @@ Usage: \$program [OPTIONS] ${3:arguments}
     -v
         Show script version and licensing information.
     -h
-        Show usage help.
-
+        Show full help.
 
 Please report bugs and send feature requests to <branko@majic.rs>.
 EOF
@@ -81,7 +95,7 @@ EOF
 # Set-up colours for message printing if we're not piping and terminal is
 # capable of outputting the colors.
 _color_terminal=\$(tput colors 2>&1)
-if [[ -t 1 ]] && (( \${_color_terminal} > 0 )); then
+if [[ -t 1 ]] && (( _color_terminal > 0 )); then
     _text_bold=\$(tput bold)
     _text_white=\$(tput setaf 7)
     _text_blue=\$(tput setaf 6)
@@ -107,15 +121,19 @@ function debug() {
 }
 
 function info() {
-    echo "\${_text_bold}\${_text_white}[INFO] \${_text_reset}" "\$@"
+    if [[ $quiet == 0 ]]; then
+        echo "\${_text_bold}\${_text_white}[INFO] \${_text_reset}" "\$@"
+    fi
 }
 
 function success() {
-    echo "\${_text_bold}\${_text_green}[OK]   \${_text_reset}" "\$@"
+    if [[ $quiet == 0 ]]; then
+        echo "\${_text_bold}\${_text_green}[OK]   \${_text_reset}" "\$@"
+    fi
 }
 
 function warning() {
-    echo "\${_text_bold}\${_text_yellow}[WARN] \${_text_reset}" "\$@"
+    echo "\${_text_bold}\${_text_yellow}[WARN] \${_text_reset}" "\$@" >&2
 }
 
 function error() {
@@ -132,7 +150,7 @@ quiet=0
 
 # If no arguments were given, just show usage help.
 if [[ -z \${1-} ]]; then
-    usage
+    short_help
     exit "$SUCCESS"
 fi
 
@@ -143,11 +161,17 @@ while getopts "qdvh" opt; do
 	d) debug=1;;
         v) version
            exit "$SUCCESS";;
-        h) usage
+        h) long_help
            exit "$SUCCESS";;
-        *) usage
+        *) short_help
            exit "$ERROR_ARGUMENTS";;
     esac
 done
 i=\$OPTIND
-shift \$((\$i-1))
+shift \$(( i-1 ))
+
+# Quiet and debug are mutually exclusive.
+if [[ \$quiet != 0 && \$debug != 0 ]]; then
+    error "Quiet and debug options are mutually exclusive."
+    exit "\$ERROR_ARGUMENTS"
+fi