diff --git a/files/error-summary.sh b/files/error-summary.sh
index 14a1a598b535444834d08f66cb0c33f60e3e9494..3da4b029276bbb70a62b8829e1ce8cb196eb535c 100755
--- a/files/error-summary.sh
+++ b/files/error-summary.sh
@@ -4,15 +4,52 @@
 # AUTHORS:
 #	- Jörg Sachse (<Joerg.Sachse@slub-dresden.de>)
 #	- Jens Steidl (<Jens.Steidl@slub-dresden.de>)
-# INVOCATION:
-#	./error_summary.sh [-h] [-n NUM] [-d DAYS] [-w] [-c]
+
+#hh error_summary.sh - aggregate Rosetta Errors by error type
+#hh
+#hh Usage: error_summary.sh [-h] [-V] [-m] [-n NUM] [-d DAYS] [-w] [-c]
+#hh
+#hh Options:
+#hh	You can use the following CLI arguments to configure the behaviour of
+#hh	error-summary.sh. Please note that the CLI arguments need to be space
+#hh	separated. Combining arguments like "-cw" is currently NOT supported.
+#hh
+#hh	-h, --help
+#hh		Show this help and exit.
+#hh	-V, --version
+#hh		Show version number and exit.
+#hh	-m, --man, --manpage, --manual
+#hh		Create a manpage from this help section and exit.
+#hh		Requires "help2man".
+#hh	-M, --showman
+#hh		Print the Manpage.
+#hh		Requires "help2man".
+#hh	-n, --chars NUMBER_OF_CHARS
+#hh		Set max length of error message lines.
+#hh		Default: 200
+#hh	-d, --days NUMBER_OF_DAYS
+#hh		Set how many days back the error summary should go through the
+#hh		logs.
+#hh		Default: 10
+#hh	-w, --warn
+#hh		Count Warnings as well as Errors.
+#hh		Default: unset (only count Errors)
+#hh	-c, --class
+#hh		Instead of a fixed message length, summarize and print errors
+#hh		by their respective Java class names. If this option is set,
+#hh		"-n|--chars" is ignored.
+#hh		Defaut: unset (use message length)
+#hh
+#hh Examples:
+#hh	error-summary.sh -n 50 -w -d 15		Cut messages after 50 characters, count warnings as well, filter logs from the last 15 days.
+#hh	error-summary.sh -w -c			Count Erros AND Warnings, count messages by their respective Java class names.
+
 
 
 ### DEFAULTS
 HOW_MANY_CHARS=200
 HOW_MANY_DAYS=10
 WARN=""		# Default: do not filter for Warnings, only show Errors
-FILTER_STRING=" (ERROR${WARN})\s+\[.{0,${HOW_MANY_CHARS}}"
 
 # get correct log path, this differs between servers
 if [[ -d "/operational_shared/logs/${HOSTNAME}.slub-dresden.de/" ]]; then
@@ -28,43 +65,66 @@ for REQUIREMENT in ${REQUIREMENTS}; do
 done
 
 
-### CLI ARGUMENTS
-# for ARG in "$@"; do
-while [[ $# -gt 0 ]]; do
-	case ${1} in
-		-h|--help)
-			echo "call help function here"
-			exit 0
-			;;
-		-n|--chars)
-			HOW_MANY_CHARS="${2}"
-			shift; shift;
-			;;
-		-d|--days)
-			HOW_MANY_DAYS="${2}"
-			shift; shift;
-			;;
-		-w|--warn)
-			COUNT_WARNINGS="true"
-			shift;
-			;;
-		-c|--class)
-			PRINT_ONLY_CLASSNAMES="true"
-			shift;
-			;;
-		*)
-			echo "'${1}' is not a valid parameter. Please use '$( basename "${0}" ) --help'. Exiting."
-			exit 1
-			;;
-	esac
-done
+### FUNCTIONS
 
+# Don't just call this function "help()", as that's a reserved command in Bash.
+comment_help() {
+    sed -rn 's/^#hh ?//;T;p' "$0"
+}
 
+create_manpage(){
+	# https://www.gnu.org/software/help2man/
+	help2man --section 1 --source="SLUB Dresden" --no-info "${0}" | gzip > ./"$( basename "${0}" ".sh" ).gz"
+}
 
-### FUNCTIONS
+show_manpage(){
+	help2man --section 1 --source="SLUB Dresden" --no-info "${0}" | man -l -
+}
 
-# thx @Steidl!
-# grep -o "STARTZEICHENKETTE..\{ANZAHL_ZEICHEN_NACH_STARTZEICHENKETTE\}" | sort | uniq -c | sort -nr
+get_cli_args(){
+	while [[ $# -gt 0 ]]; do
+		case ${1} in
+			-h|--help)
+				comment_help
+				exit 0
+				;;
+			-V|--version)
+				echo "$( basename "${0}" ) v1.0.0"
+				echo -e "\n\nCopyright (C)\n"
+				echo "This software is licensed under the GNU General Public License version 3 (GNU GPLv3)."
+				exit 0
+				;;
+			-m|--man|--manpage|--manual)
+				create_manpage
+				exit 0
+				;;
+			-M|--showman)
+				show_manpage
+				exit 0
+				;;
+			-n|--chars)
+				HOW_MANY_CHARS="${2}"
+				shift; shift;
+				;;
+			-d|--days)
+				HOW_MANY_DAYS="${2}"
+				shift; shift;
+				;;
+			-w|--warn)
+				COUNT_WARNINGS="true"
+				shift;
+				;;
+			-c|--class)
+				PRINT_ONLY_CLASSNAMES="true"
+				shift;
+				;;
+			*)
+				echo "'${1}' is not a valid parameter. Please use '$( basename "${0}" ) --help'. Exiting."
+				exit 1
+				;;
+		esac
+	done
+}
 
 set_filter_string(){
 	if [[ "${COUNT_WARNINGS}" == "true" ]]; then
@@ -78,6 +138,8 @@ set_filter_string(){
 	fi
 }
 
+# thx @Steidl!
+# grep -o "STARTZEICHENKETTE..\{ANZAHL_ZEICHEN_NACH_STARTZEICHENKETTE\}" | sort | uniq -c | sort -nr
 get_last_n_days(){
 	LOGFILES="$( find "${SERVER_LOG_DIR}/" -maxdepth 1 -mtime -"${HOW_MANY_DAYS}" -name "server.log*" )"
 	for LOGFILE in ${LOGFILES}; do
@@ -97,12 +159,14 @@ get_last_n_days(){
 
 ### MAIN
 
+get_cli_args "${@}"
+
 echo ""
 echo "USING THE FOLLOWING SETTINGS:"
 echo -e "\tSERVERNAME: '${HOSTNAME}'"
 echo -e "\tFILTERING LOGS FROM $( date -d "${HOW_MANY_DAYS} days ago" +%Y-%m-%d ) UNTIL $( date -d today +%Y-%m-%d )"
 echo -e "\tHOW MANY CHARACTERS: ${HOW_MANY_CHARS}"
-echo -en "\tCOUNT WARNINGS: "; [[ "${WARN}" == "|WARN" ]] && echo "yes" || echo "no"
+echo -en "\tCOUNT WARNINGS: "; [[ "${COUNT_WARNINGS}" == "true" ]] && echo "yes" || echo "no"
 
 set_filter_string