diff --git a/kotlin/builder/src/io/bazel/kotlin/compiler/BazelK2JVMCompiler.kt b/kotlin/builder/src/io/bazel/kotlin/compiler/BazelK2JVMCompiler.kt
index e4d104d..baa7f49 100644
--- a/kotlin/builder/src/io/bazel/kotlin/compiler/BazelK2JVMCompiler.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/compiler/BazelK2JVMCompiler.kt
@@ -16,6 +16,7 @@
 package io.bazel.kotlin.compiler
 
 import org.jetbrains.kotlin.cli.common.ExitCode
+import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
 import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
 import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
 import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
@@ -23,14 +24,14 @@
 
 @Suppress("unused")
 class BazelK2JVMCompiler(private val delegate: K2JVMCompiler = K2JVMCompiler()) {
-    private lateinit var friendsPaths: Array<String>
+    private fun createArgs(args: Array<out String>): K2JVMCompilerArguments {
+        var friendsPaths: Array<String>? = null
 
-    private fun preprocessArgs(args: Array<out String>): Array<out String> {
         val tally = mutableListOf<String>()
-        var i =0
+        var i = 0
         do {
             when {
-                // https://github.com/bazelbuild/rules_kotlin/issues/69: remove once jetbrains adds a flag for it.
+            // https://github.com/bazelbuild/rules_kotlin/issues/69: remove once jetbrains adds a flag for it.
                 args[i].startsWith("--friend-paths") -> {
                     i++
                     friendsPaths = args[i].split(":").toTypedArray()
@@ -38,17 +39,18 @@
                 else -> tally += args[i]
             }
             i++
-        } while(i < args.size)
-        return tally.toTypedArray()
-    }
+        } while (i < args.size)
 
-    fun exec(errStream: java.io.PrintStream, vararg args: kotlin.String): ExitCode {
-        val arguments = delegate.createArguments().also {
-            delegate.parseArguments(preprocessArgs(args), it)
-            if(::friendsPaths.isInitialized) {
+        return delegate.createArguments().also {
+            delegate.parseArguments(tally.toTypedArray(), it)
+            if (friendsPaths != null) {
                 it.friendPaths = friendsPaths
             }
         }
+    }
+
+    fun exec(errStream: java.io.PrintStream, vararg args: kotlin.String): ExitCode {
+        val arguments = createArgs(args)
         val collector = PrintingMessageCollector(errStream, MessageRenderer.PLAIN_RELATIVE_PATHS, arguments.verbose)
         return delegate.exec(collector, Services.EMPTY, arguments)
     }
