diff --git a/.bazelproject b/.bazelproject
index f0131cf..3c59298 100644
--- a/.bazelproject
+++ b/.bazelproject
@@ -18,9 +18,12 @@
 
 targets:
   -//docs/...
-  //kotlin/builder:for_ide
   //:all_local_tests
   //examples/...
+  # These targets are built for the ide only. Primary purpose is to ensure the builder can build the targets, but it's a
+  # also a good way of testing the intellij plugin.
+  //kotlin/builder/src/io/bazel/kotlin/builder:builder_for_ide
+  //kotlin/builder:compiler_lib_for_ide
 
 test_sources:
   */unittests/*
diff --git a/BUILD b/BUILD
index 886f2de..a0e589f 100644
--- a/BUILD
+++ b/BUILD
@@ -16,8 +16,8 @@
 test_suite(
     name = "all_tests",
     tests = [
-        "//kotlin/builder:unittests",
-        "//kotlin/builder:integrationtests",
+        "//kotlin/builder/unittests",
+        "//kotlin/builder/integrationtests",
         "//tests/integrationtests"
     ]
 )
diff --git a/docs/BUILD b/docs/BUILD
index dda09b8..8943957 100644
--- a/docs/BUILD
+++ b/docs/BUILD
@@ -1,35 +1,35 @@
 load("@bazel_skylib//:skylark_library.bzl", "skylark_library")
-load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc" )
+load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc")
 
 skylark_library(
     name = "doc_public",
     srcs = ["//kotlin:kotlin.bzl"],
-    visibility=["//visibility:private"]
+    visibility = ["//visibility:private"],
 )
 
 skylark_library(
     name = "doc_toolchains",
     srcs = ["//kotlin:toolchains.bzl"],
-    visibility=["//visibility:private"]
+    visibility = ["//visibility:private"],
 )
 
 skylark_doc(
     name = "docs",
     srcs = [
         ":doc_public",
-        ":doc_toolchains"
+        ":doc_toolchains",
     ],
     format = "html",
     site_root = select({
         ":local": "/tmp/rules_kotlin",
-        "//conditions:default": "https://bazelbuild.github.io/rules_kotlin"
+        "//conditions:default": "https://bazelbuild.github.io/rules_kotlin",
     }),
-    visibility = ["//visibility:public"]
+    visibility = ["//visibility:public"],
 )
 
 config_setting(
     name = "local",
     values = {
         "define": "local=1",
-    }
-)
\ No newline at end of file
+    },
+)
diff --git a/examples/BUILD b/examples/BUILD
index 95da0c6..dea9df6 100644
--- a/examples/BUILD
+++ b/examples/BUILD
@@ -11,4 +11,4 @@
 # 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(default_visibility = ["//visibility:private"])
\ No newline at end of file
+package(default_visibility = ["//visibility:private"])
diff --git a/examples/dagger/BUILD b/examples/dagger/BUILD
index 5f5c2ff..94ccdc9 100644
--- a/examples/dagger/BUILD
+++ b/examples/dagger/BUILD
@@ -17,29 +17,29 @@
 
 java_plugin(
     name = "dagger_plugin",
+    processor_class = "dagger.internal.codegen.ComponentProcessor",
     deps = [
-        "//third_party/jvm/com/google/dagger:dagger_compiler",
-        "@//third_party/jvm/com/google/guava",
-        "//third_party/jvm/com/google/dagger:dagger_producers",
         "//third_party/jvm/com/google/dagger",
-        "//third_party/jvm/javax/inject:javax_inject"
+        "//third_party/jvm/com/google/dagger:dagger_compiler",
+        "//third_party/jvm/com/google/dagger:dagger_producers",
+        "//third_party/jvm/javax/inject:javax_inject",
+        "@//third_party/jvm/com/google/guava",
     ],
-    processor_class = "dagger.internal.codegen.ComponentProcessor"
 )
 
 java_library(
     name = "dagger_lib",
+    exported_plugins = ["dagger_plugin"],
     exports = [
+        "//third_party/jvm/com/google/dagger",
         "//third_party/jvm/javax/inject:javax_inject",
-        "//third_party/jvm/com/google/dagger"
     ],
-    exported_plugins = ["dagger_plugin"]
 )
 
 # Generate a srcjar to validate intellij plugin correctly attaches it.
 genrule(
     name = "tea_lib_src",
-    tools = ["@local_jdk//:jdk"],
+    outs = ["test.srcjar"],
     cmd = """
 cat << EOF > TeaPot.kt
 package tea
@@ -51,27 +51,27 @@
 external/local_jdk/bin/jar -cf $@ TeaPot.kt
 rm TeaPot.kt
 """,
-    outs = ["test.srcjar"]
+    tools = ["@local_jdk//:jdk"],
 )
 
 kt_jvm_library(
     name = "tea_lib",
-    srcs = [":tea_lib_src"]
+    srcs = [":tea_lib_src"],
 )
 
 kt_jvm_library(
     name = "coffee_lib",
     srcs = glob(["src/**"]),
     deps = [
-        ":tea_lib",
         ":dagger_lib",
-        "//third_party:kotlinx_coroutines"
+        ":tea_lib",
+        "//third_party:kotlinx_coroutines",
     ],
 )
 
 java_binary(
     name = "coffee_app",
     main_class = "coffee.CoffeeApp",
+    visibility = ["//visibility:public"],
     runtime_deps = [":coffee_lib"],
-    visibility = ["//visibility:public"]
 )
diff --git a/kotlin/BUILD.com_github_jetbrains_kotlin b/kotlin/BUILD.com_github_jetbrains_kotlin
new file mode 100644
index 0000000..e5a5b17
--- /dev/null
+++ b/kotlin/BUILD.com_github_jetbrains_kotlin
@@ -0,0 +1,66 @@
+# 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(default_visibility = ["//visibility:public"])
+
+# Kotlin home filegroup containing everything that is needed.
+filegroup(
+    name = "home",
+    srcs = glob(["**"]),
+)
+
+# Kotlin dependencies that are internal to this repo and are meant to be loaded at runtime.
+[
+    java_import(
+        name = "%s" % art,
+        jars = ["lib/%s.jar" % art],
+        neverlink = 1,
+    )
+    for art in [
+        "kotlin-annotation-processing",
+        "kotlin-annotation-processing-runtime",
+        "kotlin-compiler",
+    ]
+]
+
+# Kotlin dependencies that are internal to this repo and may be linked.
+[
+    java_import(
+        name = "%s" % art,
+        jars = ["lib/%s.jar" % art],
+    )
+    for art in [
+        "kotlin-preloader",
+    ]
+]
+
+load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_import")
+
+#  The Kotlin standard libraries. These should be setup in a Toolchain.
+[
+    kt_jvm_import(
+        name = "kotlin-%s" % art,
+        jars = ["lib/kotlin-%s.jar" % art],
+        srcjar = "lib/kotlin-%s-sources.jar" % art,
+        visibility = ["//visibility:public"],
+    )
+    for art in [
+        "runtime",
+        "stdlib",
+        "stdlib-jdk7",
+        "stdlib-jdk8",
+        "reflect",
+        "test",
+        "script-runtime",
+    ]
+]
diff --git a/kotlin/builder/BUILD b/kotlin/builder/BUILD
index 7a104a5..b11de2a 100644
--- a/kotlin/builder/BUILD
+++ b/kotlin/builder/BUILD
@@ -11,83 +11,34 @@
 # 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", "kotlin_worker_lib")
-load("//kotlin:kotlin.bzl", "kt_jvm_library")
-
-# Should not be linked against to allow the compiler workspace to be switched out when toolchains support this.
-COMPILER_DEPS = [
-    "@com_github_jetbrains_kotlin//:compiler",
-    "@com_github_jetbrains_kotlin//:kotlin-annotation-processing",
-    "@com_github_jetbrains_kotlin//:kotlin-script-runtime",
-]
-
-# Common depset for the builder.
-COMMON_DEPS = [
-    "//kotlin/builder/proto:deps",
-    "//kotlin/builder/proto:kotlin_model",
-    "//kotlin/builder/proto:worker",
-    "@com_github_jetbrains_kotlin//:preloader",
-    "@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_com_google_inject_guice//jar",
-    "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar",
-    "@io_bazel_rules_kotlin_javax_inject_javax_inject//jar",
-    "@io_bazel_rules_kotlin_com_google_guava_guava//jar",
-    "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar",
-    "@com_github_jetbrains_kotlin//:kotlin-reflect",
-    "@com_github_jetbrains_kotlin//:kotlin-stdlib",
-    "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk7",
-    "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk8",
-]
+load("//kotlin/builder:bootstrap.bzl", "kt_bootstrap_library")
 
 # The compiler library, this is co-located in the kotlin compiler classloader.
-kotlin_worker_lib(
+kt_bootstrap_library(
     name = "compiler_lib",
     srcs = glob(["src/io/bazel/kotlin/compiler/**/*.kt"]),
