diff --git a/app/build.gradle b/app/build.gradle
index 555c245..fa09110 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -150,8 +150,10 @@
     def binDir = rootProject.file("build/bin")
     def targetExec = new File(binDir, "korapxmltool")
     def krillExec = new File(binDir, "korapxml2krill")
+    def conlluExec = new File(binDir, "korapxml2conllu")
     outputs.file(targetExec)
     outputs.file(krillExec)
+    outputs.file(conlluExec)
 
     doLast {
         def shebang = rootProject.file("korapxmltool.shebang")
@@ -187,6 +189,22 @@
             java.nio.file.Files.copy(targetExec.toPath(), krillExec.toPath())
             krillExec.setExecutable(true, false)
         }
+        
+        // Create korapxml2conllu symlink for backward compatibility
+        if (conlluExec.exists()) {
+            conlluExec.delete()
+        }
+        try {
+            java.nio.file.Files.createSymbolicLink(
+                conlluExec.toPath(),
+                java.nio.file.Paths.get("korapxmltool")
+            )
+            println "Created symlink: korapxml2conllu -> korapxmltool"
+        } catch (Exception e) {
+            println "Warning: Could not create korapxml2conllu symlink (${e.message}), copying instead"
+            java.nio.file.Files.copy(targetExec.toPath(), conlluExec.toPath())
+            conlluExec.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 fbe3468..149b248 100644
--- a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
+++ b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
@@ -4400,45 +4400,75 @@
     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++
+    val filteredArgs = when (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)
                 }
-                arg == "-t" || arg == "--to" -> {
-                    // If format is already specified, override with krill
+                i++
+            }
+            
+            System.err.println("korapxml2krill compatibility mode: filtered arguments")
+            newArgs.toTypedArray()
+        }
+        "korapxml2conllu" -> {
+            // Set conllu output format for korapxml2conllu
+            val newArgs = mutableListOf<String>()
+            
+            // Always set conllu output format
+            if (!args.contains("-t") && !args.contains("--to")) {
+                newArgs.add("-t")
+                newArgs.add("conllu")
+            }
+            
+            var i = 0
+            while (i < args.size) {
+                val arg = args[i]
+                if (arg == "-t" || arg == "--to") {
+                    // If format is already specified, override with conllu
                     newArgs.add(arg)
                     if (i + 1 < args.size) {
                         i++
-                        newArgs.add("krill")
+                        newArgs.add("conllu")
                     }
+                } else {
+                    newArgs.add(arg)
                 }
-                else -> newArgs.add(arg)
+                i++
             }
-            i++
+            
+            System.err.println("korapxml2conllu compatibility mode: using conllu format")
+            newArgs.toTypedArray()
         }
-        
-        System.err.println("korapxml2krill compatibility mode: filtered arguments")
-        newArgs.toTypedArray()
-    } else {
-        args
+        else -> args
     }
     
     exitProcess(CommandLine(KorapXmlTool()).execute(*filteredArgs))
