diff --git a/cmd/termmapper/main.go b/cmd/termmapper/main.go
index c31b6b1..0f619c1 100644
--- a/cmd/termmapper/main.go
+++ b/cmd/termmapper/main.go
@@ -1,7 +1,6 @@
 package main
 
 import (
-	"flag"
 	"fmt"
 	"os"
 	"os/signal"
@@ -9,6 +8,7 @@
 	"syscall"
 
 	"github.com/KorAP/KoralPipe-TermMapper/mapper"
+	"github.com/alecthomas/kong"
 	"github.com/gofiber/fiber/v2"
 	"github.com/rs/zerolog"
 	"github.com/rs/zerolog/log"
@@ -20,38 +20,21 @@
 )
 
 type config struct {
-	port     int
-	config   string
-	logLevel string
+	Port     int    `kong:"short='p',default='8080',help='Port to listen on'"`
+	Config   string `kong:"short='c',required,help='YAML configuration file containing mapping directives'"`
+	LogLevel string `kong:"short='l',default='info',help='Log level (debug, info, warn, error)'"`
 }
 
-func parseFlags() *config {
+func parseConfig() *config {
 	cfg := &config{}
-
-	flag.IntVar(&cfg.port, "port", 8080, "Port to listen on")
-	flag.IntVar(&cfg.port, "p", 8080, "Port to listen on (shorthand)")
-
-	flag.StringVar(&cfg.config, "config", "", "YAML configuration file containing mapping directives")
-	flag.StringVar(&cfg.config, "c", "", "YAML configuration file containing mapping directives (shorthand)")
-
-	flag.StringVar(&cfg.logLevel, "log-level", "info", "Log level (debug, info, warn, error)")
-	flag.StringVar(&cfg.logLevel, "l", "info", "Log level (shorthand)")
-
-	flag.Usage = func() {
-		fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
-		fmt.Fprintf(os.Stderr, "\nA web service for transforming JSON objects using term mapping rules.\n\n")
-		fmt.Fprintf(os.Stderr, "Options:\n")
-		flag.PrintDefaults()
-	}
-
-	flag.Parse()
-
-	if cfg.config == "" {
-		fmt.Fprintln(os.Stderr, "Error: config file is required")
-		flag.Usage()
+	ctx := kong.Parse(cfg,
+		kong.Description("A web service for transforming JSON objects using term mapping rules."),
+		kong.UsageOnError(),
+	)
+	if ctx.Error != nil {
+		fmt.Fprintln(os.Stderr, ctx.Error)
 		os.Exit(1)
 	}
-
 	return cfg
 }
 
@@ -70,13 +53,13 @@
 
 func main() {
 	// Parse command line flags
-	cfg := parseFlags()
+	cfg := parseConfig()
 
 	// Set up logging
-	setupLogger(cfg.logLevel)
+	setupLogger(cfg.LogLevel)
 
 	// Create a new mapper instance
-	m, err := mapper.NewMapper(cfg.config)
+	m, err := mapper.NewMapper(cfg.Config)
 	if err != nil {
 		log.Fatal().Err(err).Msg("Failed to create mapper")
 	}
@@ -92,8 +75,8 @@
 
 	// Start server
 	go func() {
-		log.Info().Int("port", cfg.port).Msg("Starting server")
-		if err := app.Listen(fmt.Sprintf(":%d", cfg.port)); err != nil {
+		log.Info().Int("port", cfg.Port).Msg("Starting server")
+		if err := app.Listen(fmt.Sprintf(":%d", cfg.Port)); err != nil {
 			log.Fatal().Err(err).Msg("Server error")
 		}
 	}()
