diff --git a/.bazelproject b/.bazelproject
index 0d257c3..ed7ce57 100644
--- a/.bazelproject
+++ b/.bazelproject
@@ -22,7 +22,7 @@
   //examples/...
   # These targets are built for the ide only. Primary purpose is to ensure the builder can build the targets, but it's
   # also a good way of testing the intellij plugin.
-  //kotlin/builder:builder_lib_for_ide
+  //kotlin/builder/src/io/bazel/kotlin/builder:builder_kt_for_ide
   //kotlin/builder:compiler_lib_for_ide
 
 test_sources:
diff --git a/kotlin/BUILD.com_github_jetbrains_kotlin b/kotlin/BUILD.com_github_jetbrains_kotlin
index e5a5b17..a2311f8 100644
--- a/kotlin/BUILD.com_github_jetbrains_kotlin
+++ b/kotlin/BUILD.com_github_jetbrains_kotlin
@@ -44,6 +44,12 @@
     ]
 ]
 
+# Kotlin annotations jar. Contains annotations like NotNull.
+java_import(
+    name = "annotations",
+    jars = ["lib/annotations-13.0.jar"],
+)
+
 load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_import")
 
 #  The Kotlin standard libraries. These should be setup in a Toolchain.
diff --git a/kotlin/builder/BUILD b/kotlin/builder/BUILD
index 6114a98..5e7417f 100644
--- a/kotlin/builder/BUILD
+++ b/kotlin/builder/BUILD
@@ -25,37 +25,13 @@
     ],
 )
 