-    args = [
-        "-jvm-target","1.8",
+    neverlink_deps = [
+        "@com_github_jetbrains_kotlin//:kotlin-compiler",
+        "@com_github_jetbrains_kotlin//:kotlin-annotation-processing",
+        "@com_github_jetbrains_kotlin//:kotlin-script-runtime",
     ],
-    neverlink_deps = COMPILER_DEPS,
-)
-
-# The builder library.
-kotlin_worker_lib(
-    name = "builder_lib",
-    srcs = glob(["src/io/bazel/kotlin/builder/**/*.kt"]),
-    args = [
-        "-jvm-target","1.8",
-    ],
-    deps = COMMON_DEPS
-)
-
-# This is a hack so that the builder and compiler sources can be picked up by intellij.
-kt_jvm_library(
-    name = "for_ide",
-    srcs = glob(["src/**/*.kt"]),
-    visibility = ["//visibility:private"],
-    deps = COMMON_DEPS + COMPILER_DEPS,
 )
 
 # The builder artifact.
 java_binary(
     name = "builder",
+    data = [":compiler_lib.jar"],
     main_class = "io.bazel.kotlin.builder.KotlinBuilder",
     visibility = ["//visibility:public"],
-    runtime_deps = [
-        ":builder_lib",
-    ],
-    data = [
-        ":compiler_lib.jar"
-    ]
+    runtime_deps = ["//kotlin/builder/src/io/bazel/kotlin/builder"],
 )
 
