_lslogins_module()
{
	local cur prev OPTS LSLOGINS_COLS_ALL
	COMPREPLY=()
	cur="${COMP_WORDS[COMP_CWORD]}"
	prev="${COMP_WORDS[COMP_CWORD-1]}"
	LSLOGINS_COLS_ALL="
		USER UID GECOS HOMEDIR SHELL NOLOGIN PWD-LOCK PWD-EMPTY
		PWD-DENY GROUP GID SUPP-GROUPS SUPP-GIDS LAST-LOGIN LAST-TTY
		LAST-HOSTNAME FAILED-LOGIN FAILED-TTY HUSHED PWD-WARN
		PWD-CHANGE PWD-MIN PWD-MAX PWD-EXPIR CONTEXT PROC
	"
	case $prev in
		'-g'|'--groups')
			COMPREPLY=( $(compgen -W "$(getent group | awk -F: '{print $1}')" -- $cur) )
			return 0
			;;
		'-l'|'--logins')
			COMPREPLY=( $(compgen -W "$(getent passwd | awk -F: '{print $1}')" -- $cur) )
			return 0
			;;
		'--time-format')
			COMPREPLY=( $(compgen -W "short full iso" -- $cur) )
			return 0
			;;
		'--wtmp-file'|'--btmp-file')
			local IFS=$'\n'
			compopt -o filenames
			COMPREPLY=( $(compgen -f -- $cur) )
			return 0
			;;
		'-o'|'--output')
			local prefix realcur LSLOGINS_COLS
			realcur="${cur##*,}"
			prefix="${cur%$realcur}"
			for WORD in $LSLOGINS_COLS_ALL; do
				if ! [[ $prefix == *"$WORD"* ]]; then
					LSLOGINS_COLS="$WORD ${LSLOGINS_COLS:-""}"
				fi
			done
			compopt -o nospace
			COMPREPLY=( $(compgen -P "$prefix" -W "$LSLOGINS_COLS" -S ',' -- $realcur) )
			return 0
			;;
		'-h'|'--help'|'-V'|'--version')
			return 0
			;;
	esac
	COMPREPLY=( $(compgen -W "
			--acc-expiration
			--colon-separate
			--export
			--failed
			--supp-groups
			--groups
			--last
			--logins
			--newline
			--noheadings
			--notruncate
			--output
			--output-all
			--pwd
			--raw
			--system-accs
			--time-format
			--user-accs
			--context
			--print0
			--wtmp-file
			--btmp-file
			--help
			--version
		" -- $cur) )
	return 0
}
complete -F _lslogins_module lslogins
