diff --git a/app/build.gradle b/app/build.gradle
index 97af808..555c245 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -149,7 +149,9 @@
     
     def binDir = rootProject.file("build/bin")
     def targetExec = new File(binDir, "korapxmltool")
+    def krillExec = new File(binDir, "korapxml2krill")
     outputs.file(targetExec)
+    outputs.file(krillExec)
 
     doLast {
         def shebang = rootProject.file("korapxmltool.shebang")
@@ -162,12 +164,29 @@
 
         def targetJar = shadowJar.archiveFile.get().asFile
 
+        // Create main korapxmltool executable
         targetExec.withOutputStream { os ->
             os << shebang.bytes
             os << targetJar.bytes
         }
         targetExec.setExecutable(true, false)
         println "Created executable launcher: ${targetExec}"
+
+        // Create korapxml2krill symlink for backward compatibility
+        if (krillExec.exists()) {
+            krillExec.delete()
+        }
+        try {
+            java.nio.file.Files.createSymbolicLink(
+                krillExec.toPath(),
+                java.nio.file.Paths.get("korapxmltool")
+            )
+            println "Created symlink: korapxml2krill -> korapxmltool"
+        } catch (Exception e) {
+            println "Warning: Could not create korapxml2krill symlink (${e.message}), copying instead"
+            java.nio.file.Files.copy(targetExec.toPath(), krillExec.toPath())
+            krillExec.setExecutable(true, false)
+        }
     }
 }
 
diff --git a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
index 65831fa..fbe3468 100644
--- a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
+++ b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
@@ -4395,7 +4395,53 @@
 
 fun main(args: Array<String>): Unit {
     try { Locale.setDefault(Locale.ROOT) } catch (_: Exception) {}
-    exitProcess(CommandLine(KorapXmlTool()).execute(*args))
+    
+    // Check if called as korapxml2krill for backward compatibility
+    val programName = System.getProperty("sun.java.command")?.split(" ")?.first()?.split("/")?.last()
+        ?: File(System.getProperty("java.class.path")).name
+    
+    val filteredArgs = if (programName == "korapxml2krill") {
+        // Filter out Perl-specific options and add krill format
+        val perlOptions = setOf("-z", "-w", "-c")
+        val newArgs = mutableListOf<String>()
+        
+        // Always set krill output format for korapxml2krill
+        if (!args.contains("-t") && !args.contains("--to")) {
+            newArgs.add("-t")
+            newArgs.add("krill")
+        }
+        
+        var i = 0
+        while (i < args.size) {
+            val arg = args[i]
+            when {
+                perlOptions.contains(arg) -> {
+                    // Skip this option
+                    if (arg == "-c" && i + 1 < args.size) {
+                        // Skip -c and its argument
+                        i++
+                    }
+                }
+                arg == "-t" || arg == "--to" -> {
+                    // If format is already specified, override with krill
+                    newArgs.add(arg)
+                    if (i + 1 < args.size) {
+                        i++
+                        newArgs.add("krill")
+                    }
+                }
+                else -> newArgs.add(arg)
+            }
+            i++
+        }
+        
+        System.err.println("korapxml2krill compatibility mode: filtered arguments")
+        newArgs.toTypedArray()
+    } else {
+        args
+    }
+    
+    exitProcess(CommandLine(KorapXmlTool()).execute(*filteredArgs))
 }
 
 /**