-# This is defined so that tests can wire up a builder.
 filegroup(
-    name = "builder_runfiles_for_tests",
+    name = "data_for_tests",
     srcs = [
-        ":compiler_lib.jar",
-        "@com_github_jetbrains_kotlin//:compiler",
+        ":compiler_lib",
         "@com_github_jetbrains_kotlin//:kotlin-annotation-processing",
+        "@com_github_jetbrains_kotlin//:kotlin-compiler",
         "@com_github_jetbrains_kotlin//:kotlin-script-runtime",
     ],
     testonly = 1,
@@ -95,32 +46,25 @@
 )
 
 java_library(
-    name = "builder_for_tests",
-    testonly = 1,
-    exports = COMMON_DEPS + [
-        ":builder_lib",
-        ":compiler_lib",
+    name = "builder_lib_for_tests",
+    runtime_deps = [
+        "@com_github_jetbrains_kotlin//:kotlin-reflect",
+        "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar",
     ],
-    data = [
-        "builder_runfiles_for_tests"
-    ]
-)
-
-java_test(
-    name = "integrationtests",
-    srcs = glob(["integrationtests/*.java"]),
-    test_class = "io.bazel.kotlin.builder.KotlinBuilderTestSuite",
-    deps = [
-        "//kotlin/builder:builder_for_tests",
+    testonly = 1,
+    data = [":data_for_tests"],
+    exports = [
+        "//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",
     ],
-)
-
-java_test(
-    name = "unittests",
-    size = "small",
-    srcs = glob(["unittests/**/*.java"]),
-    test_class = "io.bazel.kotlin.builder.mode.jvm.utils.JdepsParserTest",
-    deps = [":builder_for_tests"],
+    visibility = [
+        "//kotlin/builder/integrationtests:__subpackages__",
+        "//kotlin/builder/unittests:__subpackages__"
+    ]
 )
diff --git a/kotlin/builder/bootstrap.bzl b/kotlin/builder/bootstrap.bzl
index 2dac1df..67f8c21 100644
--- a/kotlin/builder/bootstrap.bzl
+++ b/kotlin/builder/bootstrap.bzl
@@ -11,72 +11,86 @@
 # 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:kotlin.bzl", _for_ide = "kt_jvm_library", "kt_jvm_import")
+load("//kotlin:kotlin.bzl", _for_ide = "kt_jvm_library")
 
-_HEADER = """
-function join_by { local IFS="$$1"; shift; echo "$$*"; }
+_BOOTSTRAP_LIB_ARGS=["-jvm-target","1.8"]
 
-CP=$$(join_by : $(locations :%s))
-"""
+def _resolve_dep_label(d):
+    if d.startswith("//kotlin/builder/src/io/bazel/kotlin/builder") and not d.endswith("_for_ide"):
+        prefix, _, target = d.rpartition(":")
+        if target == None:
+            # untested
+            return d + "_for_ide"
+        else:
+            _ , _, target = d.rpartition("/")
+            return d + ":" + target + "_for_ide"
+    else:
+        return d
 
-# We manually call the Kotlin compiler by constructing the correct Java classpath, because the usual
-# "kotlinc" wrapper script fails to correctly detect KOTLIN_HOME unless we run with
-# --spawn_strategy=standalone
-def _gen_cmd(name, args):
-    return (_HEADER + """
-ARGS="%s"
+def kt_bootstrap_library(name, srcs, deps=[], neverlink_deps=[], runtime_deps=[]):
+    """
+    Simple compilation of a kotlin library using a non-persistent worker. The target is a JavaInfo provider.
 
-KOTLIN_HOME=external/com_github_jetbrains_kotlin
-java -Xmx256M -Xms32M -noverify \
-  -cp $${KOTLIN_HOME}/lib/kotlin-preloader.jar org.jetbrains.kotlin.preloading.Preloader \
-  -cp $${KOTLIN_HOME}/lib/kotlin-compiler.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler \
-  -cp $${CP} -d $(OUTS) $${ARGS} $(SRCS)
-""") % (name,args)
+    The target is tagged `"no-ide"` as intellij can't compile it. A seperate private target is created which is suffixed
+    with `_for_ide`. If the dep is under the package `//kotlin/builder/src/io/bazel/kotlin/builder/...` then it will be
+    added to the `_for_ide` target by adding a `_for_ide` prefix.
 
-def kotlin_worker_lib(name, srcs, args = [], deps=[], runtime_deps=[], neverlink_deps=[]):
+    deps: the dependenices, the are setup as runtime_deps of the library.
+    neverlink_deps: deps that won't be linked. These deps are added to the `"for_ide"` target.
+    """
+    jar_label = name + "_jar"
     dep_label = name + "_deps"
-    jar_file_label =  name + "_file"
-    jar_name = name+".jar"
-    jar_sources_file_label = jar_file_label + "_sources"
-    jar_sources_name = name + "-sources.jar"
-
     native.filegroup(
         name = dep_label,
         srcs = deps + neverlink_deps,
-        visibility = ["//visibility:private"]
+        visibility=["//visibility:private"]
     )
+    command="""
+KOTLIN_HOME=external/com_github_jetbrains_kotlin
+
+function join_by { local IFS="$$1"; shift; echo "$$*"; }
+
+NAME=%s
+CP="$$(join_by : $(locations :%s))"
+ARGS="%s"
+
+java -Xmx256M -Xms32M -noverify \
+  -cp $${KOTLIN_HOME}/lib/kotlin-preloader.jar org.jetbrains.kotlin.preloading.Preloader \
+  -cp $${KOTLIN_HOME}/lib/kotlin-compiler.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler \
+  -cp $${CP} -d $${NAME}_temp.jar $${ARGS} $(SRCS)
+
+$(location @bazel_tools//tools/jdk:singlejar) \
+    --normalize \
+    --compression \
+    --sources $${NAME}_temp.jar \
+    --output $(OUTS)
+
+rm $${NAME}_temp.jar
+""" % (name, dep_label, " ".join(_BOOTSTRAP_LIB_ARGS))
     native.genrule(
-        name = jar_file_label,
+        name =  jar_label,
         tools = [
             "@com_github_jetbrains_kotlin//:home",
             "@local_jdk//:jdk",
+            "@bazel_tools//tools/jdk:singlejar",
             dep_label
         ],
         srcs = srcs,
-        outs = [jar_name],
-        cmd = _gen_cmd(dep_label, " ".join(args)),
-        visibility = ["//visibility:private"]
-    )
-    native.genrule(
-        name = jar_sources_file_label,
-        tools = [
-            "@local_jdk//:jdk",
-        ],
-        srcs = srcs,
-        outs = [jar_sources_name],
-        cmd = "jar cf $(OUTS) $(SRCS)",
-        visibility = ["//visibility:private"]
-    )
-
-    # Use kt_jvm_import so that ijarification doesn't ruin the worker lib.
-    kt_jvm_import(
-        name = name,
-        jars = [jar_name],
-        srcjar = jar_sources_name,
+        outs = [name + ".jar"],
         tags = ["no-ide"],
-        runtime_deps = (depset(runtime_deps) + deps).to_list(),
-        visibility = [
-            "//tests:__subpackages__",
-            "//kotlin:__subpackages__"
-        ]
+        visibility = ["//visibility:private"],
+        cmd = command
+    )
+    native.java_import(
+        name = name,
+        jars = [jar_label],
+        runtime_deps=deps + runtime_deps,
+        visibility=["//visibility:public"]
+    )
+    # hsyed todo this part of the graph should not be wired up outside of development.
+    _for_ide(
+        name = name + "_for_ide",
+        srcs = srcs,
+        deps = [_resolve_dep_label(d) for d in deps] + neverlink_deps,
+        visibility = ["//kotlin/builder:__subpackages__"]
     )
diff --git a/kotlin/builder/integrationtests/BUILD b/kotlin/builder/integrationtests/BUILD
new file mode 100644
index 0000000..ff0448b
--- /dev/null
+++ b/kotlin/builder/integrationtests/BUILD
@@ -0,0 +1,19 @@
+# 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.
+java_test(
+    name = "integrationtests",
+    srcs = glob(["*.java"]),
+    test_class = "io.bazel.kotlin.builder.KotlinBuilderTestSuite",
+    deps = ["//kotlin/builder:builder_lib_for_tests"]
+)
\ No newline at end of file
diff --git a/kotlin/builder/integrationtests/KotlinBuilderActionTests.java b/kotlin/builder/integrationtests/KotlinBuilderActionTests.java
index a26c1a1..6e27646 100644
--- a/kotlin/builder/integrationtests/KotlinBuilderActionTests.java
+++ b/kotlin/builder/integrationtests/KotlinBuilderActionTests.java
@@ -1,6 +1,6 @@
 package io.bazel.kotlin.builder;
 
-import io.bazel.kotlin.builder.mode.jvm.actions.KotlinCompiler;
+import io.bazel.kotlin.builder.tasks.jvm.KotlinCompiler;
 import org.junit.Test;
 
 public class KotlinBuilderActionTests extends KotlinBuilderTestCase {
diff --git a/kotlin/builder/integrationtests/KotlinBuilderTestCase.java b/kotlin/builder/integrationtests/KotlinBuilderTestCase.java
index f1cc005..cf23da1 100644
--- a/kotlin/builder/integrationtests/KotlinBuilderTestCase.java
+++ b/kotlin/builder/integrationtests/KotlinBuilderTestCase.java
@@ -23,8 +23,8 @@
       Paths.get(Preconditions.checkNotNull(System.getenv("TEST_TMPDIR")));
   private static final AtomicInteger counter = new AtomicInteger(0);
 
-  private final KotlinModel.BuilderCommand.Builder builder =
-      KotlinModel.BuilderCommand.newBuilder();
+  private final KotlinModel.CompilationTask.Builder builder =
+      KotlinModel.CompilationTask.newBuilder();
   private final Injector injector = KotlinToolchain.createInjector(() -> System.out, null);
   private String label = null;
   private Path inputSourceDir = null;
@@ -34,11 +34,11 @@
     resetTestContext("a_test_" + counter.incrementAndGet());
   }
 
-  protected KotlinModel.BuilderCommand.Outputs outputs() {
+  protected KotlinModel.CompilationTask.Outputs outputs() {
     return builder.getOutputs();
   }
 
-  protected KotlinModel.BuilderCommand.Directories directories() {
+  protected KotlinModel.CompilationTask.Directories directories() {
     return builder.getDirectories();
   }
 
@@ -50,7 +50,7 @@
     return Paths.get(directories().getClasses());
   }
 
-  protected KotlinModel.BuilderCommand builderCommand() {
+  protected KotlinModel.CompilationTask builderCommand() {
     return builder.build();
   }
 
@@ -132,7 +132,7 @@
     TEMP,
     SOURCE_GEN;
 
-    protected static Path select(DirectoryType type, KotlinModel.BuilderCommand command) {
+    protected static Path select(DirectoryType type, KotlinModel.CompilationTask command) {
       Path ret;
       switch (type) {
         case CLASSES:
diff --git a/kotlin/builder/integrationtests/KotlinBuilderTests.java b/kotlin/builder/integrationtests/KotlinBuilderTests.java
index cb5aa62..e046fed 100644
--- a/kotlin/builder/integrationtests/KotlinBuilderTests.java
+++ b/kotlin/builder/integrationtests/KotlinBuilderTests.java
@@ -2,7 +2,8 @@
 
 import com.google.common.truth.Truth;
 import com.google.devtools.build.lib.view.proto.Deps;
-import io.bazel.kotlin.builder.mode.jvm.KotlinJvmCompilationExecutor;
+
+import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor;
 import io.bazel.kotlin.model.KotlinModel;
 import org.junit.Test;
 
@@ -34,7 +35,7 @@
   }
 
   private void runCompileTask() {
-    KotlinModel.BuilderCommand command = builderCommand();
+    KotlinModel.CompilationTask command = builderCommand();
     for (DirectoryType directoryType : DirectoryType.values()) {
       try {
         if (directoryType != DirectoryType.ROOT) {
@@ -45,7 +46,7 @@
       }
     }
     int timeoutSeconds = 10;
-    KotlinJvmCompilationExecutor executor = instance(KotlinJvmCompilationExecutor.class);
+    KotlinJvmTaskExecutor executor = instance(KotlinJvmTaskExecutor.class);
     try {
       CompletableFuture.runAsync(() -> executor.compile(command))
           .get(timeoutSeconds, TimeUnit.SECONDS);
diff --git a/kotlin/builder/proto/BUILD b/kotlin/builder/proto/BUILD
index 8bc369b..b16e4b6 100644
--- a/kotlin/builder/proto/BUILD
+++ b/kotlin/builder/proto/BUILD
@@ -11,8 +11,9 @@
 # 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(default_visibility=["//visibility:public"])
 # commented out till 0.16 is released. We aren't  prebuilding the libraries at the moment so it's fine.
+# TODO constrain the visibility  when fixing  the comments below as well
 #proto_library(
 #    name = "kotlin_model_proto",
 #    srcs = [":kotlin_model.proto"],
@@ -40,17 +41,14 @@
 java_import(
     name = "deps",
     jars = ["jars/libdeps_proto-speed.jar"],
-    visibility = ["//kotlin/builder:__subpackages__"]
 )
 
 java_import(
     name = "worker",
     jars = ["jars/libworker_protocol_proto-speed.jar"],
-    visibility = ["//kotlin/builder:__subpackages__"]
 )
 
 java_import(
     name = "kotlin_model",
     jars = ["jars/libkotlin_model_proto-speed.jar"],
-    visibility = ["//kotlin/builder:__subpackages__"]
 )
\ No newline at end of file
diff --git a/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar b/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar
index 943c343..1a74d68 100755
--- a/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar
+++ b/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar
Binary files differ
diff --git a/kotlin/builder/proto/kotlin_model.proto b/kotlin/builder/proto/kotlin_model.proto
index d1e4ced..a66b7d3 100644
--- a/kotlin/builder/proto/kotlin_model.proto
+++ b/kotlin/builder/proto/kotlin_model.proto
@@ -65,7 +65,7 @@
 }
 
 // Mested messages not marked with stable could be refactored.
-message BuilderCommand {
+message CompilationTask {
     message Info {
         string label = 1;
         // derived from label
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..e13c047
--- /dev/null
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/BUILD
@@ -0,0 +1,38 @@
+# 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",
+    srcs = glob(["**/*.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",
+    ],
+)
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt b/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt
index c2895fd..19c2a7f 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt
@@ -61,8 +61,6 @@
 /**
  * Bazel worker runner.
  *
- *
- *
  * This class adapts a traditional command line program so it can be spawned by Bazel as a
  * persistent worker process that handles multiple invocations per JVM. It will also be backwards
  * compatible with being run as a normal single-invocation command.
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt
index 0b0e262..0f20535 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt
@@ -18,11 +18,8 @@
 import com.google.inject.Inject
 import com.google.inject.Provider
 import com.google.inject.Singleton
-import io.bazel.kotlin.builder.mode.jvm.KotlinJvmCompilationExecutor
-import io.bazel.kotlin.builder.utils.ArgMap
-import io.bazel.kotlin.builder.utils.ArgMaps
-import io.bazel.kotlin.builder.utils.IS_JVM_SOURCE_FILE
-import io.bazel.kotlin.builder.utils.ensureDirectories
+import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor
+import io.bazel.kotlin.builder.utils.*
 import io.bazel.kotlin.builder.utils.jars.SourceJarExtractor
 import io.bazel.kotlin.model.KotlinModel
 import java.nio.file.Paths
@@ -30,8 +27,8 @@
 @Singleton
 @Suppress("MemberVisibilityCanBePrivate")
 class KotlinBuilder @Inject internal constructor(
-    private val commandBuilder: BuildCommandBuilder,
-    private val compilationExector: KotlinJvmCompilationExecutor
+    private val commandBuilder: TaskBuilder,
+    private val jvmTaskExecutor: KotlinJvmTaskExecutor
 ) : CommandLineProgram {
     fun execute(args: List<String>): Int =
         ArgMaps.from(args).let { execute(it) }
@@ -39,7 +36,7 @@
     fun execute(args: ArgMap): Int =
         commandBuilder.fromInput(args).let { execute(it) }
 
-    fun execute(command: KotlinModel.BuilderCommand): Int {
+    fun execute(command: KotlinModel.CompilationTask): Int {
         ensureDirectories(
             command.directories.classes,
             command.directories.temp,
@@ -48,7 +45,7 @@
         )
         val updatedCommand = expandWithSourceJarSources(command)
         return try {
-            compilationExector.compile(updatedCommand)
+            jvmTaskExecutor.compile(updatedCommand)
             0
         } catch (ex: CompilationStatusException) {
             ex.status
@@ -56,10 +53,10 @@
     }
 
     /**
-     * If any sourcejars were provided expand the jars sources and create a new [KotlinModel.BuilderCommand] with the
+     * If any sourcejars were provided expand the jars sources and create a new [KotlinModel.CompilationTask] with the
      * Java and Kotlin sources merged in.
      */
-    private fun expandWithSourceJarSources(command: KotlinModel.BuilderCommand): KotlinModel.BuilderCommand =
+    private fun expandWithSourceJarSources(command: KotlinModel.CompilationTask): KotlinModel.CompilationTask =
         if (command.inputs.sourceJarsList.isEmpty()) {
             command
         } else {
@@ -70,7 +67,7 @@
                 it.jarFiles.addAll(command.inputs.sourceJarsList.map { Paths.get(it) })
                 it.execute()
             }.let {
-                commandBuilder.withSources(command, it.sourcesList.iterator())
+                command.expandWithSources(command, it.sourcesList.iterator())
             }
         }
 
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt
similarity index 83%
rename from kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt
index 1d29c0a..e67c1ae 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt
@@ -13,26 +13,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder.utils
+package io.bazel.kotlin.builder
 
-import com.google.common.collect.ImmutableList
-import com.google.inject.ImplementedBy
-import com.google.inject.Inject
+
 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
 
-@ImplementedBy(DefaultKotlinCompilerPluginArgsEncoder::class)
-interface KotlinCompilerPluginArgsEncoder {
-    fun encode(command: KotlinModel.BuilderCommandOrBuilder): List<String>
-}
-
-class DefaultKotlinCompilerPluginArgsEncoder @Inject internal constructor(
+@Singleton
+internal class KotlinCompilerPluginArgsEncoder @Inject constructor(
     @CompilerPlugin.Kapt3
     private val kapt3: CompilerPlugin
-) : KotlinCompilerPluginArgsEncoder {
+) {
     companion object {
         private fun encodeMap(options: Map<String, String>): String {
             val os = ByteArrayOutputStream()
@@ -66,6 +62,7 @@
             return Base64.getEncoder().encodeToString(os.toByteArray())
         }
     }
+
     /**
      * Plugin using the undocumented encoding format for kapt3
      */
@@ -83,15 +80,17 @@
 
         // "configuration" is an undocumented kapt3 argument. preparing the arguments this way is the only way to get more than one annotation processor class
         // passed to kotlinc.
-        fun encode(): ImmutableList<String> =
-            ImmutableList.of(
+        fun encode(): List<String> =
+            listOf(
                 "-Xplugin=${kapt3.jarPath}",
-                "-P", "plugin:${kapt3.id}:configuration=${encodeMultiMap(tally)}"
+                "-P", "plugin:${kapt3.id}:configuration=${encodeMultiMap(
+                    tally
+                )}"
             )
     }
 
-    override fun encode(
-        command: KotlinModel.BuilderCommandOrBuilder
+    fun encode(
+        command: KotlinModel.CompilationTaskOrBuilder
     ): List<String> {
         val javacArgs = mutableMapOf<String, String>(
             "-target" to command.info.toolchainInfo.jvm.jvmTarget
@@ -103,7 +102,7 @@
                 arg["classes"] = d.generatedClasses.toString()
                 arg["stubs"] = d.temp.toString()
                 arg["incrementalData"] = d.temp.toString()
-                arg["javacArguments"] = javacArgs.let(::encodeMap)
+                arg["javacArguments"] = javacArgs.let(Companion::encodeMap)
                 arg["aptMode"] = "stubsAndApt"
                 arg["correctErrorTypes"] = "true"
 //                arg["verbose"] = "true"
@@ -114,6 +113,6 @@
                     .joinToString(",") { it.processorClass }
                 arg.encode()
             }
-        }?.let { ImmutableList.copyOf(it) } ?: ImmutableList.of()
+        } ?: emptyList()
     }
 }
\ No newline at end of file
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt
index 84766d3..22424a1 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt
@@ -15,7 +15,6 @@
  */
 package io.bazel.kotlin.builder
 
-import com.google.common.collect.ImmutableSet
 import com.google.inject.*
 import com.google.inject.util.Modules
 import io.bazel.kotlin.builder.utils.resolveVerified
@@ -32,7 +31,7 @@
     internal val javaHome: Path,
     val kotlinHome: Path,
     internal val classLoader: ClassLoader,
-    val kotlinStandardLibraries: ImmutableSet<String> = ImmutableSet.of(
+    val kotlinStandardLibraries: List<String> = listOf(
         "kotlin-stdlib.jar",
         "kotlin-stdlib-jdk7.jar",
         "kotlin-stdlib-jdk8.jar"
@@ -47,8 +46,8 @@
         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 += javaRunfiles.resolveVerified("io_bazel_rules_kotlin", "kotlin", "builder", "compiler_lib.jar")
+                if (!isJdk9OrNewer) {
                     it += javaHome.resolveVerified("lib", "tools.jar")
                 }
             }
@@ -65,7 +64,11 @@
             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))
+            return KotlinToolchain(
+                javaHome,
+                kotlinHome,
+                createClassLoader(javaHome, kotlinHome)
+            )
         }
 
         /**
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/BuildCommandBuilder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt
similarity index 73%
rename from kotlin/builder/src/io/bazel/kotlin/builder/BuildCommandBuilder.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt
index 54302c1..1746a8e 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/BuildCommandBuilder.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt
@@ -15,27 +15,18 @@
  */
 package io.bazel.kotlin.builder
 
-import com.google.inject.ImplementedBy
-import com.google.inject.Inject
-import com.google.inject.Singleton
 import com.google.protobuf.util.JsonFormat
 import io.bazel.kotlin.builder.utils.ArgMap
-import io.bazel.kotlin.builder.utils.DefaultKotlinCompilerPluginArgsEncoder
+import io.bazel.kotlin.builder.utils.partitionSources
 import io.bazel.kotlin.model.KotlinModel
-import io.bazel.kotlin.model.KotlinModel.BuilderCommand
-
-
-@ImplementedBy(DefaultBuildCommandBuilder::class)
-interface BuildCommandBuilder {
-    fun fromInput(argMap: ArgMap): BuilderCommand
-    fun withSources(command: BuilderCommand, sources: Iterator<String>): BuilderCommand
-    fun withGeneratedSources(command: BuilderCommand, sources: Iterator<String>): BuilderCommand
-}
+import io.bazel.kotlin.model.KotlinModel.CompilationTask
+import javax.inject.Inject
+import javax.inject.Singleton
 
 @Singleton
-private class DefaultBuildCommandBuilder @Inject constructor(
-    private val pluginEncoder: DefaultKotlinCompilerPluginArgsEncoder
-) : BuildCommandBuilder {
+class TaskBuilder @Inject internal constructor(
+    private val pluginEncoder: KotlinCompilerPluginArgsEncoder
+) {
     companion object {
         @JvmStatic
         private val jsonTypeRegistry = JsonFormat.TypeRegistry.newBuilder()
@@ -84,8 +75,8 @@
         TEST_ONLY("--testonly")
     }
 
-    override fun fromInput(argMap: ArgMap): BuilderCommand =
-        BuilderCommand.newBuilder().let { root ->
+    fun fromInput(argMap: ArgMap): CompilationTask =
+        CompilationTask.newBuilder().let { root ->
             with(root.outputsBuilder) {
                 jar = argMap.mandatorySingle(JavaBuilderFlags.OUTPUT.flag)
                 jdeps = argMap.mandatorySingle("--output_jdeps")
@@ -146,37 +137,5 @@
             }
             root.build()
         }
-
-    override fun withSources(command: BuilderCommand, sources: Iterator<String>): BuilderCommand =
-        command.updateBuilder { builder ->
-            sources.partitionSources(
-                { builder.inputsBuilder.addKotlinSources(it) },
-                { builder.inputsBuilder.addJavaSources(it) })
-        }
-
-
-    override fun withGeneratedSources(command: BuilderCommand, sources: Iterator<String>): BuilderCommand =
-        command.updateBuilder { builder ->
-            sources.partitionSources(
-                { builder.inputsBuilder.addGeneratedKotlinSources(it) },
-                { builder.inputsBuilder.addGeneratedJavaSources(it) })
-        }
-
-    private fun BuilderCommand.updateBuilder(init: (BuilderCommand.Builder) -> Unit): BuilderCommand =
-        toBuilder().let {
-            init(it)
-            it.build()
-        }
-
-
-    private fun Iterator<String>.partitionSources(kt: (String) -> Unit, java: (String) -> Unit) {
-        forEach {
-            when {
-                it.endsWith(".kt") -> kt(it)
-                it.endsWith(".java") -> java(it)
-                else -> throw IllegalStateException("invalid source file type $it")
-            }
-        }
-    }
 }
 
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JDepsGenerator.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt
similarity index 93%
rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JDepsGenerator.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt
index 0bcc45f..e5053f4 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JDepsGenerator.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder.mode.jvm.actions
+package io.bazel.kotlin.builder.tasks.jvm
 
 import com.google.devtools.build.lib.view.proto.Deps
 import com.google.inject.ImplementedBy
@@ -21,7 +21,6 @@
 import io.bazel.kotlin.builder.CompilationException
 import io.bazel.kotlin.builder.CompilationStatusException
 import io.bazel.kotlin.builder.KotlinToolchain
-import io.bazel.kotlin.builder.mode.jvm.utils.JdepsParser
 import io.bazel.kotlin.builder.utils.resolveVerified
 import io.bazel.kotlin.builder.utils.rootCause
 import io.bazel.kotlin.model.KotlinModel
@@ -33,7 +32,7 @@
 
 @ImplementedBy(DefaultJDepsGenerator::class)
 interface JDepsGenerator {
-    fun generateJDeps(command: KotlinModel.BuilderCommand)
+    fun generateJDeps(command: KotlinModel.CompilationTask)
 }
 
 private class DefaultJDepsGenerator @Inject constructor(
@@ -42,7 +41,7 @@
 ) : JDepsGenerator {
     private val isKotlinImplicit = JdepsParser.pathSuffixMatchingPredicate(
         toolchain.kotlinHome.resolveVerified("lib").toPath(), *toolchain.kotlinStandardLibraries.toTypedArray())
-    override fun generateJDeps(command: KotlinModel.BuilderCommand) {
+    override 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/mode/jvm/actions/JavaCompiler.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt
similarity index 88%
rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JavaCompiler.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt
index ee5df82..5f29bec 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JavaCompiler.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt
@@ -13,24 +13,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder.mode.jvm.actions
+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.utils.addAll
-import io.bazel.kotlin.model.KotlinModel.BuilderCommand
+import io.bazel.kotlin.model.KotlinModel.CompilationTask
 
 @ImplementedBy(DefaultJavaCompiler::class)
 interface JavaCompiler {
-    fun compile(command: BuilderCommand)
+    fun compile(command: CompilationTask)
 }
 
 private class DefaultJavaCompiler @Inject constructor(
     val javacInvoker: KotlinToolchain.JavacInvoker
 ) : JavaCompiler {
-    override fun compile(command: BuilderCommand) {
+    override fun compile(command: CompilationTask) {
         val i = command.inputs
         val d = command.directories
         if (i.javaSourcesList.isNotEmpty() || i.generatedJavaSourcesList.isNotEmpty()) {
@@ -50,7 +50,7 @@
                 it.addAll(i.generatedJavaSourcesList)
                 it.toTypedArray()
             }
-            javacInvoker.compile(args).takeIf { it != 0 }?.also { throw CompilationStatusException("javac failed",it) }
+            javacInvoker.compile(args).takeIf { it != 0 }?.also { throw CompilationStatusException("javac failed", it) }
         }
     }
 }
\ No newline at end of file
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/JdepsParser.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt
similarity index 98%
rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/JdepsParser.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt
index f3419dc..5614add 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/JdepsParser.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt
@@ -13,7 +13,7 @@
  * 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 java.nio.file.Path
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/KotlinCompiler.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt
similarity index 83%
rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/KotlinCompiler.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt
index ffcf837..8721c73 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/KotlinCompiler.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder.mode.jvm.actions
+package io.bazel.kotlin.builder.tasks.jvm
 
 import com.google.inject.ImplementedBy
 import com.google.inject.Inject
@@ -27,8 +27,8 @@
 
 @ImplementedBy(DefaultKotlinCompiler::class)
 interface KotlinCompiler {
-    fun runAnnotationProcessor(command: KotlinModel.BuilderCommand): List<String>
-    fun compile(command: KotlinModel.BuilderCommand): List<String>
+    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
@@ -40,11 +40,11 @@
 private class DefaultKotlinCompiler @Inject constructor(
     val compiler: KotlinToolchain.KotlincInvoker
 ) : KotlinCompiler {
-    override fun runAnnotationProcessor(command: KotlinModel.BuilderCommand): List<String> {
+    override fun runAnnotationProcessor(command: KotlinModel.CompilationTask): List<String> {
         check(command.info.plugins.annotationProcessorsList.isNotEmpty()) {
             "method called without annotation processors"
         }
-        return setupCompileContext(command).also {
+        return getCommonArgs(command).also {
             it.addAll(command.info.encodedPluginDescriptorsList)
             it.addAll(command.inputs.kotlinSourcesList)
             it.addAll(command.inputs.javaSourcesList)
@@ -52,11 +52,9 @@
     }
 
     /**
-     * Evaluate the compilation context and add Metadata to the ctx if needed.
-     *
-     * @return The args to pass to the kotlin compile class.
+     * Return a list with the common arguments.
      */
-    private fun setupCompileContext(command: KotlinModel.BuilderCommand): MutableList<String> {
+    private fun getCommonArgs(command: KotlinModel.CompilationTask): MutableList<String> {
         val args = mutableListOf<String>()
 
         // use -- for flags not meant for the kotlin compiler
@@ -77,8 +75,8 @@
         return args
     }
 
-    override fun compile(command: KotlinModel.BuilderCommand): List<String> =
-        with(setupCompileContext(command)) {
+    override fun compile(command: KotlinModel.CompilationTask): List<String> =
+        with(getCommonArgs(command)) {
             addAll(command.inputs.javaSourcesList)
             addAll(command.inputs.generatedJavaSourcesList)
             addAll(command.inputs.kotlinSourcesList)
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/KotlinCompilerOutputSink.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt
similarity index 75%
rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/KotlinCompilerOutputSink.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt
index 42ddf53..c72628c 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/KotlinCompilerOutputSink.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt
@@ -13,31 +13,26 @@
  * 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.inject.ImplementedBy
 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
 
-@ImplementedBy(DefaultOutputProcessorFactory::class)
-interface KotlinCompilerOutputSink {
-    fun deliver(line: String)
-    fun deliver(lines: List<String>)
-}
-
-private class DefaultOutputProcessorFactory @Inject constructor(
+@Singleton
+class KotlinCompilerOutputSink @Inject constructor(
     val streamProvider: Provider<PrintStream>
-) : KotlinCompilerOutputSink {
+) {
     private val executionRoot: String = Paths.get("").toAbsolutePath().toString() + File.separator
 
-    override fun deliver(line: String) {
+    fun deliver(line: String) {
         streamProvider.get().println(trimExecutionRootPrefix(line))
     }
 
-    override fun deliver(lines: List<String>) {
+    fun deliver(lines: List<String>) {
         streamProvider.get().also { stream -> lines.map(::trimExecutionRootPrefix).forEach(stream::println) }
     }
 
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/KotlinJvmCompilationExecutor.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
similarity index 70%
rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/KotlinJvmCompilationExecutor.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
index db1b42d..fbf7655 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/KotlinJvmCompilationExecutor.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
@@ -13,41 +13,29 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder.mode.jvm
+package io.bazel.kotlin.builder.tasks.jvm
 
 import com.google.common.base.Stopwatch
-import com.google.inject.ImplementedBy
 import com.google.inject.Inject
 import com.google.inject.Singleton
-import io.bazel.kotlin.builder.BuildCommandBuilder
 import io.bazel.kotlin.builder.CompilationStatusException
-import io.bazel.kotlin.builder.mode.jvm.KotlinJvmCompilationExecutor.Result
-import io.bazel.kotlin.builder.mode.jvm.actions.JDepsGenerator
-import io.bazel.kotlin.builder.mode.jvm.actions.JavaCompiler
-import io.bazel.kotlin.builder.mode.jvm.actions.KotlinCompiler
-import io.bazel.kotlin.builder.mode.jvm.actions.OutputJarCreator
-import io.bazel.kotlin.builder.mode.jvm.utils.KotlinCompilerOutputSink
-import io.bazel.kotlin.model.KotlinModel.BuilderCommand
+import io.bazel.kotlin.builder.utils.expandWithGeneratedSources
+import io.bazel.kotlin.model.KotlinModel.CompilationTask
 import java.io.File
 import java.util.concurrent.TimeUnit
 
-@ImplementedBy(DefaultKotlinJvmCompilationExecutor::class)
-interface KotlinJvmCompilationExecutor {
-    class Result(val timings: List<String>, val command: BuilderCommand)
-
-    fun compile(command: BuilderCommand): Result
-}
 
 @Singleton
-private class DefaultKotlinJvmCompilationExecutor @Inject constructor(
-    private val commandBuilder: BuildCommandBuilder,
+class KotlinJvmTaskExecutor @Inject internal constructor(
     private val kotlinCompiler: KotlinCompiler,
     private val outputSink: KotlinCompilerOutputSink,
     private val javaCompiler: JavaCompiler,
     private val jDepsGenerator: JDepsGenerator,
     private val outputJarCreator: OutputJarCreator
-) : KotlinJvmCompilationExecutor {
-    override fun compile(command: BuilderCommand): Result {
+) {
+    class Result(val timings: List<String>, val command: CompilationTask)
+
+    fun compile(command: CompilationTask): Result {
         val context = Context()
         val commandWithApSources = context.execute("kapt") {
             runAnnotationProcessors(command)
@@ -62,7 +50,7 @@
         return Result(context.timings, commandWithApSources)
     }
 
-    private fun runAnnotationProcessors(command: BuilderCommand): BuilderCommand =
+    private fun runAnnotationProcessors(command: CompilationTask): CompilationTask =
         try {
             if (command.info.plugins.annotationProcessorsList.isNotEmpty()) {
                 kotlinCompiler.runAnnotationProcessor(command)
@@ -70,16 +58,16 @@
                     .filter { it.isFile }
                     .map { it.path }
                     .iterator()
-                    .let { commandBuilder.withGeneratedSources(command, it) }
+                    .let { command.expandWithGeneratedSources(command, it) }
             } else {
                 command
             }
-        } catch(ex: CompilationStatusException) {
+        } catch (ex: CompilationStatusException) {
             ex.lines.also(outputSink::deliver)
             throw ex
         }
 
-    private fun compileClasses(context: Context, command: BuilderCommand) {
+    private fun compileClasses(context: Context, command: CompilationTask) {
         var kotlinError: CompilationStatusException? = null
         var result: List<String>? = null
         context.execute("kotlinc") {
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/OutputJarCreator.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt
similarity index 87%
rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/OutputJarCreator.kt
rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt
index 88c98af..540f673 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/OutputJarCreator.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.bazel.kotlin.builder.mode.jvm.actions
+package io.bazel.kotlin.builder.tasks.jvm
 
 import com.google.inject.ImplementedBy
 import io.bazel.kotlin.builder.utils.jars.JarCreator
@@ -22,11 +22,11 @@
 
 @ImplementedBy(DefaultOutputJarCreator::class)
 interface OutputJarCreator {
-    fun createOutputJar(command: KotlinModel.BuilderCommand)
+    fun createOutputJar(command: KotlinModel.CompilationTask)
 }
 
 private class DefaultOutputJarCreator : OutputJarCreator {
-    override fun createOutputJar(command: KotlinModel.BuilderCommand) {
+    override fun createOutputJar(command: KotlinModel.CompilationTask) {
         JarCreator(
             path = Paths.get(command.outputs.jar),
             normalize = true,
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/utils/TaskUtils.kt b/kotlin/builder/src/io/bazel/kotlin/builder/utils/TaskUtils.kt
new file mode 100644
index 0000000..4ec19b4
--- /dev/null
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/utils/TaskUtils.kt
@@ -0,0 +1,58 @@
+/*
+ * 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.utils
+
+import io.bazel.kotlin.model.KotlinModel
+
+
+fun KotlinModel.CompilationTask.expandWithSources(
+    command: KotlinModel.CompilationTask,
+    sources: Iterator<String>
+): KotlinModel.CompilationTask =
+    command.updateBuilder { builder ->
+        sources.partitionSources(
+            { builder.inputsBuilder.addKotlinSources(it) },
+            { builder.inputsBuilder.addJavaSources(it) })
+    }
+
+
+fun KotlinModel.CompilationTask.expandWithGeneratedSources(
+    command: KotlinModel.CompilationTask,
+    sources: Iterator<String>
+): KotlinModel.CompilationTask =
+    command.updateBuilder { builder ->
+        sources.partitionSources(
+            { builder.inputsBuilder.addGeneratedKotlinSources(it) },
+            { builder.inputsBuilder.addGeneratedJavaSources(it) })
+    }
+
+private fun KotlinModel.CompilationTask.updateBuilder(
+    init: (KotlinModel.CompilationTask.Builder) -> Unit
+): KotlinModel.CompilationTask =
+    toBuilder().let {
+        init(it)
+        it.build()
+    }
+
+fun Iterator<String>.partitionSources(kt: (String) -> Unit, java: (String) -> Unit) {
+    forEach {
+        when {
+            it.endsWith(".kt") -> kt(it)
+            it.endsWith(".java") -> java(it)
+            else -> throw IllegalStateException("invalid source file type $it")
+        }
+    }
+}
diff --git a/kotlin/builder/unittests/BUILD b/kotlin/builder/unittests/BUILD
new file mode 100644
index 0000000..2895039
--- /dev/null
+++ b/kotlin/builder/unittests/BUILD
@@ -0,0 +1,25 @@
+# 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.
+java_test(
+    name = "unittests",
+    size = "small",
+    srcs = glob(["**/*.java"]),
+    test_class = "io.bazel.kotlin.builder.mode.jvm.utils.JdepsParserTest",
+    deps = [
+        "//kotlin/builder/src/io/bazel/kotlin/builder",
+        "@com_github_jetbrains_kotlin//:kotlin-stdlib",
+        "@io_bazel_rules_kotlin//kotlin/builder/proto:deps",
+        "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar",
+    ]
+)
diff --git a/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java b/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java
index 7013b35..8bf24ec 100644
--- a/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java
+++ b/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java
@@ -16,6 +16,7 @@
 package io.bazel.kotlin.builder.mode.jvm.utils;
 
 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;
diff --git a/kotlin/internal/bootstrap.bzl b/kotlin/internal/bootstrap.bzl
index 4136a90..05cbbaf 100644
--- a/kotlin/internal/bootstrap.bzl
+++ b/kotlin/internal/bootstrap.bzl
@@ -17,21 +17,6 @@
 load("//kotlin/internal:rules.bzl", _kt_jvm_import_impl="kt_jvm_import_impl")
 load("@bazel_tools//tools/build_defs/repo:http.bzl", _http_archive="http_archive")
 
-kotlin_stdlib = rule(
-    attrs = {
-        "jars": attr.label_list(
-            allow_files = True,
-            mandatory = True,
-        ),
-        "srcjar": attr.label(
-            allow_single_file = True,
-        ),
-    },
-    implementation = _kt_jvm_import_impl,
-)
-
-"""Import Kotlin libraries that are part of the compiler release."""
-
 def _kt_toolchain_ide_info_impl(ctx):
     tc=ctx.toolchains[kt.defs.TOOLCHAIN_TYPE]
     info = struct(
diff --git a/kotlin/kotlin.bzl b/kotlin/kotlin.bzl
index 2ecd9a5..73a0ea7 100644
--- a/kotlin/kotlin.bzl
+++ b/kotlin/kotlin.bzl
@@ -112,9 +112,9 @@
     _kt_jvm_junit_test_impl = "kt_jvm_junit_test_impl",
     _kt_jvm_library_impl = "kt_jvm_library_impl",
 )
+load("//kotlin:kotlin_releases.bzl", "KOTLIN_CURRENT_RELEASE")
 load(
     "//kotlin:kotlin_compiler_repositories.bzl",
-    "KOTLIN_CURRENT_RELEASE",
     _kotlin_compiler_repository = "kotlin_compiler_repositories",
 )
 load("//third_party/jvm:workspace.bzl", _maven_dependencies="maven_dependencies")
diff --git a/kotlin/kotlin_compiler_repositories.bzl b/kotlin/kotlin_compiler_repositories.bzl
index d338141..6161285 100644
--- a/kotlin/kotlin_compiler_repositories.bzl
+++ b/kotlin/kotlin_compiler_repositories.bzl
@@ -14,186 +14,30 @@
 """This file contains the Kotlin compiler repository definitions. It should not be loaded directly by client workspaces.
 """
 load("@bazel_tools//tools/build_defs/repo:http.bzl", _http_file="http_file", _http_archive="http_archive")
-load(
-    "//kotlin/internal:kt.bzl",
-    _kt = "kt",
+load("//kotlin/internal:kt.bzl", _kt = "kt")
+load("//kotlin:kotlin_releases.bzl",
+    _KOTLIN_COMPILER_RELEASES="KOTLIN_COMPILER_RELEASES",
+    _KOTLIN_CURRENT_RELEASE="KOTLIN_CURRENT_RELEASE"
 )
-load(
-  "//third_party/jvm:workspace.bzl",
-  _maven_dependencies="maven_dependencies"
-)
-
-KOTLIN_RELEASES = {
-    "1.2.50": {
-      "version": "1.2.50",
-      "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.50/kotlin-compiler-1.2.50.zip",
-      "sha256": "bc062c303b376711097a27bda4c28047eda0744e9acc64b9db640c19c7d171a9"
-    },
-    "1.2.41": {
-      "version": "1.2.41",
-      "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.41/kotlin-compiler-1.2.41.zip",
-      "sha256": "af872772f268da5ca79d263b2943f1d694d475dddb80b6d408e9548805ed265c"
-    },
-    "1.2.40": {
-        "version": "1.2.40",
-        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.40/kotlin-compiler-1.2.40.zip",
-        "sha256": "3498571126c335be0feec24075c359f1954d46bbabccafc729ec49db1a509658",
-    },
-    "1.2.30": {
-        "version": "1.2.30",
-        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.30/kotlin-compiler-1.2.30.zip",
-        "sha256": "4d6965877301d44241ca6de36480140992dc8a6b1c1884baeb5239ce2c43e071",
-    },
-    "1.2.21": {
-        "version": "1.2.21",
-        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.21/kotlin-compiler-1.2.21.zip",
-        "sha256": "c5f2cbd35daa6c5c394e92e6c06b8eb41d85ad8da64762733874166b6807af22",
-    },
-    "1.2.20": {
-        "version": "1.2.20",
-        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.20/kotlin-compiler-1.2.20.zip",
-        "sha256": "fb63d3d9f37b43f37575e3623c058d42a4b5dc8da08479ab065c4994e421a057",
-    },
-    "1.2.10": {
-        "version": "1.2.10",
-        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.10/kotlin-compiler-1.2.10.zip",
-        "sha256": "95874568919121acb694bec0d6c92c60bdceea53f4c202e23ab734e94a0c26e3",
-    },
-    "1.2.0": {
-        "version": "1.2.0",
-        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.0/kotlin-compiler-1.2.0.zip",
-        "sha256": "895d0f8286db3e4f43d67cd5e09b600af6e0a5017cb74072d1b09c78b697775a",
-    },
-}
-
-KOTLIN_COMPILER_REPO_BUILD_FILE = """
-load("@io_bazel_rules_kotlin//kotlin/internal:bootstrap.bzl", kotlin_stdlib="kotlin_stdlib")
-package(default_visibility = ["//visibility:public"])
-
-filegroup(
-    name = "home",
-    srcs = glob(["lib/*.jar"], exclude = ["lib/*-sources.jar"]),
-)
-
-kotlin_stdlib(
-    name = "kotlin-runtime",
-    jars = ["lib/kotlin-runtime.jar"],
-    srcjar = "lib/kotlin-runtime-sources.jar"
-)
-
-kotlin_stdlib(
-    name = "kotlin-stdlib",
-    jars = ["lib/kotlin-stdlib.jar"],
-    srcjar = "lib/kotlin-stdlib-sources.jar"
-)
-
-kotlin_stdlib(
-    name = "kotlin-stdlib-jdk7",
-    jars = ["lib/kotlin-stdlib-jdk7.jar"],
-    srcjar = "lib/kotlin-stdlib-jdk7-sources.jar"
-)
-
-kotlin_stdlib(
-    name = "kotlin-stdlib-jdk8",
-    jars = ["lib/kotlin-stdlib-jdk8.jar"],
-    srcjar = "lib/kotlin-stdlib-jdk8-sources.jar"
-)
-
-kotlin_stdlib(
-    name = "kotlin-reflect",
-    jars = ["lib/kotlin-reflect.jar"],
-    srcjar = "lib/kotlin-reflect-sources.jar"
-)
-
-kotlin_stdlib(
-    name = "kotlin-test",
-    jars = ["lib/kotlin-test.jar"],
-    srcjar = "lib/kotlin-test-sources.jar"
-)
-
-kotlin_stdlib(
-    name = "kotlin-script-runtime",
-    jars = ["lib/kotlin-script-runtime.jar"],
-    srcjar = "lib/kotlin-script-runtime-sources.jar"
-)
-
-kotlin_stdlib(
-    name = "kotlin-annotation-processing",
-    jars = ["lib/kotlin-annotation-processing.jar"]
-)
-
-kotlin_stdlib(
-    name = "kotlin-annotation-processing-runtime",
-    jars = ["lib/kotlin-annotation-processing-runtime.jar"]
-)
-
-kotlin_stdlib(
-    name = "allopen-compiler-plugin",
-    jars = ["lib/allopen-compiler-plugin.jar"]
-)
-
-kotlin_stdlib(
-    name = "noarg-compiler-plugin",
-    jars = ["lib/noarg-compiler-plugin.jar"]
-)
-
-alias(name="runtime", actual="kotlin-runtime")
-alias(name="stdlib", actual="kotlin-stdlib")
-alias(name="stdlib-jdk7", actual="kotlin-stdlib-jdk7")
-alias(name="stdlib-jdk8", actual="kotlin-stdlib-jdk8")
-alias(name="reflect", actual="kotlin-reflect")
-alias(name="test", actual="kotlin-test")
-
-java_import(
-    name = "compiler",
-    jars = ["lib/kotlin-compiler.jar"],
-)
-
-java_import(
-    name = "script-runtime",
-    jars = ["lib/kotlin-script-runtime.jar"],
-)
-
-java_import(
-    name = "preloader",
-    jars = ["lib/kotlin-preloader.jar"],
-)
-
-sh_binary(
-    name = "kotlin",
-    srcs = ["bin/kotlin"],
-)
-
-sh_binary(
-    name = "kotlinc",
-    srcs = ["bin/kotlinc"],
-)
-
-exports_files(["src"])
-"""
-
-KOTLIN_CURRENT_RELEASE = "1.2.50"
 
 _BAZEL_JAVA_LAUNCHER_VERSION = "0.8.1"
 
-def kotlin_compiler_repositories(
-    kotlin_release_version=KOTLIN_CURRENT_RELEASE,
-):
+def kotlin_compiler_repositories(kotlin_release_version):
     """
     Prime the compiler repository.
 
     This function should not be called directly instead `kotlin_repositories` from `//kotlin:kotlin.bzl` should be
     called to ensure common deps are loaded.
     """
-    release=KOTLIN_RELEASES[kotlin_release_version]
+    release=_KOTLIN_COMPILER_RELEASES[kotlin_release_version]
     if not release:
-        fail('"%s" not a valid kotlin release, current release is "%s"' % (kotlin_release_version, KOTLIN_CURRENT_RELEASE))
+        fail('"%s" not a valid kotlin release, current release is "%s"' % (kotlin_release_version, _KOTLIN_CURRENT_RELEASE))
 
     _http_archive(
         name = _kt.defs.KT_COMPILER_REPO,
         url = release["url"],
         sha256 = release["sha256"],
-        build_file_content= KOTLIN_COMPILER_REPO_BUILD_FILE,
+        build_file= "@io_bazel_rules_kotlin//kotlin:BUILD.com_github_jetbrains_kotlin",
         strip_prefix = "kotlinc",
     )
 
diff --git a/kotlin/kotlin_releases.bzl b/kotlin/kotlin_releases.bzl
new file mode 100644
index 0000000..f84f7eb
--- /dev/null
+++ b/kotlin/kotlin_releases.bzl
@@ -0,0 +1,58 @@
+# 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.
+
+KOTLIN_CURRENT_RELEASE = "1.2.50"
+
+KOTLIN_COMPILER_RELEASES = {
+    "1.2.50": {
+      "version": "1.2.50",
+      "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.50/kotlin-compiler-1.2.50.zip",
+      "sha256": "bc062c303b376711097a27bda4c28047eda0744e9acc64b9db640c19c7d171a9"
+    },
+    "1.2.41": {
+      "version": "1.2.41",
+      "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.41/kotlin-compiler-1.2.41.zip",
+      "sha256": "af872772f268da5ca79d263b2943f1d694d475dddb80b6d408e9548805ed265c"
+    },
+    "1.2.40": {
+        "version": "1.2.40",
+        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.40/kotlin-compiler-1.2.40.zip",
+        "sha256": "3498571126c335be0feec24075c359f1954d46bbabccafc729ec49db1a509658",
+    },
+    "1.2.30": {
+        "version": "1.2.30",
+        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.30/kotlin-compiler-1.2.30.zip",
+        "sha256": "4d6965877301d44241ca6de36480140992dc8a6b1c1884baeb5239ce2c43e071",
+    },
+    "1.2.21": {
+        "version": "1.2.21",
+        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.21/kotlin-compiler-1.2.21.zip",
+        "sha256": "c5f2cbd35daa6c5c394e92e6c06b8eb41d85ad8da64762733874166b6807af22",
+    },
+    "1.2.20": {
+        "version": "1.2.20",
+        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.20/kotlin-compiler-1.2.20.zip",
+        "sha256": "fb63d3d9f37b43f37575e3623c058d42a4b5dc8da08479ab065c4994e421a057",
+    },
+    "1.2.10": {
+        "version": "1.2.10",
+        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.10/kotlin-compiler-1.2.10.zip",
+        "sha256": "95874568919121acb694bec0d6c92c60bdceea53f4c202e23ab734e94a0c26e3",
+    },
+    "1.2.0": {
+        "version": "1.2.0",
+        "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.0/kotlin-compiler-1.2.0.zip",
+        "sha256": "895d0f8286db3e4f43d67cd5e09b600af6e0a5017cb74072d1b09c78b697775a",
+    },
+}
\ No newline at end of file
diff --git a/kotlin/toolchains.bzl b/kotlin/toolchains.bzl
index 64359ab..733bc06 100644
--- a/kotlin/toolchains.bzl
+++ b/kotlin/toolchains.bzl
@@ -50,7 +50,6 @@
     "kotlin_home": attr.label(
         default = Label("@" + _KT_COMPILER_REPO + "//:home"),
         allow_files = True,
-        cfg = "host"
     ),
     "kotlinbuilder": attr.label(
         default = Label("//kotlin/builder"),
@@ -84,14 +83,13 @@
 
 _kt_jvm_attrs = dict(_common_attrs.items() + {
     "jvm_runtime": attr.label(
-        single_file = True,
-        default = Label("@" + _KT_COMPILER_REPO + "//:runtime"),
+        default = Label("@" + _KT_COMPILER_REPO + "//:kotlin-runtime"),
     ),
     "jvm_stdlibs": attr.label_list(
         default = [
-            Label("@" + _KT_COMPILER_REPO + "//:stdlib"),
-            Label("@" + _KT_COMPILER_REPO + "//:stdlib-jdk7"),
-            Label("@" + _KT_COMPILER_REPO + "//:stdlib-jdk8"),
+            Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib"),
+            Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib-jdk7"),
+            Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib-jdk8"),
         ]
     ),
     "jvm_target": attr.string(
