diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidRouter.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidRouter.kt
index 3f10300bfafa6774218de42d14b18c793f43e661..7b742241bdb2ac17af4b6c01035aea77ea756b9a 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidRouter.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidRouter.kt
@@ -87,24 +87,26 @@ fun MeteroidRouter(
         MeteroidScreen.Home.Purchase.route, arguments = listOf(
           navArgument("server") {
             type = NavType.LongType
-            initialAccount.server?.let { defaultValue = it.value }
+            defaultValue = initialAccount.server?.value ?: -1L
           },
           navArgument("user") {
             type = NavType.LongType
-            initialAccount.user?.let { defaultValue = it.value }
+            defaultValue = initialAccount.user?.value ?: -1L
           },
         )
       ) { entry ->
         val serverId = entry.arguments?.getLong("server")?.let(::ServerId)
+          ?: ServerId(-1L)
         val userId = entry.arguments?.getLong("user")?.let(::UserId)
+          ?: UserId(-1L)
 
         LaunchedEffect(serverId, userId) {
-          if (serverId == null || userId == null) {
+          if (!serverId.isValid() || !userId.isValid()) {
             navigationViewModel.expanded.value = true
           }
         }
 
-        if (serverId != null && userId != null) {
+        if (serverId.isValid() && userId.isValid()) {
           val viewModel: PurchaseViewModel = hiltViewModel(
             key = MeteroidScreen.Home.Purchase.build(serverId, userId)
           )
diff --git a/gradle.properties b/gradle.properties
index de22634d32d2c6b737ec4a7481c65d653f5e0053..2135a6f8ab8e5388eccb2290f463be553ac5b355 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -22,7 +22,8 @@
 # http://www.gradle.org/docs/current/userguide/build_environment.html
 # Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx2048m
+org.gradle.jvmargs=-Xmx4096m
+org.gradle.configuration-cache=true
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
diff --git a/gradle/convention/src/main/kotlin/util/ProjectExtensions.kt b/gradle/convention/src/main/kotlin/util/ProjectExtensions.kt
index d1d4eb7c97f860d3191b739e454e88ed534cade5..7e04e110ba8b06b2831452907a0673bf96bf90d9 100644
--- a/gradle/convention/src/main/kotlin/util/ProjectExtensions.kt
+++ b/gradle/convention/src/main/kotlin/util/ProjectExtensions.kt
@@ -1,16 +1,13 @@
 package util
 
 import org.gradle.api.Project
-import java.io.ByteArrayOutputStream
 import java.util.*
 
+@Suppress("UnstableApiUsage")
 fun Project.cmd(vararg command: String) = try {
-  val stdOut = ByteArrayOutputStream()
-  exec {
+  providers.exec {
     commandLine(*command)
-    standardOutput = stdOut
-  }
-  stdOut.toString(Charsets.UTF_8.name()).trim()
+  }.standardOutput.asText.get().trim()
 } catch (e: Throwable) {
   e.printStackTrace()
   null