_mount_module()
{
	local cur prev OPTS
	COMPREPLY=()
	cur="${COMP_WORDS[COMP_CWORD]}"
	prev="${COMP_WORDS[COMP_CWORD-1]}"
	case $prev in
		'-t'|'--types')
			local prefix realcur TYPES
			TYPES="
				$(\ls /lib/modules/$(uname -r)/kernel/fs | awk '{print $1, "no" $1}')
				$(awk '{print $NF, "no" $NF}' /proc/filesystems)
			"
			realcur="${cur##*,}"
			prefix="${cur%$realcur}"
			for WORD in $TYPES; do
				if ! [[ $prefix == *"$WORD"* ]]; then
					TYPE_COLS="$WORD ${TYPE_COLS:-""}"
				fi
			done
			compopt -o nospace
			COMPREPLY=( $(compgen -P "$prefix" -W "$TYPE_COLS" -S ',' -- $realcur) )
			return 0
			;;
		'-L'|'--label')
			local LABELS
			LABELS="$(lsblk -o LABEL -nr)"
			COMPREPLY=( $(compgen -W "$LABELS" -- $cur) )
			return 0
			;;
		'-U'|'--uuid')
			local UUIDS
			UUIDS="$(lsblk -o UUID -nr)"
			COMPREPLY=( $(compgen -W "$UUIDS" -- $cur) )
			return 0
			;;
		'-h'|'--help'|'-V'|'--version')
			return 0
			;;
	esac
	case $cur in
		-*)
			OPTS="	--all
				--no-canonicalize
				--fake
				--fork
				--fstab
				--help
				--internal-only
				--show-labels
				--no-mtab
				--options
				--test-opts
				--read-only
				--types
				--source
				--target
				--verbose
				--version
				--read-write
				--label
				--uuid
				--bind
				--move
				--rbind
				--make-shared
				--make-slave
				--make-private
				--make-unbindable
				--make-rshared
				--make-rslave
				--make-rprivate
				--make-runbindable"
			COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
			return 0
			;;
	esac
	local IFS=$'\n'
	compopt -o filenames
	COMPREPLY=( $(compgen -f -- $cur) )
	return 0
}
complete -F _mount_module mount