-kt_bootstrap_library(
-    name = "builder_lib",
-    srcs = glob(["src/io/bazel/kotlin/builder/**/*.kt"]),
-    runtime_deps = [
-        "@com_github_jetbrains_kotlin//:kotlin-reflect",
-        "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk7",
-        "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk8",
-        "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar",
-        "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar",
-    ],
-    deps = [
-        "@io_bazel_rules_kotlin_com_google_guava_guava//jar",
-        "@com_github_jetbrains_kotlin//:kotlin-stdlib",
-        "@com_github_jetbrains_kotlin//:kotlin-preloader",
-        "@io_bazel_rules_kotlin//kotlin/builder/proto:kotlin_model",
-        "@io_bazel_rules_kotlin//kotlin/builder/proto:deps",
-        "@io_bazel_rules_kotlin//kotlin/builder/proto:worker",
-        "@io_bazel_rules_kotlin_com_google_inject_guice//jar",
-        "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar",
-        "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java_util//jar",
-        "@io_bazel_rules_kotlin_javax_inject_javax_inject//jar",
-    ],
-)
-
 # The builder artifact.
 java_binary(
     name = "builder",
     data = [":compiler_lib.jar"],
-    main_class = "io.bazel.kotlin.builder.KotlinBuilder",
+    main_class = "io.bazel.kotlin.builder.KotlinBuilderMain",
     visibility = ["//visibility:public"],
-    runtime_deps = [":builder_lib"],
+    runtime_deps = ["//kotlin/builder/src/io/bazel/kotlin/builder"],
 )
 
 filegroup(
@@ -74,18 +50,17 @@
     name = "builder_lib_for_tests",
     runtime_deps = [
         "@com_github_jetbrains_kotlin//:kotlin-reflect",
-        "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar",
+        "@com_github_jetbrains_kotlin//:kotlin-stdlib",
     ],
     testonly = 1,
     data = [":data_for_tests"],
     exports = [
-        ":builder_lib",
+        "//kotlin/builder/src/io/bazel/kotlin/builder",
         "//third_party/jvm/com/google/truth",
         "//third_party/jvm/junit",
         "@io_bazel_rules_kotlin//kotlin/builder/proto:deps",
         "@io_bazel_rules_kotlin//kotlin/builder/proto:kotlin_model",
         "@io_bazel_rules_kotlin_com_google_guava_guava//jar",
-        "@io_bazel_rules_kotlin_com_google_inject_guice//jar",
         "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar",
     ],
     visibility = [
diff --git a/kotlin/builder/bootstrap.bzl b/kotlin/builder/bootstrap.bzl
index ebfeeaa..fc3ed89 100644
--- a/kotlin/builder/bootstrap.bzl
+++ b/kotlin/builder/bootstrap.bzl
@@ -16,7 +16,7 @@
 _BOOTSTRAP_LIB_ARGS=["-jvm-target","1.8"]
 
 def _resolve_dep_label(d):
-    if d.startswith("//kotlin/builder/src/io/bazel/kotlin/builder") and not d.endswith("_for_ide"):
+    if d.startswith("//kotlin/builder/src/io/bazel/kotlin") and not d.endswith("_for_ide"):
         prefix, _, target = d.rpartition(":")
         if target == None:
             # untested
diff --git a/kotlin/builder/integrationtests/KotlinBuilderActionTests.java b/kotlin/builder/integrationtests/KotlinBuilderActionTests.java
index 6e27646..257af8b 100644
--- a/kotlin/builder/integrationtests/KotlinBuilderActionTests.java
+++ b/kotlin/builder/integrationtests/KotlinBuilderActionTests.java
@@ -1,13 +1,12 @@
 package io.bazel.kotlin.builder;
 
-import io.bazel.kotlin.builder.tasks.jvm.KotlinCompiler;
 import org.junit.Test;
 
 public class KotlinBuilderActionTests extends KotlinBuilderTestCase {
   @Test
   public void testCompileSimple() {
     addSource("AClass.kt", "package something;" + "class AClass{}");
-    instance(KotlinCompiler.class).compile(builderCommand());
+    component().jvmCompiler().compile(builderCommand());
     assertFileExists(DirectoryType.CLASSES, "something/AClass.class");
     assertFileDoesNotExist(outputs().getJar());
   }
diff --git a/kotlin/builder/integrationtests/KotlinBuilderTestCase.java b/kotlin/builder/integrationtests/KotlinBuilderTestCase.java
index 5fe32c7..c4a7367 100644
--- a/kotlin/builder/integrationtests/KotlinBuilderTestCase.java
+++ b/kotlin/builder/integrationtests/KotlinBuilderTestCase.java
@@ -2,7 +2,7 @@
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import com.google.inject.Injector;
+import io.bazel.kotlin.builder.toolchain.KotlinToolchain;
 import io.bazel.kotlin.model.KotlinModel;
 import org.junit.Before;
 
@@ -25,7 +25,12 @@
 
   private final KotlinModel.CompilationTask.Builder builder =
       KotlinModel.CompilationTask.newBuilder();
-  private final Injector injector = KotlinToolchain.createInjector(() -> System.out, null);
+  private final KotlinBuilderComponent component =
+      DaggerKotlinBuilderComponent.builder()
+          .out(System.err)
+          .toolchain(KotlinToolchain.createToolchain())
+          .build();
+
   private String label = null;
   private Path inputSourceDir = null;
 
@@ -54,8 +59,8 @@
     return builder.build();
   }
 
-  protected <T> T instance(Class<T> clazz) {
-    return injector.getInstance(clazz);
+  protected KotlinBuilderComponent component() {
+    return component;
   }
 
   protected void addSource(String filename, String... lines) {
@@ -85,19 +90,20 @@
     inputSourceDir = Paths.get(createTestOuputDirectory(prefixPath.resolve("input_sources")));
 
     builder.clear();
-    builder.getInfoBuilder()
-            .setLabel("//some/bogus:" + label)
-            .setModuleName("some_bogus_module")
-            .setPlatform(KotlinModel.CompilationTask.Info.Platform.JVM)
-            .setRuleKind(KotlinModel.CompilationTask.Info.RuleKind.LIBRARY)
-            .setToolchainInfo(
-                KotlinModel.KotlinToolchainInfo.newBuilder()
-                    .setCommon(
-                        KotlinModel.KotlinToolchainInfo.Common.newBuilder()
-                            .setApiVersion("1.2")
-                            .setCoroutines("enabled")
-                            .setLanguageVersion("1.2"))
-                    .setJvm(KotlinModel.KotlinToolchainInfo.Jvm.newBuilder().setJvmTarget("1.8")));
+    builder
+        .getInfoBuilder()
+        .setLabel("//some/bogus:" + label)
+        .setModuleName("some_bogus_module")
+        .setPlatform(KotlinModel.CompilationTask.Info.Platform.JVM)
+        .setRuleKind(KotlinModel.CompilationTask.Info.RuleKind.LIBRARY)
+        .setToolchainInfo(
+            KotlinModel.KotlinToolchainInfo.newBuilder()
+                .setCommon(
+                    KotlinModel.KotlinToolchainInfo.Common.newBuilder()
+                        .setApiVersion("1.2")
+                        .setCoroutines("enabled")
+                        .setLanguageVersion("1.2"))
+                .setJvm(KotlinModel.KotlinToolchainInfo.Jvm.newBuilder().setJvmTarget("1.8")));
     builder
         .getDirectoriesBuilder()
         .setClasses(prefixPath.resolve("classes").toAbsolutePath().toString())
diff --git a/kotlin/builder/integrationtests/KotlinBuilderTests.java b/kotlin/builder/integrationtests/KotlinBuilderTests.java
index e046fed..7c0dd1a 100644
--- a/kotlin/builder/integrationtests/KotlinBuilderTests.java
+++ b/kotlin/builder/integrationtests/KotlinBuilderTests.java
@@ -2,8 +2,6 @@
 
 import com.google.common.truth.Truth;
 import com.google.devtools.build.lib.view.proto.Deps;
-
-import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor;
 import io.bazel.kotlin.model.KotlinModel;
 import org.junit.Test;
 
@@ -46,9 +44,9 @@
       }
     }
     int timeoutSeconds = 10;
-    KotlinJvmTaskExecutor executor = instance(KotlinJvmTaskExecutor.class);
+//    KotlinJvmTaskExecutor executor = instance(KotlinJvmTaskExecutor.class);
     try {
-      CompletableFuture.runAsync(() -> executor.compile(command))
+      CompletableFuture.runAsync(() -> component().jvmTaskExecutor().compile(command))
           .get(timeoutSeconds, TimeUnit.SECONDS);
     } catch (TimeoutException e) {
       throw new AssertionError("did not complete in: " + timeoutSeconds);
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/BUILD b/kotlin/builder/src/io/bazel/kotlin/builder/BUILD
new file mode 100644
index 0000000..f76b592
--- /dev/null
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/BUILD
@@ -0,0 +1,51 @@
+# Copyright 2018 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+load("//kotlin/builder:bootstrap.bzl", "kt_bootstrap_library")
+
+kt_bootstrap_library(
+    name = "builder_kt",
+    srcs = glob([
+        "toolchain/*.kt",
+        "tasks/**/*.kt",
+        "utils/**/*.kt",
+    ]),
+    deps = [
+        "@com_github_jetbrains_kotlin//:kotlin-preloader",
+        "@io_bazel_rules_kotlin//kotlin/builder/proto:deps",
+        "@io_bazel_rules_kotlin//kotlin/builder/proto:kotlin_model",
+        "@io_bazel_rules_kotlin//kotlin/builder/proto:worker",
+        "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar",
+        "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java_util//jar",
+        "@io_bazel_rules_kotlin_javax_inject_javax_inject//jar",
+    ],
+)
+
+java_library(
+    name = "builder",
+    srcs = glob(["*.java"]),
+    visibility = ["//kotlin/builder:__subpackages__"],
+    exports = [":builder_kt"],
+    deps = [
+        ":builder_kt",
+        "//kotlin/builder/proto:kotlin_model",
+        "//third_party:dagger",
+        "@com_github_jetbrains_kotlin//:annotations",
+    ],
+    runtime_deps = [
+        "@com_github_jetbrains_kotlin//:kotlin-stdlib",
+        "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk7",
+        "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk8",
+        "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar",
+    ]
+)
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilderComponent.java b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilderComponent.java
new file mode 100644
index 0000000..73e187a
--- /dev/null
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilderComponent.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2018 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.bazel.kotlin.builder;
+
+import dagger.BindsInstance;
+import dagger.Component;
+import dagger.Provides;
+import io.bazel.kotlin.builder.tasks.KotlinBuilder;
+import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmCompiler;
+import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor;
+import io.bazel.kotlin.builder.toolchain.KotlinToolchain;
+import io.bazel.kotlin.builder.tasks.BazelWorker;
+import io.bazel.kotlin.builder.utils.KotlinCompilerPluginArgsEncoder;
+
+import javax.inject.Singleton;
+import java.io.PrintStream;
+
+@Singleton
+@dagger.Component(modules = {KotlinBuilderComponent.Module.class})
+public interface KotlinBuilderComponent {
+  KotlinToolchain toolchain();
+  KotlinJvmTaskExecutor jvmTaskExecutor();
+  KotlinJvmCompiler jvmCompiler();
+  BazelWorker worker();
+
+  @Component.Builder
+  interface Builder {
+    @BindsInstance
+    KotlinBuilderComponent.Builder toolchain(KotlinToolchain toolchain);
+
+    @BindsInstance
+    KotlinBuilderComponent.Builder out(PrintStream out);
+
+    KotlinBuilderComponent build();
+  }
+
+  @dagger.Module
+  class Module {
+    @Provides
+    public KotlinCompilerPluginArgsEncoder providePluginArgEncoder(KotlinToolchain toolchain) {
+      return new KotlinCompilerPluginArgsEncoder(
+          toolchain.getKapt3Plugin().getJarPath(), toolchain.getKapt3Plugin().getId());
+    }
+
+    @Provides
+    public BazelWorker provideWorker(KotlinBuilder builder) {
+      return new BazelWorker(builder, System.err, "KotlinCompile");
+    }
+  }
+}
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilderMain.java b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilderMain.java
new file mode 100644
index 0000000..c7182da
--- /dev/null
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilderMain.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2018 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.bazel.kotlin.builder;
+
+import io.bazel.kotlin.builder.toolchain.KotlinToolchain;
+
+import java.util.Arrays;
+
+public class KotlinBuilderMain {
+  public static void main(String[] args) {
+    KotlinBuilderComponent component =
+        DaggerKotlinBuilderComponent.builder()
+            .toolchain(KotlinToolchain.createToolchain())
+            .out(System.err)
+            .build();
+    System.exit(component.worker().apply(Arrays.asList(args)));
+  }
+}
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt
deleted file mode 100644
index 22424a1..0000000
--- a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2018 The Bazel Authors. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.bazel.kotlin.builder
-
-import com.google.inject.*
-import com.google.inject.util.Modules
-import io.bazel.kotlin.builder.utils.resolveVerified
-import org.jetbrains.kotlin.preloading.ClassPreloadingUtils
-import org.jetbrains.kotlin.preloading.Preloader
-import java.io.File
-import java.io.PrintStream
-import java.io.PrintWriter
-import java.nio.file.Path
-import java.nio.file.Paths
-import javax.inject.Qualifier
-
-class KotlinToolchain private constructor(
-    internal val javaHome: Path,
-    val kotlinHome: Path,
-    internal val classLoader: ClassLoader,
-    val kotlinStandardLibraries: List<String> = listOf(
-        "kotlin-stdlib.jar",
-        "kotlin-stdlib-jdk7.jar",
-        "kotlin-stdlib-jdk8.jar"
-    )
-) {
-    companion object {
-        internal val NO_ARGS = arrayOf<Any>()
-
-        private val isJdk9OrNewer = !System.getProperty("java.version").startsWith("1.")
-        private val javaRunfiles get() = Paths.get(System.getenv("JAVA_RUNFILES"))
-
-        private fun createClassLoader(javaHome: Path, kotlinHome: Path): ClassLoader {
-            val preloadJars = mutableListOf<File>().also {
-                it += kotlinHome.resolveVerified("lib", "kotlin-compiler.jar")
-                it += javaRunfiles.resolveVerified("io_bazel_rules_kotlin", "kotlin", "builder", "compiler_lib.jar")
-                if (!isJdk9OrNewer) {
-                    it += javaHome.resolveVerified("lib", "tools.jar")
-                }
-            }
-            return ClassPreloadingUtils.preloadClasses(
-                preloadJars,
-                Preloader.DEFAULT_CLASS_NUMBER_ESTIMATE,
-                ClassLoader.getSystemClassLoader(),
-                null
-            )
-        }
-
-        private fun createToolchain(): KotlinToolchain {
-            val kotlinHome = Paths.get("external", "com_github_jetbrains_kotlin")
-            val javaHome = Paths.get(System.getProperty("java.home")).let {
-                it.takeIf { !it.endsWith(Paths.get("jre")) } ?: it.parent
-            }
-            return KotlinToolchain(
-                javaHome,
-                kotlinHome,
-                createClassLoader(javaHome, kotlinHome)
-            )
-        }
-
-        /**
-         * @param outputProvider A provider for the output stream to write to. A provider is used here as the System.err
-         * gets rebound when the worker is executing.
-         */
-        @JvmStatic
-        fun createInjector(outputProvider: Provider<PrintStream>, overrides: Module? = null): Injector {
-            val toolchain = createToolchain()
-            val module = object : AbstractModule() {
-                override fun configure() {
-                    bind(KotlinToolchain::class.java).toInstance(toolchain)
-                    bind(PrintStream::class.java).toProvider(outputProvider)
-                    install(KotlinToolchainModule)
-                }
-            }
-            return Guice.createInjector(
-                overrides?.let { Modules.override(module).with(it) } ?: module
-            )
-        }
-    }
-
-    data class CompilerPlugin(val jarPath: String, val id: String) {
-        @Qualifier
-        annotation class Kapt3
-    }
-
-    interface JavacInvoker {
-        fun compile(args: Array<String>): Int
-        fun compile(args: Array<String>, out: PrintWriter): Int
-    }
-
-
-    interface JDepsInvoker {
-        fun run(args: Array<String>, out: PrintWriter): Int
-    }
-
-
-    interface KotlincInvoker {
-        fun compile(args: Array<String>, out: PrintStream): Int
-    }
-}
-
-
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchainModule.kt b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchainModule.kt
deleted file mode 100644
index 5bb5cc1..0000000
--- a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchainModule.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2018 The Bazel Authors. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.bazel.kotlin.builder
-
-import com.google.inject.AbstractModule
-import com.google.inject.Provides
-import io.bazel.kotlin.builder.KotlinToolchain.Companion.NO_ARGS
-import io.bazel.kotlin.builder.utils.resolveVerified
-import java.io.PrintStream
-import java.io.PrintWriter
-
-internal object KotlinToolchainModule : AbstractModule() {
-    @Provides
-    fun javacInvoker(toolchain: KotlinToolchain): KotlinToolchain.JavacInvoker = object : KotlinToolchain.JavacInvoker {
-        val c = toolchain.classLoader.loadClass("com.sun.tools.javac.Main")
-        val m = c.getMethod("compile", Array<String>::class.java)
-        val mPw = c.getMethod("compile", Array<String>::class.java, PrintWriter::class.java)
-        override fun compile(args: Array<String>) = m.invoke(c, args) as Int
-        override fun compile(args: Array<String>, out: PrintWriter) = mPw.invoke(c, args, out) as Int
-    }
-
-    @Provides
-    fun jdepsInvoker(toolchain: KotlinToolchain): KotlinToolchain.JDepsInvoker = object : KotlinToolchain.JDepsInvoker {
-        val clazz = toolchain.classLoader.loadClass("com.sun.tools.jdeps.Main")
-        val method = clazz.getMethod("run", Array<String>::class.java, PrintWriter::class.java)
-        override fun run(args: Array<String>, out: PrintWriter): Int = method.invoke(clazz, args, out) as Int
-    }
-
-    @Provides
-    fun kotlincInvoker(toolchain: KotlinToolchain): KotlinToolchain.KotlincInvoker =
-        object : KotlinToolchain.KotlincInvoker {
-            val compilerClass = toolchain.classLoader.loadClass("io.bazel.kotlin.compiler.BazelK2JVMCompiler")
-            val exitCodeClass = toolchain.classLoader.loadClass("org.jetbrains.kotlin.cli.common.ExitCode")
-
-            val compiler = compilerClass.getConstructor().newInstance()
-            val execMethod = compilerClass.getMethod("exec", PrintStream::class.java, Array<String>::class.java)
-            val getCodeMethod = exitCodeClass.getMethod("getCode")
-
-
-            override fun compile(args: Array<String>, out: PrintStream): Int {
-                val exitCodeInstance = execMethod.invoke(compiler, out, args)
-                return getCodeMethod.invoke(exitCodeInstance, *NO_ARGS) as Int
-            }
-        }
-
-    @Provides
-    @KotlinToolchain.CompilerPlugin.Kapt3
-    fun provideKapt3(toolchain: KotlinToolchain): KotlinToolchain.CompilerPlugin =
-        KotlinToolchain.CompilerPlugin(
-            toolchain.kotlinHome.resolveVerified("lib", "kotlin-annotation-processing.jar").absolutePath,
-            "org.jetbrains.kotlin.kapt3"
-        )
-
-    @Provides
-    fun provideBazelWorker(kotlinBuilder: KotlinBuilder, output: PrintStream): BazelWorker =
-        BazelWorker(kotlinBuilder, output, "KotlinCompile")
-}
\ No newline at end of file
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/BazelWorker.kt
similarity index 93%
rename from kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/BazelWorker.kt
index 19c2a7f..94bf289 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/BazelWorker.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder
+package io.bazel.kotlin.builder.tasks
 
 
 import com.google.devtools.build.lib.worker.WorkerProtocol
@@ -24,21 +24,6 @@
 import java.nio.file.Paths
 import java.util.stream.Collectors
 
-sealed class ToolException(
-    msg: String,
-    ex: Throwable? = null
-) : RuntimeException(msg, ex)
-
-class CompilationException(msg: String, cause: Throwable? = null) :
-    ToolException(msg, cause)
-
-class CompilationStatusException(
-    msg: String,
-    val status: Int,
-    val lines: List<String> = emptyList()
-) : ToolException("$msg:${lines.joinToString("\n", "\n")}")
-
-
 /**
  * Interface for command line programs.
  *
@@ -161,7 +146,6 @@
                     } catch (e: IOException) {
                         throw RuntimeException(e)
                     }
-
                 }
             }
         }
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt
similarity index 83%
rename from kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt
index b56b8dd..74a6153 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt
@@ -13,28 +13,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder
+package io.bazel.kotlin.builder.tasks
 
-import com.google.inject.Inject
-import com.google.inject.Provider
-import com.google.inject.Singleton
 import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor
+import io.bazel.kotlin.builder.toolchain.CompilationStatusException
 import io.bazel.kotlin.builder.utils.*
-import io.bazel.kotlin.builder.utils.jars.SourceJarExtractor
 import io.bazel.kotlin.model.KotlinModel
+import io.bazel.kotlin.builder.utils.jars.SourceJarExtractor
 import java.nio.file.Paths
+import javax.inject.Inject
+import javax.inject.Singleton
 
 @Singleton
 @Suppress("MemberVisibilityCanBePrivate")
 class KotlinBuilder @Inject internal constructor(
-    private val commandBuilder: TaskBuilder,
+    private val taskBuilder: TaskBuilder,
     private val jvmTaskExecutor: KotlinJvmTaskExecutor
 ) : CommandLineProgram {
     fun execute(args: List<String>): Int =
         ArgMaps.from(args).let { execute(it) }
 
     fun execute(args: ArgMap): Int =
-        commandBuilder.fromInput(args).let { execute(it) }
+        taskBuilder.fromInput(args).let { execute(it) }
 
     fun execute(command: KotlinModel.CompilationTask): Int {
         ensureDirectories(
@@ -74,12 +74,4 @@
     override fun apply(args: List<String>): Int {
         return execute(args)
     }
-
-    companion object {
-        @JvmStatic
-        fun main(args: Array<String>) {
-            val worker = KotlinToolchain.createInjector(Provider { System.err }).getInstance(BazelWorker::class.java)
-            System.exit(worker.apply(args.toList()))
-        }
-    }
 }
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/TaskBuilder.kt
similarity index 99%
rename from kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/TaskBuilder.kt
index 204d623..0ee3eff 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/TaskBuilder.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder
+package io.bazel.kotlin.builder.tasks
 
 import com.google.protobuf.util.JsonFormat
 import io.bazel.kotlin.builder.utils.ArgMap
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt
index ddbab12..a6197a7 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt
@@ -16,33 +16,29 @@
 package io.bazel.kotlin.builder.tasks.jvm
 
 import com.google.devtools.build.lib.view.proto.Deps
-import com.google.inject.ImplementedBy
-import com.google.inject.Inject
-import io.bazel.kotlin.builder.CompilationException
-import io.bazel.kotlin.builder.CompilationStatusException
-import io.bazel.kotlin.builder.KotlinToolchain
+import io.bazel.kotlin.builder.toolchain.CompilationException
+import io.bazel.kotlin.builder.toolchain.CompilationStatusException
+import io.bazel.kotlin.builder.toolchain.KotlinToolchain
+import io.bazel.kotlin.model.KotlinModel
 import io.bazel.kotlin.builder.utils.joinedClasspath
 import io.bazel.kotlin.builder.utils.resolveVerified
 import io.bazel.kotlin.builder.utils.rootCause
-import io.bazel.kotlin.model.KotlinModel
 import java.io.ByteArrayOutputStream
 import java.io.FileOutputStream
 import java.io.PrintWriter
 import java.nio.file.Files
 import java.nio.file.Paths
+import javax.inject.Inject
+import javax.inject.Singleton
 
-@ImplementedBy(DefaultJDepsGenerator::class)
-interface JDepsGenerator {
-    fun generateJDeps(command: KotlinModel.CompilationTask)
-}
-
-private class DefaultJDepsGenerator @Inject constructor(
+@Singleton
+internal class JDepsGenerator  @Inject constructor(
     toolchain: KotlinToolchain,
-    val invoker: KotlinToolchain.JDepsInvoker
-) : JDepsGenerator {
+    private val invoker: KotlinToolchain.JDepsInvoker
+) {
     private val isKotlinImplicit = JdepsParser.pathSuffixMatchingPredicate(
         toolchain.kotlinHome.resolveVerified("lib").toPath(), *toolchain.kotlinStandardLibraries.toTypedArray())
-    override fun generateJDeps(command: KotlinModel.CompilationTask) {
+    fun generateJDeps(command: KotlinModel.CompilationTask) {
         val jdepsContent =
             if (command.inputs.classpathList.isEmpty()) {
                 Deps.Dependencies.newBuilder().let {
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt
index 1fa912e..d260143 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt
@@ -15,23 +15,19 @@
  */
 package io.bazel.kotlin.builder.tasks.jvm
 
-import com.google.inject.ImplementedBy
-import com.google.inject.Inject
-import io.bazel.kotlin.builder.CompilationStatusException
-import io.bazel.kotlin.builder.KotlinToolchain
+import io.bazel.kotlin.builder.toolchain.CompilationStatusException
+import io.bazel.kotlin.builder.toolchain.KotlinToolchain
+import io.bazel.kotlin.model.KotlinModel.CompilationTask
 import io.bazel.kotlin.builder.utils.addAll
 import io.bazel.kotlin.builder.utils.joinedClasspath
-import io.bazel.kotlin.model.KotlinModel.CompilationTask
+import javax.inject.Inject
+import javax.inject.Singleton
 
-@ImplementedBy(DefaultJavaCompiler::class)
-interface JavaCompiler {
-    fun compile(command: CompilationTask)
-}
-
-private class DefaultJavaCompiler @Inject constructor(
-    val javacInvoker: KotlinToolchain.JavacInvoker
-) : JavaCompiler {
-    override fun compile(command: CompilationTask) {
+@Singleton
+internal class JavaCompiler @Inject constructor(
+    private val javacInvoker: KotlinToolchain.JavacInvoker
+) {
+   fun compile(command: CompilationTask) {
         val i = command.inputs
         val d = command.directories
         if (i.javaSourcesList.isNotEmpty()) {
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt
index 5614add..0c923e6 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt
@@ -20,9 +20,8 @@
 import java.nio.file.Paths
 import java.util.*
 import java.util.function.Predicate
-import java.util.stream.Stream
 
-class JdepsParser private constructor(private val filename: String, private val isImplicit: Predicate<String>) {
+internal class JdepsParser private constructor(private val filename: String, private val isImplicit: Predicate<String>) {
     private val packageSuffix: String = " ($filename)"
 
     private val depMap = HashMap<String, Deps.Dependency.Builder>()
@@ -120,7 +119,7 @@
         ): Deps.Dependencies {
             val filename = Paths.get(classJar).fileName.toString()
             val jdepsParser = JdepsParser(filename, isImplicit)
-            Stream.of(*classPath.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray())
+            classPath.split(":".toRegex()).dropLastWhile { it.isEmpty() }.stream()
                 .forEach { x -> jdepsParser.consumeJarLine(x, Deps.Dependency.Kind.UNUSED) }
             jdepLines.forEach { jdepsParser.processLine(it) }
 
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt
index c72628c..9b7a594 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt
@@ -15,16 +15,17 @@
  */
 package io.bazel.kotlin.builder.tasks.jvm
 
-import com.google.inject.Inject
-import com.google.inject.Provider
-import com.google.inject.Singleton
+
 import java.io.File
 import java.io.PrintStream
 import java.nio.file.Paths
+import javax.inject.Inject
+import javax.inject.Provider
+import javax.inject.Singleton
 
 @Singleton
-class KotlinCompilerOutputSink @Inject constructor(
-    val streamProvider: Provider<PrintStream>
+internal class KotlinCompilerOutputSink @Inject constructor(
+    private val streamProvider: Provider<PrintStream>
 ) {
     private val executionRoot: String = Paths.get("").toAbsolutePath().toString() + File.separator
 
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmCompiler.kt
similarity index 83%
rename from kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmCompiler.kt
index 0c7ec10..d5cf108 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmCompiler.kt
@@ -15,11 +15,9 @@
  */
 package io.bazel.kotlin.builder.tasks.jvm
 
-import com.google.inject.ImplementedBy
-import com.google.inject.Inject
-import io.bazel.kotlin.builder.CompilationStatusException
-import io.bazel.kotlin.builder.KotlinCompilerPluginArgsEncoder
-import io.bazel.kotlin.builder.KotlinToolchain
+import io.bazel.kotlin.builder.toolchain.CompilationStatusException
+import io.bazel.kotlin.builder.utils.KotlinCompilerPluginArgsEncoder
+import io.bazel.kotlin.builder.toolchain.KotlinToolchain
 import io.bazel.kotlin.builder.utils.addAll
 import io.bazel.kotlin.builder.utils.joinedClasspath
 import io.bazel.kotlin.model.KotlinModel
@@ -27,12 +25,9 @@
 import java.io.ByteArrayOutputStream
 import java.io.File
 import java.io.PrintStream
+import javax.inject.Inject
+import javax.inject.Singleton
 
-@ImplementedBy(DefaultKotlinCompiler::class)
-interface KotlinCompiler {
-    fun runAnnotationProcessor(command: KotlinModel.CompilationTask): List<String>
-    fun compile(command: KotlinModel.CompilationTask): List<String>
-}
 
 // The Kotlin compiler is not suited for javac compilation as of 1.2.21. The errors are not conveyed directly and would need to be preprocessed, also javac
 // invocations Configured via Kotlin use eager analysis in some corner cases this can result in classpath exceptions from the Java Compiler..
@@ -40,11 +35,12 @@
 // 1 is a standard compilation error
 // 2 is an internal error
 // 3 is the script execution error
-private class DefaultKotlinCompiler @Inject constructor(
-    val compiler: KotlinToolchain.KotlincInvoker,
-    val pluginArgsEncoder: KotlinCompilerPluginArgsEncoder
-) : KotlinCompiler {
-    override fun runAnnotationProcessor(command: KotlinModel.CompilationTask): List<String> {
+@Singleton
+internal class KotlinJvmCompiler @Inject constructor(
+    private val compiler: KotlinToolchain.KotlincInvoker,
+    private val pluginArgsEncoder: KotlinCompilerPluginArgsEncoder
+) {
+    fun runAnnotationProcessor(command: KotlinModel.CompilationTask): List<String> {
         check(command.info.plugins.annotationProcessorsList.isNotEmpty()) {
             "method called without annotation processors"
         }
@@ -79,7 +75,7 @@
         return args
     }
 
-    override fun compile(command: KotlinModel.CompilationTask): List<String> =
+    fun compile(command: KotlinModel.CompilationTask): List<String> =
         with(getCommonArgs(command)) {
             addAll(command.inputs.javaSourcesList)
             addAll(command.inputs.kotlinSourcesList)
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
index e152033..16b358a 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
@@ -15,24 +15,23 @@
  */
 package io.bazel.kotlin.builder.tasks.jvm
 
-import com.google.common.base.Stopwatch
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import io.bazel.kotlin.builder.CompilationStatusException
-import io.bazel.kotlin.builder.utils.expandWithSources
-import io.bazel.kotlin.model.KotlinModel.CompilationTask
-import java.io.File
-import java.util.concurrent.TimeUnit
 
+import io.bazel.kotlin.builder.toolchain.CompilationStatusException
+import io.bazel.kotlin.model.KotlinModel.CompilationTask
+import io.bazel.kotlin.builder.utils.expandWithSources
+import java.io.File
+import javax.inject.Inject
+import javax.inject.Singleton
 
 @Singleton
 class KotlinJvmTaskExecutor @Inject internal constructor(
-    private val kotlinCompiler: KotlinCompiler,
+    private val kotlinCompiler: KotlinJvmCompiler,
     private val outputSink: KotlinCompilerOutputSink,
     private val javaCompiler: JavaCompiler,
     private val jDepsGenerator: JDepsGenerator,
     private val outputJarCreator: OutputJarCreator
 ) {
+    @Suppress("unused")
     class Result(val timings: List<String>, val command: CompilationTask)
 
     fun compile(command: CompilationTask): Result {
@@ -90,15 +89,13 @@
 
     internal class Context {
         val timings = mutableListOf<String>()
-        val sw: Stopwatch = Stopwatch.createUnstarted()
         inline fun <T> execute(name: String, task: () -> T): T {
-            sw.start()
+            val start = System.currentTimeMillis()
             return try {
                 task()
             } finally {
-                sw.stop()
-                timings += "$name: ${sw.elapsed(TimeUnit.MILLISECONDS)} ms"
-                sw.reset()
+                val stop = System.currentTimeMillis()
+                timings += "$name: ${stop - start} ms"
             }
         }
     }
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt
index 15c3be1..ff6c075 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt
@@ -15,19 +15,16 @@
  */
 package io.bazel.kotlin.builder.tasks.jvm
 
-import com.google.inject.ImplementedBy
+import io.bazel.kotlin.model.KotlinModel
 import io.bazel.kotlin.builder.utils.bazelRuleKind
 import io.bazel.kotlin.builder.utils.jars.JarCreator
-import io.bazel.kotlin.model.KotlinModel
 import java.nio.file.Paths
+import javax.inject.Inject
+import javax.inject.Singleton
 
-@ImplementedBy(DefaultOutputJarCreator::class)
-interface OutputJarCreator {
-    fun createOutputJar(command: KotlinModel.CompilationTask)
-}
-
-private class DefaultOutputJarCreator : OutputJarCreator {
-    override fun createOutputJar(command: KotlinModel.CompilationTask) {
+@Singleton
+internal class OutputJarCreator @Inject constructor() {
+    fun createOutputJar(command: KotlinModel.CompilationTask) {
         JarCreator(
             path = Paths.get(command.outputs.jar),
             normalize = true,
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/toolchain/KotlinToolException.kt b/kotlin/builder/src/io/bazel/kotlin/builder/toolchain/KotlinToolException.kt
new file mode 100644
index 0000000..50702e8
--- /dev/null
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/toolchain/KotlinToolException.kt
@@ -0,0 +1,15 @@
+package io.bazel.kotlin.builder.toolchain
+
+sealed class KotlinToolException(
+    msg: String,
+    ex: Throwable? = null
+) : RuntimeException(msg, ex)
+
+class CompilationException(msg: String, cause: Throwable? = null) :
+    KotlinToolException(msg, cause)
+
+class CompilationStatusException(
+    msg: String,
+    val status: Int,
+    val lines: List<String> = emptyList()
+) : KotlinToolException("$msg:${lines.joinToString("\n", "\n")}")
\ No newline at end of file
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/toolchain/KotlinToolchain.kt b/kotlin/builder/src/io/bazel/kotlin/builder/toolchain/KotlinToolchain.kt
new file mode 100644
index 0000000..d087b5c
--- /dev/null
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/toolchain/KotlinToolchain.kt
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2018 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.bazel.kotlin.builder.toolchain
+
+import io.bazel.kotlin.builder.utils.resolveVerified
+import org.jetbrains.kotlin.preloading.ClassPreloadingUtils
+import org.jetbrains.kotlin.preloading.Preloader
+import java.io.File
+import java.io.PrintStream
+import java.io.PrintWriter
+import java.nio.file.Path
+import java.nio.file.Paths
+import javax.inject.Inject
+import javax.inject.Singleton
+
+class KotlinToolchain private constructor(
+    internal val javaHome: Path,
+    val kotlinHome: Path,
+    val classLoader: ClassLoader,
+    val kotlinStandardLibraries: List<String> = listOf(
+        "kotlin-stdlib.jar",
+        "kotlin-stdlib-jdk7.jar",
+        "kotlin-stdlib-jdk8.jar"
+    ),
+    val kapt3Plugin: KotlinToolchain.CompilerPlugin = KotlinToolchain.CompilerPlugin(
+        kotlinHome.resolveVerified("lib", "kotlin-annotation-processing.jar").absolutePath,
+        "org.jetbrains.kotlin.kapt3"
+    )
+) {
+
+    companion object {
+        internal val NO_ARGS = arrayOf<Any>()
+
+        private val isJdk9OrNewer = !System.getProperty("java.version").startsWith("1.")
+        private val javaRunfiles get() = Paths.get(System.getenv("JAVA_RUNFILES"))
+
+        private fun createClassLoader(javaHome: Path, kotlinHome: Path): ClassLoader {
+            val preloadJars = mutableListOf<File>().also {
+                it += kotlinHome.resolveVerified("lib", "kotlin-compiler.jar")
+                it += javaRunfiles.resolveVerified("io_bazel_rules_kotlin", "kotlin", "builder", "compiler_lib.jar")
+                if (!isJdk9OrNewer) {
+                    it += javaHome.resolveVerified("lib", "tools.jar")
+                }
+            }
+            return ClassPreloadingUtils.preloadClasses(
+                preloadJars,
+                Preloader.DEFAULT_CLASS_NUMBER_ESTIMATE,
+                ClassLoader.getSystemClassLoader(),
+                null
+            )
+        }
+
+        @JvmStatic
+        fun createToolchain(): KotlinToolchain {
+            val kotlinHome = Paths.get("external", "com_github_jetbrains_kotlin")
+            val javaHome = Paths.get(System.getProperty("java.home")).let {
+                it.takeIf { !it.endsWith(Paths.get("jre")) } ?: it.parent
+            }
+            return KotlinToolchain(
+                javaHome,
+                kotlinHome,
+                createClassLoader(javaHome, kotlinHome)
+            )
+        }
+
+//        @JvmStatic
+//        fun createToolchainModule(outputProvider: Provider<PrintStream>): Module {
+//            val toolchain = createToolchain()
+//            return object : AbstractModule() {
+//                override fun configure() {
+//                    bind(PrintStream::class.java).toProvider(outputProvider)
+//                    bind(KotlinToolchain::class.java).toInstance(toolchain)
+//                    install(KotlinToolchainModule)
+//                }
+//            }
+//        }
+    }
+
+    data class CompilerPlugin(val jarPath: String, val id: String)
+
+    @Singleton
+    class JavacInvoker @Inject constructor(toolchain: KotlinToolchain) {
+        private val c = toolchain.classLoader.loadClass("com.sun.tools.javac.Main")
+        private val m = c.getMethod("compile", Array<String>::class.java)
+        private val mPw = c.getMethod("compile", Array<String>::class.java, PrintWriter::class.java)
+        fun compile(args: Array<String>) = m.invoke(c, args) as Int
+        fun compile(args: Array<String>, out: PrintWriter) = mPw.invoke(c, args, out) as Int
+    }
+
+    @Singleton
+    class JDepsInvoker @Inject constructor(toolchain: KotlinToolchain) {
+        private val clazz = toolchain.classLoader.loadClass("com.sun.tools.jdeps.Main")
+        private val method = clazz.getMethod("run", Array<String>::class.java, PrintWriter::class.java)
+        fun run(args: Array<String>, out: PrintWriter): Int = method.invoke(clazz, args, out) as Int
+    }
+
+    @Singleton
+    class KotlincInvoker @Inject constructor(toolchain: KotlinToolchain) {
+        private val compilerClass = toolchain.classLoader.loadClass("io.bazel.kotlin.compiler.BazelK2JVMCompiler")
+        private val exitCodeClass = toolchain.classLoader.loadClass("org.jetbrains.kotlin.cli.common.ExitCode")
+
+        private val compiler = compilerClass.getConstructor().newInstance()
+        private val execMethod = compilerClass.getMethod("exec", PrintStream::class.java, Array<String>::class.java)
+        private val getCodeMethod = exitCodeClass.getMethod("getCode")
+
+        fun compile(args: Array<String>, out: PrintStream): Int {
+            val exitCodeInstance = execMethod.invoke(compiler, out, args)
+            return getCodeMethod.invoke(exitCodeInstance, *NO_ARGS) as Int
+        }
+    }
+}
+
+
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt
similarity index 90%
rename from kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt
index e67c1ae..77f2227 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt
@@ -13,21 +13,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder
+package io.bazel.kotlin.builder.utils
 
 
-import io.bazel.kotlin.builder.KotlinToolchain.CompilerPlugin
 import io.bazel.kotlin.model.KotlinModel
 import java.io.ByteArrayOutputStream
 import java.io.ObjectOutputStream
 import java.util.*
-import javax.inject.Inject
-import javax.inject.Singleton
 
-@Singleton
-internal class KotlinCompilerPluginArgsEncoder @Inject constructor(
-    @CompilerPlugin.Kapt3
-    private val kapt3: CompilerPlugin
+class KotlinCompilerPluginArgsEncoder(
+    private val jarPath: String,
+    private val pluginId: String
 ) {
     companion object {
         private fun encodeMap(options: Map<String, String>): String {
@@ -82,8 +78,8 @@
         // passed to kotlinc.
         fun encode(): List<String> =
             listOf(
-                "-Xplugin=${kapt3.jarPath}",
-                "-P", "plugin:${kapt3.id}:configuration=${encodeMultiMap(
+                "-Xplugin=$jarPath",
+                "-P", "plugin:$pluginId:configuration=${encodeMultiMap(
                     tally
                 )}"
             )
diff --git a/kotlin/builder/unittests/BUILD b/kotlin/builder/unittests/BUILD
index 37f6237..494de37 100644
--- a/kotlin/builder/unittests/BUILD
+++ b/kotlin/builder/unittests/BUILD
@@ -15,7 +15,7 @@
     name = "unittests",
     size = "small",
     srcs = glob(["**/*.java"]),
-    test_class = "io.bazel.kotlin.builder.mode.jvm.utils.JdepsParserTest",
+    test_class = "io.bazel.kotlin.builder.tasks.jvm.JdepsParserTest",
     deps = [
         "//kotlin/builder:builder_lib_for_tests",
         "@com_github_jetbrains_kotlin//:kotlin-stdlib",
diff --git a/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java b/kotlin/builder/unittests/io/bazel/kotlin/workers/tasks/jvm/JdepsParserTest.java
similarity index 98%
rename from kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java
rename to kotlin/builder/unittests/io/bazel/kotlin/workers/tasks/jvm/JdepsParserTest.java
index 8bf24ec..f18a9c0 100644
--- a/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java
+++ b/kotlin/builder/unittests/io/bazel/kotlin/workers/tasks/jvm/JdepsParserTest.java
@@ -13,10 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder.mode.jvm.utils;
+package io.bazel.kotlin.builder.tasks.jvm;
 
 import com.google.devtools.build.lib.view.proto.Deps;
-import io.bazel.kotlin.builder.tasks.jvm.JdepsParser;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -29,6 +28,7 @@
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+@SuppressWarnings("KotlinInternalInJava")
 @RunWith(JUnit4.class)
 public class JdepsParserTest {
   private static final String JDK8_FIXTURE =
diff --git a/third_party/BUILD b/third_party/BUILD
index 0746542..d1ef82b 100644
--- a/third_party/BUILD
+++ b/third_party/BUILD
@@ -25,4 +25,23 @@
     jars = [
         "@io_bazel_rules_kotlin_org_jetbrains_kotlinx_kotlinx_coroutines_core//jar",
     ],
+)
+
+java_plugin(
+    name = "dagger_component_plugin",
+    generates_api = 1,
+    processor_class = "dagger.internal.codegen.ComponentProcessor",
+    deps = [
+        "//third_party/jvm/com/google/dagger:dagger_compiler",
+    ],
+    visibility = ["//visibility:private"]
+)
+
+java_library(
+    name = "dagger",
+    exported_plugins = [":dagger_component_plugin"],
+    exports = [
+        "//third_party/jvm/com/google/dagger",
+        "//third_party/jvm/javax/inject:javax_inject",
+    ],
 )
\ No newline at end of file
diff --git a/third_party/dependencies.yaml b/third_party/dependencies.yaml
index fbfb498..6414939 100644
--- a/third_party/dependencies.yaml
+++ b/third_party/dependencies.yaml
@@ -15,10 +15,6 @@
     junit:
       lang: "java"
       version: "4.12"
-  com.google.inject:
-    guice:
-      lang: "java"
-      version: "4.2.0"
   com.google.protobuf:
     protobuf:
       modules: ["java", "java-util"]
diff --git a/third_party/jvm/aopalliance/BUILD b/third_party/jvm/aopalliance/BUILD
deleted file mode 100644
index 15ee13b..0000000
--- a/third_party/jvm/aopalliance/BUILD
+++ /dev/null
@@ -1,12 +0,0 @@
-licenses(["notice"])
-java_library(
-    name = "aopalliance",
-    exports = [
-        "//external:jar/io_bazel_rules_kotlin_aopalliance/aopalliance"
-    ],
-    visibility = [
-        "//third_party/jvm:__subpackages__"
-    ]
-)
-
-
diff --git a/third_party/jvm/com/google/inject/BUILD b/third_party/jvm/com/google/inject/BUILD
deleted file mode 100644
index d2857fc..0000000
--- a/third_party/jvm/com/google/inject/BUILD
+++ /dev/null
@@ -1,17 +0,0 @@
-licenses(["notice"])
-java_library(
-    name = "guice",
-    exports = [
-        "//external:jar/io_bazel_rules_kotlin_com/google/inject/guice"
-    ],
-    runtime_deps = [
-        "//third_party/jvm/aopalliance:aopalliance",
-        "//third_party/jvm/com/google/guava:guava",
-        "//third_party/jvm/javax/inject:javax_inject"
-    ],
-    visibility = [
-        "//visibility:public"
-    ]
-)
-
-
diff --git a/third_party/jvm/workspace.bzl b/third_party/jvm/workspace.bzl
index a7318b8..e0ae5a3 100644
--- a/third_party/jvm/workspace.bzl
+++ b/third_party/jvm/workspace.bzl
@@ -66,7 +66,6 @@
 
 def list_dependencies():
     return [
-    {"artifact": "aopalliance:aopalliance:1.0", "lang": "java", "sha1": "0235ba8b489512805ac13a8f9ea77a1ca5ebe3e8", "sha256": "0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", "source": {"sha1": "4a4b6d692e17846a9f3da036438a7ac491d3c814", "sha256": "e6ef91d439ada9045f419c77543ebe0416c3cdfc5b063448343417a3e4a72123", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"} , "name": "io_bazel_rules_kotlin_aopalliance_aopalliance", "actual": "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar", "bind": "jar/io_bazel_rules_kotlin_aopalliance/aopalliance"},
     {"artifact": "com.google.auto.service:auto-service:1.0-rc4", "lang": "java", "sha1": "44954d465f3b9065388bbd2fc08a3eb8fd07917c", "sha256": "e422d49c312fd2031222e7306e8108c1b4118eb9c049f1b51eca280bed87e924", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/service/auto-service/1.0-rc4/auto-service-1.0-rc4.jar", "source": {"sha1": "4e0285a57f33a9139e203687a617d7c98104b73a", "sha256": "285a6d4bc111255b5c99f5393b833f8b9156c4acb4e6c3f7cdde8493e888dd27", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/service/auto-service/1.0-rc4/auto-service-1.0-rc4-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_auto_service_auto_service", "actual": "@io_bazel_rules_kotlin_com_google_auto_service_auto_service//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/auto/service/auto_service"},
     {"artifact": "com.google.auto.value:auto-value:1.5.3", "lang": "java", "sha1": "514df6a7c7938de35c7f68dc8b8f22df86037f38", "sha256": "238d3b7535096d782d08576d1e42f79480713ff0794f511ff2cc147363ec072d", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.3/auto-value-1.5.3.jar", "source": {"sha1": "1bb4def82e18be0b6a58ab089fba288d712db6cb", "sha256": "7c9adb9f49a4f07e226778951e087da85759a9ab53ac375f9d076de6dc84ca2b", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.3/auto-value-1.5.3-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_auto_value_auto_value", "actual": "@io_bazel_rules_kotlin_com_google_auto_value_auto_value//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/auto/value/auto_value"},
     {"artifact": "com.google.auto:auto-common:0.8", "lang": "java", "sha1": "c6f7af0e57b9d69d81b05434ef9f3c5610d498c4", "sha256": "97db1709f57b91b32edacb596ef4641872f227b7d99ad90e467f0d77f5ba134a", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/auto-common/0.8/auto-common-0.8.jar", "source": {"sha1": "24705cafc9997c5eb6ae3270bd6234fdf9912bad", "sha256": "1e258bc08963dc8ffdcf22efa04b9fea6886761e077fc126ebacf92d11c9abec", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/auto-common/0.8/auto-common-0.8-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_auto_auto_common", "actual": "@io_bazel_rules_kotlin_com_google_auto_auto_common//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/auto/auto_common"},
@@ -86,11 +85,9 @@
 # - com.google.dagger:dagger-producers:2.16 wanted version 23.3-jre
 # - com.google.dagger:dagger-spi:2.16 wanted version 23.3-jre
 # - com.google.googlejavaformat:google-java-format:1.4 wanted version 19.0
-# - com.google.inject:guice:4.2.0 wanted version 23.6-android
 # - com.google.protobuf:protobuf-java-util:3.6.0 wanted version 19.0
 # - com.google.truth:truth:0.40 wanted version 23.4-android
     {"artifact": "com.google.guava:guava:25.0-jre", "lang": "java", "sha1": "7319c34fa5866a85b6bad445adad69d402323129", "sha256": "3fd4341776428c7e0e5c18a7c10de129475b69ab9d30aeafbb5c277bb6074fa9", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/guava/guava/25.0-jre/guava-25.0-jre.jar", "source": {"sha1": "030ade485699e7782cc2369b0e5d3d8e0bfc317c", "sha256": "386e429ab4f9e511630038e7b7a331d3dca3931564f592e412ba47995fefd89b", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/guava/guava/25.0-jre/guava-25.0-jre-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_guava_guava", "actual": "@io_bazel_rules_kotlin_com_google_guava_guava//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/guava/guava"},
-    {"artifact": "com.google.inject:guice:4.2.0", "lang": "java", "sha1": "25e1f4c1d528a1cffabcca0d432f634f3132f6c8", "sha256": "2865a82693f0b97f1ef3305a06f0aae3bfc3e63d71b33363af5ec2eed598acb8", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/inject/guice/4.2.0/guice-4.2.0.jar", "source": {"sha1": "6e7f63430060b8589f90165bccf179db41a29dc1", "sha256": "276bffcce41f9144445d67f3b7d35db38ea0c88c05795bfbd851ac9e39c91045", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/inject/guice/4.2.0/guice-4.2.0-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_inject_guice", "actual": "@io_bazel_rules_kotlin_com_google_inject_guice//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/inject/guice"},
     {"artifact": "com.google.j2objc:j2objc-annotations:1.1", "lang": "java", "sha1": "ed28ded51a8b1c6b112568def5f4b455e6809019", "sha256": "2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar", "source": {"sha1": "1efdf5b737b02f9b72ebdec4f72c37ec411302ff", "sha256": "2cd9022a77151d0b574887635cdfcdf3b78155b602abc89d7f8e62aba55cfb4f", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_j2objc_j2objc_annotations", "actual": "@io_bazel_rules_kotlin_com_google_j2objc_j2objc_annotations//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/j2objc/j2objc_annotations"},
     {"artifact": "com.google.protobuf:protobuf-java-util:3.6.0", "lang": "java", "sha1": "3680d0042d4fe0b95ada844ff24da0698a7f0773", "sha256": "ad7f8d67674906ce88077fbb233b427b7068991a61af42ce9301990bdf8f3605", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util/3.6.0/protobuf-java-util-3.6.0.jar", "source": {"sha1": "1ac9d14befa9c98d382529dafa562a2dd4650011", "sha256": "a2959842caed6f0b1dbecfaf0e73ef03117416f967c0532c32d092b6e2b98d60", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util/3.6.0/protobuf-java-util-3.6.0-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_protobuf_protobuf_java_util", "actual": "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java_util//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/protobuf/protobuf_java_util"},
     {"artifact": "com.google.protobuf:protobuf-java:3.6.0", "lang": "java", "sha1": "5333f7e422744d76840c08a106e28e519fbe3acd", "sha256": "8c8a65be83e75ccdcaa21417e303025f1708ea01e8c0a05d6c770e64b6c09ea1", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.6.0/protobuf-java-3.6.0.jar", "source": {"sha1": "6013b3453e0c102a8bd330d37f8e6918ce431882", "sha256": "88411bb0333725b27bf53ed4d95785f6f4b541e22e1e27c60c2be8b3115fc5c4", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.6.0/protobuf-java-3.6.0-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_protobuf_protobuf_java", "actual": "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/protobuf/protobuf_java"},
