diff --git a/app/.idea/gradle.xml b/app/.idea/gradle.xml
index 038e045..f2c1963 100644
--- a/app/.idea/gradle.xml
+++ b/app/.idea/gradle.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>
diff --git a/app/.idea/vcs.xml b/app/.idea/vcs.xml
index b2bdec2..64713b8 100644
--- a/app/.idea/vcs.xml
+++ b/app/.idea/vcs.xml
@@ -2,5 +2,6 @@
 <project version="4">
   <component name="VcsDirectoryMappings">
     <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
   </component>
 </project>
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index e696365..489dee5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -13,7 +13,7 @@
 
     // Apply the application plugin to add support for building a CLI application in Java.
     id 'application'
-    id 'com.github.johnrengelman.shadow' version '7.1.2'
+    id 'com.github.johnrengelman.shadow' version '8.1.1'
 }
 
 
@@ -43,7 +43,7 @@
 
 application {
     // Define the main class for the application.
-    mainClass = 'de.ids_mannheim.korapxml2conllu.AppKt'
+    mainClass = 'de.ids_mannheim.korapxmltools.KorapXml2ConlluKt'
 }
 
 jar {
@@ -53,9 +53,13 @@
 
     manifest.attributes(
             'Class-Path': configurations.compileClasspath.collect { it.getName() }.join(' '),
-            'Main-Class': "de.ids_mannheim.korapxml2conllu.AppKt"
+            'Main-Class': "de.ids_mannheim.korapxmltools.KorapXml2ConlluKt"
     )
-
+    shadowJar {
+        archiveBaseName.set('korapxml2conllu')
+        archiveClassifier.set('')
+        archiveVersion.set('')
+    }
 }
 
 
diff --git a/app/src/main/kotlin/de/ids_mannheim/korapxml2conllu/App.kt b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXml2Conllu.kt
similarity index 97%
rename from app/src/main/kotlin/de/ids_mannheim/korapxml2conllu/App.kt
rename to app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXml2Conllu.kt
index e97dce2..80f8d16 100644
--- a/app/src/main/kotlin/de/ids_mannheim/korapxml2conllu/App.kt
+++ b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXml2Conllu.kt
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korapxml2conllu
+package de.ids_mannheim.korapxmltools
 
 import javax.xml.parsers.DocumentBuilder
 import javax.xml.parsers.DocumentBuilderFactory
@@ -16,8 +16,8 @@
 import java.io.InputStreamReader
 import java.util.logging.Logger
 
-class App {
-    private val LOGGER: Logger = Logger.getLogger(App::class.java.name)
+class KorapXml2Conllu {
+    private val LOGGER: Logger = Logger.getLogger(KorapXml2Conllu::class.java.name)
 
     fun main(args: Array<String?>?) {
         val executor: ExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
@@ -198,6 +198,6 @@
 
 fun main(args: Array<String?>?) {
     System.setProperty("file.encoding", "UTF-8")
-    App().main(args)
+    KorapXml2Conllu().main(args)
 }
 
diff --git a/app/src/test/kotlin/de/ids_mannheim/korapxml2conllu/AppTest.kt b/app/src/test/kotlin/de/ids_mannheim/korapxmltools/KorapXml2ConlluTest.kt
similarity index 82%
rename from app/src/test/kotlin/de/ids_mannheim/korapxml2conllu/AppTest.kt
rename to app/src/test/kotlin/de/ids_mannheim/korapxmltools/KorapXml2ConlluTest.kt
index 5709451..c11940f 100644
--- a/app/src/test/kotlin/de/ids_mannheim/korapxml2conllu/AppTest.kt
+++ b/app/src/test/kotlin/de/ids_mannheim/korapxmltools/KorapXml2ConlluTest.kt
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korapxml2conllu
+package de.ids_mannheim.korapxmltools
 
 import org.junit.After
 import org.junit.Before
@@ -7,9 +7,9 @@
 import java.net.URL
 import kotlin.test.Test
 import kotlin.test.assertContains
+import de.ids_mannheim.korapxmltools.KorapXml2Conllu
 
-
-class AppTest {
+class KorapXml2ConlluTest {
     private val outContent = ByteArrayOutputStream()
     private val errContent = ByteArrayOutputStream()
     private val originalOut: PrintStream = System.out
@@ -27,7 +27,7 @@
         System.setErr(originalErr)
     }
 
-    fun loadResource(path: String): URL {
+    private fun loadResource(path: String): URL {
         val resource = Thread.currentThread().contextClassLoader.getResource(path)
         requireNotNull(resource) { "Resource $path not found" }
         return resource
@@ -35,7 +35,7 @@
 
     @Test
     fun appWorks() {
-        val classUnderTest = App()
+        val classUnderTest = de.ids_mannheim.korapxmltools.KorapXml2Conllu()
         val args = arrayOf(loadResource("goe.zip").path)
         classUnderTest.main(args)
         assertContains(
