diff --git a/README.md b/README.md
index dc08e4f..6fb0fe8 100644
--- a/README.md
+++ b/README.md
@@ -7,4 +7,8 @@ Collection of scripts and functions to make my developer life easier.
**bash/sshconnect.sh**
*TUI to display a list of servers with description.*
-
\ No newline at end of file
+
+
+**bash/q_completion.sh**
+*Add TAB completion to [q](https://github.com/ibm-messaging/mq-q-qload) for manipulating IBM MQ messages.*
+
diff --git a/bash/q_completion.sh b/bash/q_completion.sh
new file mode 100644
index 0000000..c7791b8
--- /dev/null
+++ b/bash/q_completion.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+# Author: nils gerstner
+# Last revision: 09th oktober 2018
+# Version: 1.1
+# Description: this script enables tab complition for MQSeries Q Program by Paul Clarke.
+# Instructions: to use the script you have to source it '. q_completion.sh'.
+
+function _q_() {
+# if [ -z "${PROSPECTIVE_MQSI_BASE_FILEPATH+MQSI_PROFILE_NOT_SET}" ]; then # environment is not initialized -> source profile
+# echo you need to source your mqsiprofile to get completion
+# return 1;
+# else
+ QUEUEMANAGERS="$(dspmq |grep -oP "(?<=QMNAME[(])[^)]*(?=[)]\s*STATUS[(]Running[)])")"
+
+# fi
+# local cmd="${1##*/}" # gets the command that's being executed,
+ # this can be used if your completion function can handle multiple commands.
+ local line=${COMP_LINE} #The third, line, gets the entire command line that is being completed.
+# local xpat='!*.foo' # The fourth variable, xpat, is our exclusion pattern,
+ # the same one used in the simple example above.
+ local word=${COMP_WORDS[COMP_CWORD]} # The second, word, gets the word that is being completed,
+ local prev=${COMP_WORDS[COMP_CWORD -1]} # The second, word, gets the word that is being completed,
+ # this can be used if your completion strategy changes based on the word that's being expanded,
+ # it's also needed so that only matching values are returned.
+if [ ${COMP_CWORD} -eq 1 ] ; then
+ COMPREPLY=($(compgen -W "-m" -- ${word}))
+else
+ case ${prev} in
+ -i | -I)
+ COMPREPLY=( $(compgen -W "$(echo "dis qlocal(*)" | \
+ runmqsc ${COMP_WORDS[2]} |grep -a -o -P "(?<=QUEUE[(])[^)]*"| cat )" -- ${word}) )
+ ;;
+ -m)
+ COMPREPLY=( $(compgen -W "$(dspmq |grep -oP "(?<=QMNAME[(])[^)]*(?=[)]\s*STATUS[(]Running[)])")" -- ${word}) )
+ ;;
+ -o | -O)
+ COMPREPLY=( $(compgen -W "$(echo "dis q(*) type" | \
+ runmqsc ${COMP_WORDS[2]} |grep -a -o -P "(?<=QUEUE[(])[^)]*(?=.*?TYPE[(]((QREMOTE)|(QALIAS)|(QLOCAL))[)])"| cat )" -- ${word}) )
+ ;;
+ -f | -F)
+ COMPREPLY=($(compgen -f -- "${word}"))
+ ;;
+ -M)
+ COMPREPLY=($(compgen -W '"test"' -- "${word}"))
+ ;;
+ *)
+ qoptions=""
+ extras=""
+ options="-o; -O; -f; -F; -i; -I; -m; -L; -C; -gxm; -dd2; -dd3"
+ IFS='; ' read -r -a array <<< "${options}"
+ for element in "${array[@]}"; do
+ if [ "$(echo "$line $extras" |grep -e "${element}" )" == "" ]; then
+ qoptions=( "$qoptions $element " )
+ fi
+ done
+ COMPREPLY=($(compgen -W "${qoptions}" -- ${word}))
+ ;;
+ esac
+fi
+}
+
+complete -F _q_ q