diff --git a/CHANGELOG.md b/CHANGELOG.md
index 22cf3c9..685ee60 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,8 +4,7 @@
 
 ### Fixed
 
-- `-o` option for CoNLL-U  output
-
+- `-o <outputfile>` option, now has the highest priority for specifying the output file path
 - missing newlines in file output for now, w2v, conllu target formats when using `-o` option
 
 ### Added
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 a2ee6a2..c0f8dba 100644
--- a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
+++ b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
@@ -710,12 +710,8 @@
         if (outputFormat == OutputFormat.KRILL) {
             // Determine output path for Krill format
             krillOutputPath = if (outputFile != null) {
-                // Use explicit -o option
-                val finalOutputPath = if (outputDir != ".") {
-                    File(outputDir, File(outputFile!!).name).path
-                } else {
-                    outputFile!!
-                }
+                // Use explicit -o option - has highest priority, use as-is
+                val finalOutputPath = outputFile!!
                 // Ensure .tar extension for Krill format
                 if (finalOutputPath.endsWith(".tar")) {
                     finalOutputPath
@@ -779,11 +775,8 @@
                         throw ParameterException(spec.commandLine(),
                             "Reading from stdin requires -o/--output to specify output file path")
                     }
-                    val finalOutputPath = if (outputDir != ".") {
-                        File(outputDir, File(outputFile!!).name).path
-                    } else {
-                        outputFile!!
-                    }
+                    // -o has highest priority - use it as-is (absolute or relative to CWD)
+                    val finalOutputPath = outputFile!!
                     LOGGER.info("Converting CoNLL-U from stdin to: $finalOutputPath")
                     convertConlluToZip(System.`in`, finalOutputPath)
                     return 0
@@ -794,12 +787,8 @@
                     zipFileNames!!.forEach { conlluFile ->
                         val outputPath = when {
                             outputFile != null -> {
-                                // Explicit -o specified: use outputDir if specified
-                                if (outputDir != ".") {
-                                    File(outputDir, File(outputFile!!).name).path
-                                } else {
-                                    outputFile!!
-                                }
+                                // -o has highest priority - use it as-is (absolute or relative to CWD)
+                                outputFile!!
                             }
                             else -> {
                                 // Auto-infer from input filename
@@ -829,11 +818,8 @@
 
         // Normal ZIP processing mode
         if (outputFile != null && (outputFormat == OutputFormat.CONLLU || outputFormat == OutputFormat.WORD2VEC || outputFormat == OutputFormat.NOW)) {
-            val finalOutputPath = if (outputDir != ".") {
-                File(outputDir, File(outputFile!!).name).path
-            } else {
-                outputFile!!
-            }
+            // -o has highest priority - use it as-is (absolute or relative to CWD)
+            val finalOutputPath = outputFile!!
             val file = File(finalOutputPath)
             if (file.exists()) {
                 if (!overwrite) {
@@ -1244,7 +1230,8 @@
                 val targetFoundry = externalFoundry ?: "annotated"
 
                 val baseZipName = File(inputZipPath).name.replace(Regex("\\.zip$"), "")
-                val outputMorphoZipFileName = File(outputDir, "$baseZipName.$targetFoundry.zip").absolutePath
+                val autoOutputFileName = File(outputDir, "$baseZipName.$targetFoundry.zip").absolutePath
+                val outputMorphoZipFileName = outputFile ?: autoOutputFileName
                 targetZipFileName = outputMorphoZipFileName
 
                 // Check for existing output file BEFORE redirecting logging, so user sees the message
diff --git a/app/src/test/kotlin/de/ids_mannheim/korapxmltools/FoundryOverrideTest.kt b/app/src/test/kotlin/de/ids_mannheim/korapxmltools/FoundryOverrideTest.kt
index fa882ce..d0ee9cb 100644
--- a/app/src/test/kotlin/de/ids_mannheim/korapxmltools/FoundryOverrideTest.kt
+++ b/app/src/test/kotlin/de/ids_mannheim/korapxmltools/FoundryOverrideTest.kt
@@ -99,7 +99,7 @@
         }
     }
 
-    @Ignore("This test is ignored until -o is fixed")
+    @Test
     fun testOutputOptionHasPriority() {
         val outputDir = File.createTempFile("output_option_test", "").apply {
             delete()
