diff --git a/Makefile b/Makefile
index 2ea059b..1d86e39 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
 
 reformat:
 	buildifier -mode=fix -v kotlin/*.bzl
-	buildifier -mode=fix -v kotlin/rules/*.bzl
+	buildifier -mode=fix -v kotlin/internal/*.bzl
 
 docs.regen:
 	bazel build //docs
diff --git a/docs/index.html b/docs/index.html
index 60c7bc9..6bf282a 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -59,12 +59,11 @@
   </ul>
 </li>
 <li>
-  <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html">Kotlin Toolchains</a>
+  <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html">toolchains Rules</a>
   <ul>
-    <li><a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#overview">Overview</a></li>
     <li>
-      <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_jvm_toolchain">
-        kt_jvm_toolchain
+      <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_toolchain">
+        kt_toolchain
       </a>
     </li>
   </ul>
@@ -83,7 +82,7 @@
   <h2>Rule sets</h2>
   <ul>
     <li><a href="#kotlin">Kotlin Rules</a></li>
-    <li><a href="#toolchains">Kotlin Toolchains</a></li>
+    <li><a href="#toolchains">toolchains Rules</a></li>
   </ul>
 </nav>
 
@@ -174,7 +173,7 @@
     </tr>
   </tbody>
 </table>
-<h2><a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html">Kotlin Toolchains</a></h2>
+<h2><a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html">toolchains Rules</a></h2>
 
 <h3>Rules</h3>
 <table class="overview-table">
@@ -185,8 +184,8 @@
   <tbody>
     <tr>
       <td>
-        <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_jvm_toolchain">
-          <code>kt_jvm_toolchain</code>
+        <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_toolchain">
+          <code>kt_toolchain</code>
         </a>
       </td>
       <td>
@@ -205,8 +204,8 @@
   <tbody>
     <tr>
       <td>
-        <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#define_kt_jvm_toolchain">
-          <code>define_kt_jvm_toolchain</code>
+        <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#define_kt_toolchain">
+          <code>define_kt_toolchain</code>
         </a>
       </td>
       <td>
@@ -214,17 +213,6 @@
 
       </td>
     </tr>
-    <tr>
-      <td>
-        <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_register_jvm_toolchain">
-          <code>kt_register_jvm_toolchain</code>
-        </a>
-      </td>
-      <td>
-        <p>Register the default JVM toolchain.</p>
-
-      </td>
-    </tr>
   </tbody>
 </table>
 
diff --git a/docs/kotlin/kotlin.html b/docs/kotlin/kotlin.html
index 9569070..640b263 100644
--- a/docs/kotlin/kotlin.html
+++ b/docs/kotlin/kotlin.html
@@ -59,12 +59,11 @@
   </ul>
 </li>
 <li>
-  <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html">Kotlin Toolchains</a>
+  <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html">toolchains Rules</a>
   <ul>
-    <li><a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#overview">Overview</a></li>
     <li>
-      <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_jvm_toolchain">
-        kt_jvm_toolchain
+      <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_toolchain">
+        kt_toolchain
       </a>
     </li>
   </ul>
diff --git a/docs/kotlin/toolchains.html b/docs/kotlin/toolchains.html
index 8b7764f..8617634 100644
--- a/docs/kotlin/toolchains.html
+++ b/docs/kotlin/toolchains.html
@@ -10,7 +10,7 @@
     <meta name="viewport" content="width=device-width initial-scale=1" />
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 
-    <title>Kotlin Toolchains</title>
+    <title>toolchains Rules</title>
 
     <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700" type="text/css">
     <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
@@ -23,7 +23,7 @@
       mdl-layout--fixed-header">
       <header class="mdl-layout__header">
         <div class="mdl-layout__header-row">
-          <span class="mdl-layout-title">Kotlin Toolchains</span>
+          <span class="mdl-layout-title">toolchains Rules</span>
         </div>
       </header>
       <div class="mdl-layout__drawer">
@@ -59,12 +59,11 @@
   </ul>
 </li>
 <li>
-  <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html">Kotlin Toolchains</a>
+  <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html">toolchains Rules</a>
   <ul>
-    <li><a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#overview">Overview</a></li>
     <li>
-      <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_jvm_toolchain">
-        kt_jvm_toolchain
+      <a href="https://bazelbuild.github.io/rules_kotlin/kotlin/toolchains.html#kt_toolchain">
+        kt_toolchain
       </a>
     </li>
   </ul>
@@ -76,47 +75,28 @@
 
       <main class="mdl-layout__content">
         <div class="page-content">
-          <h1>Kotlin Toolchains</h1>
+          <h1>toolchains Rules</h1>
 
 <nav class="toc">
-  <h2><a href="#overview">Overview</a></h2>
   <h2>Rules</h2>
   <ul>
-    <li><a href="#kt_jvm_toolchain">kt_jvm_toolchain</a></li>
+    <li><a href="#kt_toolchain">kt_toolchain</a></li>
   </ul>
   <h2>Macros</h2>
   <ul>
-    <li><a href="#define_kt_jvm_toolchain">define_kt_jvm_toolchain</a></li>
-    <li><a href="#kt_register_jvm_toolchain">kt_register_jvm_toolchain</a></li>
+    <li><a href="#define_kt_toolchain">define_kt_toolchain</a></li>
   </ul>
 </nav>
           <hr>
-          <h2 id="overview">Overview</h2>
-          <p>This file contains macros for defining and registering specific toolchains.</p>
-<h3>Examples</h3>
-<p>To override a tool chain use the appropriate macro in a <code>BUILD</code> file to declare the toolchain:</p>
-<pre><code class="lang-bzl">load(&quot;@io_bazel_rules_kotlin//kotlin:toolchains.bzl&quot;, &quot;define_kt_jvm_toolchain&quot;)
 
-define_kt_jvm_toolchain(
-    name= &quot;custom_toolchain&quot;,
-    api_version = &quot;1.1&quot;,
-    language_version = &quot;1.1&quot;,
-)
-</code></pre>
-<p>and then register it in the <code>WORKSPACE</code>:</p>
-<pre><code class="lang-bzl">register_toolchains(&quot;//:custom_toolchain&quot;)
-</code></pre>
+          <h2 id="define_kt_toolchain">define_kt_toolchain</h2>
 
-          <hr>
-
-          <h2 id="define_kt_jvm_toolchain">define_kt_jvm_toolchain</h2>
-
-          <pre>define_kt_jvm_toolchain(<a href="#define_kt_jvm_toolchain.name">name</a>, <a href="#define_kt_jvm_toolchain.language_version">language_version</a>, <a href="#define_kt_jvm_toolchain.api_version">api_version</a>, <a href="#define_kt_jvm_toolchain.jvm_target">jvm_target</a>, <a href="#define_kt_jvm_toolchain.coroutines">coroutines</a>)</pre>
+          <pre>define_kt_toolchain(<a href="#define_kt_toolchain.name">name</a>, <a href="#define_kt_toolchain.language_version">language_version</a>, <a href="#define_kt_toolchain.api_version">api_version</a>, <a href="#define_kt_toolchain.jvm_target">jvm_target</a>, <a href="#define_kt_toolchain.coroutines">coroutines</a>)</pre>
 
           <p>Define a Kotlin JVM Toolchain, the name is used in the <code>toolchain</code> rule so can be used to register the toolchain in the WORKSPACE file.</p>
 
 
-          <h3 id="define_kt_jvm_toolchain_args">Attributes</h3>
+          <h3 id="define_kt_toolchain_args">Attributes</h3>
 
 <table class="params-table">
   <colgroup>
@@ -124,35 +104,35 @@
     <col class="col-description" />
   </colgroup>
   <tbody>
-    <tr id="define_kt_jvm_toolchain.name">
+    <tr id="define_kt_toolchain.name">
       <td><code>name</code></td>
       <td>
         <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
         <p>A unique name for this rule.</p>
       </td>
     </tr>
-    <tr id="define_kt_jvm_toolchain.language_version">
+    <tr id="define_kt_toolchain.language_version">
       <td><code>language_version</code></td>
       <td>
         <p><code>Unknown; Optional</code></p>
         
       </td>
     </tr>
-    <tr id="define_kt_jvm_toolchain.api_version">
+    <tr id="define_kt_toolchain.api_version">
       <td><code>api_version</code></td>
       <td>
         <p><code>Unknown; Optional</code></p>
         
       </td>
     </tr>
-    <tr id="define_kt_jvm_toolchain.jvm_target">
+    <tr id="define_kt_toolchain.jvm_target">
       <td><code>jvm_target</code></td>
       <td>
         <p><code>Unknown; Optional</code></p>
         
       </td>
     </tr>
-    <tr id="define_kt_jvm_toolchain.coroutines">
+    <tr id="define_kt_toolchain.coroutines">
       <td><code>coroutines</code></td>
       <td>
         <p><code>Unknown; Optional</code></p>
@@ -163,23 +143,14 @@
 </table>
           <hr>
 
-          <h2 id="kt_register_jvm_toolchain">kt_register_jvm_toolchain</h2>
+          <h2 id="kt_toolchain">kt_toolchain</h2>
 
-          <pre>kt_register_jvm_toolchain()</pre>
-
-          <p>Register the default JVM toolchain.</p>
-
-
-          <hr>
-
-          <h2 id="kt_jvm_toolchain">kt_jvm_toolchain</h2>
-
-          <pre>kt_jvm_toolchain(<a href="#kt_jvm_toolchain.name">name</a>, <a href="#kt_jvm_toolchain.api_version">api_version</a>, <a href="#kt_jvm_toolchain.coroutines">coroutines</a>, <a href="#kt_jvm_toolchain.jvm_target">jvm_target</a>, <a href="#kt_jvm_toolchain.language_version">language_version</a>)</pre>
+          <pre>kt_toolchain(<a href="#kt_toolchain.name">name</a>, <a href="#kt_toolchain.api_version">api_version</a>, <a href="#kt_toolchain.coroutines">coroutines</a>, <a href="#kt_toolchain.jvm_target">jvm_target</a>, <a href="#kt_toolchain.language_version">language_version</a>)</pre>
 
           <p>The kotlin jvm toolchain</p>
 
 
-          <h3 id="kt_jvm_toolchain_args">Attributes</h3>
+          <h3 id="kt_toolchain_args">Attributes</h3>
 
 <table class="params-table">
   <colgroup>
@@ -187,35 +158,35 @@
     <col class="col-description" />
   </colgroup>
   <tbody>
-    <tr id="kt_jvm_toolchain.name">
+    <tr id="kt_toolchain.name">
       <td><code>name</code></td>
       <td>
         <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
         <p>A unique name for this rule.</p>
       </td>
     </tr>
-    <tr id="kt_jvm_toolchain.api_version">
+    <tr id="kt_toolchain.api_version">
       <td><code>api_version</code></td>
       <td>
         <p><code>String; Optional; Default is '1.2'</code></p>
         <p>the -api_version flag <a href="https://kotlinlang.org/docs/reference/compatibility.html">see</a>.</p>
       </td>
     </tr>
-    <tr id="kt_jvm_toolchain.coroutines">
+    <tr id="kt_toolchain.coroutines">
       <td><code>coroutines</code></td>
       <td>
         <p><code>String; Optional; Default is 'enable'</code></p>
         <p>the -Xcoroutines flag, enabled by default as it's considered production ready 1.2.0 onward.</p>
       </td>
     </tr>
-    <tr id="kt_jvm_toolchain.jvm_target">
+    <tr id="kt_toolchain.jvm_target">
       <td><code>jvm_target</code></td>
       <td>
         <p><code>String; Optional; Default is '1.8'</code></p>
         <p>the -jvm_target flag.</p>
       </td>
     </tr>
-    <tr id="kt_jvm_toolchain.language_version">
+    <tr id="kt_toolchain.language_version">
       <td><code>language_version</code></td>
       <td>
         <p><code>String; Optional; Default is '1.2'</code></p>
diff --git a/kotlin/BUILD b/kotlin/BUILD
index 7411d64..d20fe7f 100644
--- a/kotlin/BUILD
+++ b/kotlin/BUILD
@@ -13,13 +13,16 @@
 # limitations under the License.
 package(default_visibility = ["//visibility:public"])
 
-load("//kotlin:toolchains.bzl", "define_kt_jvm_toolchain")
+load("//kotlin:toolchains.bzl", "define_kt_toolchain")
+load("//kotlin/internal:bootstrap.bzl", "kt_toolchain_ide_info")
 
 toolchain_type(
-    name = "kt_jvm_toolchain_type",
+    name = "kt_toolchain_type",
     visibility = ["//visibility:public"]
 )
 
-define_kt_jvm_toolchain(name = "default_jvm_toolchain")
+define_kt_toolchain(name = "default_toolchain")
+
+kt_toolchain_ide_info(name="kt_toolchain_ide_info")
 
 exports_files(["toolchains.bzl", "kotlin.bzl"], visibility=["//docs:__subpackages__"])
\ No newline at end of file
diff --git a/kotlin/rules/BUILD b/kotlin/internal/BUILD
similarity index 100%
rename from kotlin/rules/BUILD
rename to kotlin/internal/BUILD
diff --git a/kotlin/internal/bootstrap.bzl b/kotlin/internal/bootstrap.bzl
new file mode 100644
index 0000000..2513c40
--- /dev/null
+++ b/kotlin/internal/bootstrap.bzl
@@ -0,0 +1,56 @@
+# 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.
+"""This file contains rules used to bootstrap the compiler repository."""
+
+load("//kotlin/internal:kt.bzl", "kt")
+load("//kotlin/internal:rules.bzl", _kt_jvm_import_impl="kt_jvm_import_impl")
+
+kotlin_stdlib = rule(
+    attrs = {
+        "jars": attr.label_list(
+            allow_files = True,
+            mandatory = True,
+            cfg = "host",
+        ),
+        "srcjar": attr.label(
+            allow_single_file = True,
+            cfg = "host",
+        ),
+    },
+    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(
+        label = tc.label,
+        common = struct(
+            language_version = tc.language_version,
+            api_version = tc.api_version,
+            coroutines = tc.coroutines
+        ),
+        jvm = struct(
+            jvm_target = tc.jvm_target,
+        )
+    )
+    ctx.actions.write(ctx.outputs.ide_info, info.to_json())
+    return [DefaultInfo(files=depset([ctx.outputs.ide_info]))]
+
+kt_toolchain_ide_info = rule(
+    outputs = {"ide_info": "kt_toolchain_ide_info.json"},
+    toolchains = [kt.defs.TOOLCHAIN_TYPE],
+    implementation = _kt_toolchain_ide_info_impl,
+)
diff --git a/kotlin/rules/compile.bzl b/kotlin/internal/compile.bzl
similarity index 86%
rename from kotlin/rules/compile.bzl
rename to kotlin/internal/compile.bzl
index 5000d20..b2b6e91 100644
--- a/kotlin/rules/compile.bzl
+++ b/kotlin/internal/compile.bzl
@@ -11,22 +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.
-load(
-    "//kotlin/rules:defs.bzl",
-    _KotlinInfo = "KotlinInfo",
-)
-load(
-    "//kotlin/rules:plugins.bzl",
-    _merge_plugin_infos = "merge_plugin_infos",
-)
-load(
-    "//kotlin/rules:util.bzl",
-    _collect_all_jars = "collect_all_jars",
-    _collect_jars_for_compile = "collect_jars_for_compile",
-    _kotlin_build_resourcejar_action = "kotlin_build_resourcejar_action",
-    _kotlin_fold_jars_action = "kotlin_fold_jars_action",
-    _kotlin_maybe_make_srcs_action = "kotlin_maybe_make_srcs_action",
-)
+load("//kotlin/internal:kt.bzl", "kt")
+load("//kotlin/internal:plugins.bzl", "plugins")
+load("//kotlin/internal:utils.bzl", "utils")
 
 def _kotlin_do_compile_action(ctx, output_jar, compile_jars, opts):
     """Internal macro that sets up a Kotlin compile action.
@@ -45,7 +32,7 @@
       opts: struct containing Kotlin compilation options.
     """
     compiler_output_base=ctx.actions.declare_directory(ctx.label.name + "." + "kotlinc")
-    tc=ctx.toolchains["@io_bazel_rules_kotlin//kotlin:kt_jvm_toolchain_type"]
+    tc=ctx.toolchains[kt.defs.TOOLCHAIN_TYPE]
     args = [
         "--target_label", ctx.label,
         "--compiler_output_base", compiler_output_base.path,
@@ -60,7 +47,7 @@
         "--kotlin_passthrough_flags", "-Xcoroutines=%s" % tc.coroutines
     ]
     # Collect and prepare plugin descriptor for the worker.
-    plugin_info=_merge_plugin_infos(ctx.attr.plugins + ctx.attr.deps)
+    plugin_info=plugins.merge_plugin_infos(ctx.attr.plugins + ctx.attr.deps)
     if len(plugin_info.processors) > 0:
         args += [ "--kt-plugins", plugin_info.to_json() ]
 
@@ -118,8 +105,8 @@
     Returns:
     A JavaInfo provider.
     """
-    deps=_collect_all_jars(ctx.attr.deps)
-    exported_deps=_collect_all_jars(getattr(ctx.attr, "exports", []))
+    deps=utils.collect_all_jars(ctx.attr.deps)
+    exported_deps=utils.collect_all_jars(getattr(ctx.attr, "exports", []))
 
     my_compile_jars = exported_deps.compile_jars + [ctx.outputs.jar]
     my_runtime_jars = exported_deps.runtime_jars + [ctx.outputs.jar]
@@ -135,7 +122,7 @@
         use_ijar = False,
         # A list or set of output source jars that contain the uncompiled source files including the source files
         # generated by annotation processors if the case.
-        source_jars=_kotlin_maybe_make_srcs_action(ctx),
+        source_jars=utils.actions.maybe_make_srcsjar(ctx),
         # A list or a set of jars that should be used at compilation for a given target.
         compile_time_jars = my_compile_jars,
         # A list or a set of jars that should be used at runtime for a given target.
@@ -144,8 +131,8 @@
         transitive_runtime_jars=my_transitive_runtime_jars
     )
 
-def kotlin_make_providers(ctx, java_info, transitive_files=depset(order="default")):
-    kotlin_info=_KotlinInfo(
+def _make_providers(ctx, java_info, transitive_files=depset(order="default")):
+    kotlin_info=kt.info.KtInfo(
         src=ctx.attr.srcs,
         outputs = struct(
             jdeps = ctx.outputs.jdeps,
@@ -169,7 +156,7 @@
         providers=[java_info,default_info,kotlin_info],
     )
 
-def kotlin_compile_action(ctx):
+def _compile_action (ctx):
     """Setup a kotlin compile action.
 
     Args:
@@ -187,7 +174,7 @@
 
     # If this rule has any resources declared setup a zipper action to turn them into a jar and then add the declared zipper output to the merge list.
     if len(ctx.files.resources) > 0:
-        output_merge_list = output_merge_list + [_kotlin_build_resourcejar_action(ctx)]
+        output_merge_list = output_merge_list + [utils.actions.build_resourcejar(ctx)]
 
     # If this compile operation requires merging other jars setup the compile operation to go to a intermediate file and add that file to the merge list.
     if len(output_merge_list) > 0:
@@ -202,12 +189,17 @@
     _kotlin_do_compile_action(
         ctx,
         kt_compile_output_jar,
-        _collect_jars_for_compile(ctx.attr.deps) + kotlin_auto_deps,
+        utils.collect_jars_for_compile(ctx.attr.deps) + kotlin_auto_deps,
         _select_compilation_options(ctx)
     )
     # setup the merge action if needed.
     if len(output_merge_list) > 0:
-        _kotlin_fold_jars_action(ctx, output_jar, output_merge_list)
+        utils.actions.fold_jars(ctx, output_jar, output_merge_list)
 
     # create the java provider but the kotlin and default provider cannot be created here.
-    return _make_java_provider(ctx, kotlin_auto_deps)
\ No newline at end of file
+    return _make_java_provider(ctx, kotlin_auto_deps)
+
+compile = struct(
+    compile_action = _compile_action,
+    make_providers = _make_providers,
+)
diff --git a/kotlin/rules/defs.bzl b/kotlin/internal/kt.bzl
similarity index 67%
rename from kotlin/rules/defs.bzl
rename to kotlin/internal/kt.bzl
index f7564db..cd8d1e7 100644
--- a/kotlin/rules/defs.bzl
+++ b/kotlin/internal/kt.bzl
@@ -11,27 +11,35 @@
 # 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.
-
-# The name of the rules repo. Centralised so it's easy to change.
-REPO_ROOT = "io_bazel_rules_kotlin"
-
-# The name of the Kotlin compiler workspace.
-KOTLIN_REPO_ROOT = "com_github_jetbrains_kotlin"
-
 ########################################################################################################################
 # Providers
 ########################################################################################################################
-KotlinInfo = provider(
+_defs = struct(
+    DEFAULT_TOOLCHAIN = "@io_bazel_rules_kotlin//kotlin:default_toolchain",
+    # The name of the Kotlin compiler workspace.
+    KT_COMPILER_REPO = "com_github_jetbrains_kotlin",
+    # The name of the rules repo. Centralised so it's easy to change.
+    REPO_ROOT = "io_bazel_rules_kotlin",
+    TOOLCHAIN_TYPE = "@io_bazel_rules_kotlin//kotlin:kt_toolchain_type",
+)
+
+_KtInfo = provider(
     fields = {
         "src": "the source files. [intelij-aspect]",
         "outputs": "output jars produced by this rule. [intelij-aspect]",
     },
 )
 
-KotlinPluginInfo = provider(
+_KtPluginInfo = provider(
     fields = {
         "processors": "a serializeable list of structs containing an annotation processor definitions",
     },
 )
 
-"""a serializable provider containing plugin descriptors that can be processed by the worker"""
+kt = struct(
+    defs = _defs,
+    info = struct(
+        KtInfo = _KtInfo,
+        KtPluginInfo = _KtPluginInfo,
+    ),
+)
diff --git a/kotlin/internal/plugins.bzl b/kotlin/internal/plugins.bzl
new file mode 100644
index 0000000..85ed686
--- /dev/null
+++ b/kotlin/internal/plugins.bzl
@@ -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.
+load("//kotlin/internal:kt.bzl", "kt")
+
+def _mk_processor_entry(l,p):
+    return struct(
+          label=l,
+          processor_class=p.processor_class,
+          classpath=[cp.path for cp in java_common.merge([j[JavaInfo] for j in p.deps]).full_compile_jars],
+          generates_api=p.generates_api,
+    )
+
+def _merge_plugin_infos(attrs):
+    tally={}
+    processors=[]
+    for info in [a[kt.info.KtPluginInfo] for a in attrs]:
+        for p in info.processors:
+            if p.label not in tally:
+                tally[p.label] = True
+                processors.append(p)
+    return kt.info.KtPluginInfo(processors=processors)
+
+def _restore_label(l):
+    lbl = l.workspace_root
+    if lbl.startswith("external/"):
+        lbl = lbl.replace("external/", "@")
+    return lbl + "//" + l.package + ":" + l.name
+
+_EMPTY_PLUGIN_INFO = [kt.info.KtPluginInfo(processors = [])]
+
+def _kt_jvm_plugin_aspect_impl(target, ctx):
+    if ctx.rule.kind == "java_plugin":
+        return [kt.info.KtPluginInfo(
+            processors = [_mk_processor_entry(_restore_label(ctx.label),ctx.rule.attr)]
+        )]
+    else:
+      if ctx.rule.kind == "java_library":
+          return [_merge_plugin_infos(ctx.rule.attr.exported_plugins)]
+      else:
+          return _EMPTY_PLUGIN_INFO
+
+kt_jvm_plugin_aspect = aspect(
+    attr_aspects = [
+        "plugins",
+        "exported_plugins",
+    ],
+    implementation = _kt_jvm_plugin_aspect_impl,
+)
+
+"""renders a java info into a kt.info.KtPluginInfo."""
+
+plugins = struct(
+    kt_jvm_plugin_aspect = kt_jvm_plugin_aspect,
+    merge_plugin_infos = _merge_plugin_infos,
+)
diff --git a/kotlin/rules/rules.bzl b/kotlin/internal/rules.bzl
similarity index 78%
rename from kotlin/rules/rules.bzl
rename to kotlin/internal/rules.bzl
index b2c5595..93047ab 100644
--- a/kotlin/rules/rules.bzl
+++ b/kotlin/internal/rules.bzl
@@ -12,19 +12,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load(
-    "//kotlin/rules:compile.bzl",
-    _kotlin_compile_action = "kotlin_compile_action",
-    _kotlin_make_providers = "kotlin_make_providers",
-)
-load(
-    "//kotlin/rules:util.bzl",
-    _kotlin_write_launcher_action = "kotlin_write_launcher_action",
-)
-load(
-    "//kotlin/rules:defs.bzl",
-    _KotlinInfo = "KotlinInfo",
-)
+load("//kotlin/internal:compile.bzl", "compile")
+load("//kotlin/internal:kt.bzl", "kt")
+load("//kotlin/internal:utils.bzl", "utils")
 
 def _extract_kotlin_artifact(files):
     jars = [j for j in files if j.basename.endswith(".jar") and not j.basename.endswith("-sources.jar")]
@@ -48,7 +38,7 @@
         fail("the srcjar attribute should not be set when importing multiple class jars")
     return artifacts
 
-def kotlin_import_impl(ctx):
+def kt_jvm_import_impl(ctx):
     artifacts=_collect_import_artifacts(ctx)
 
     jars = [a.class_jar for a in artifacts]
@@ -61,22 +51,22 @@
         transitive_compile_time_jars=jars,
         transitive_runtime_jars=jars
     )
-    kotlin_info=_KotlinInfo(outputs = struct(jars = artifacts))
+    kotlin_info=kt.info.KtInfo(outputs = struct(jars = artifacts))
     default_info = DefaultInfo(files=depset(jars))
     return struct(kt = kotlin_info, providers= [default_info, java_info, kotlin_info])
 
-def kotlin_library_impl(ctx):
-    return _kotlin_make_providers(ctx, _kotlin_compile_action(ctx))
+def kt_jvm_library_impl(ctx):
+    return compile.make_providers(ctx, compile.compile_action(ctx))
 
-def kotlin_binary_impl(ctx):
-    java_info = _kotlin_compile_action(ctx)
-    _kotlin_write_launcher_action(
+def kt_jvm_binary_impl(ctx):
+    java_info = compile.compile_action(ctx)
+    utils.actions.write_launcher(
         ctx,
         java_info.transitive_runtime_jars,
         ctx.attr.main_class,
         ctx.attr.jvm_flags
     )
-    return _kotlin_make_providers(
+    return compile.make_providers(
         ctx,
         java_info,
         depset(
@@ -86,19 +76,19 @@
         )
     )
 
-def kotlin_junit_test_impl(ctx):
-    java_info = _kotlin_compile_action(ctx)
+def kt_jvm_junit_test_impl(ctx):
+    java_info = compile.compile_action(ctx)
 
     transitive_runtime_jars = java_info.transitive_runtime_jars + ctx.files._bazel_test_runner
     launcherJvmFlags = ["-ea", "-Dbazel.test_suite=%s"% ctx.attr.test_class]
 
-    _kotlin_write_launcher_action(
+    utils.actions.write_launcher(
         ctx,
         transitive_runtime_jars,
         main_class = "com.google.testing.junit.runner.BazelTestRunner",
         jvm_flags = launcherJvmFlags + ctx.attr.jvm_flags,
     )
-    return _kotlin_make_providers(
+    return compile.make_providers(
         ctx,
         java_info,
         depset(
diff --git a/kotlin/rules/util.bzl b/kotlin/internal/utils.bzl
similarity index 78%
rename from kotlin/rules/util.bzl
rename to kotlin/internal/utils.bzl
index 2338a04..7b6ce28 100644
--- a/kotlin/rules/util.bzl
+++ b/kotlin/internal/utils.bzl
@@ -12,14 +12,24 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("//kotlin/rules:defs.bzl", "KotlinInfo")
+load(
+    "//kotlin/internal:kt.bzl",
+    kt = "kt",
+)
 
-# DEPSET UTILS #########################################################################################################
+# MISC UTILS ###################################################################################################################################################
+def _restore_label(l):
+    lbl = l.workspace_root
+    if lbl.startswith("external/"):
+        lbl = lbl.replace("external/", "@")
+    return lbl + "//" + l.package + ":" + l.name
+
+# DEPSET UTILS #################################################################################################################################################
 def _select_compile_jars(dep):
     """selects the correct compile time jar from a java provider"""
     if not JavaInfo in dep:
         return []
-    is_kotlin_provider = KotlinInfo in dep
+    is_kotlin_provider = kt.info.KtInfo in dep
     java_provider = dep[JavaInfo]
     if is_kotlin_provider:
        return java_provider.full_compile_jars
@@ -28,7 +38,7 @@
     else:
         return java_provider.compile_jars
 
-def collect_jars_for_compile(deps):
+def _collect_jars_for_compile(deps):
     """creates the compile jar depset, this should be strict including only the output jars of the listed dependencies.
     """
     compile_jars = depset()
@@ -36,7 +46,7 @@
         compile_jars += _select_compile_jars(d)
     return compile_jars
 
-def collect_all_jars(deps):
+def _collect_all_jars(deps):
     """
     Merges a list of java providers into a struct of depsets.
     """
@@ -61,7 +71,7 @@
         transitive_compile_time_jars = transitive_compile_time_jars
     )
 
-# RESOURCE JARS ########################################################################################################
+# RESOURCE JARS ################################################################################################################################################
 _CONVENTIONAL_RESOURCE_PATHS = [
     "src/main/resources",
     "src/test/resources",
@@ -101,7 +111,7 @@
         res_cmd.extend([line])
     return "".join(res_cmd)
 
-def kotlin_build_resourcejar_action(ctx):
+def _build_resourcejar_action(ctx):
     resources = _add_resources_cmd(ctx)
     resources_jar_output = ctx.actions.declare_file(ctx.label.name + "-resources.jar")
     zipper_arg_path = ctx.actions.declare_file("%s_resources_zipper_args" % ctx.label.name)
@@ -124,8 +134,8 @@
     )
     return resources_jar_output
 
-# SRC JARS #############################################################################################################
-def kotlin_maybe_make_srcs_action(ctx):
+# SRC JARS #####################################################################################################################################################
+def _maybe_make_srcsjar_action(ctx):
     if len(ctx.files.srcs) > 0:
         output_srcjar = ctx.actions.declare_file(ctx.label.name + "-sources.jar")
         args = ["--output", output_srcjar.path]
@@ -144,8 +154,8 @@
     else:
         return []
 
-# PACKAGE JARS #########################################################################################################
-def kotlin_fold_jars_action(ctx, output_jar, input_jars):
+# PACKAGE JARS #################################################################################################################################################
+def _fold_jars_action(ctx, output_jar, input_jars):
     args=["--output", output_jar.path]
     for i in input_jars:
         args += ["--sources", i.path]
@@ -159,8 +169,8 @@
         progress_message="Merging Kotlin output jar " + output_jar.short_path
     )
 
-# JVM LAUNCH SCRIPTS ###################################################################################################
-def kotlin_write_launcher_action(ctx, rjars, main_class, jvm_flags, args="", wrapper_preamble=""):
+# JVM LAUNCH SCRIPTS ###########################################################################################################################################
+def _write_launcher_action(ctx, rjars, main_class, jvm_flags, args="", wrapper_preamble=""):
     """Macro that writes out a launcher script shell script.
       Args:
         rjars: All of the runtime jars required to launch this java target.
@@ -184,4 +194,17 @@
             "%workspace_prefix%": ctx.workspace_name + "/",
         },
         is_executable = True,
-    )
\ No newline at end of file
+    )
+
+# EXPORT #######################################################################################################################################################
+utils = struct(
+    actions = struct(
+        build_resourcejar = _build_resourcejar_action,
+        fold_jars = _fold_jars_action,
+        maybe_make_srcsjar = _maybe_make_srcsjar_action,
+        write_launcher = _write_launcher_action,
+    ),
+    collect_all_jars = _collect_all_jars,
+    collect_jars_for_compile = _collect_jars_for_compile,
+    restore_label = _restore_label,
+)
diff --git a/kotlin/kotlin.bzl b/kotlin/kotlin.bzl
index 0d2b5b0..d624907 100644
--- a/kotlin/kotlin.bzl
+++ b/kotlin/kotlin.bzl
@@ -96,12 +96,26 @@
 ########################################################################################################################
 
 load(
-    "//kotlin/rules:defs.bzl",
-    "KOTLIN_REPO_ROOT",
+    "//kotlin/internal:kt.bzl",
+    _kt = "kt",
+)
+# struct can't be used till skydoc is removed
+load(
+    "//kotlin/internal:plugins.bzl",
+    _kt_jvm_plugin_aspect="kt_jvm_plugin_aspect",
+)
+# struct can't be used till skydoc is removed
+load(
+    "//kotlin/internal:rules.bzl",
+    _kt_jvm_binary_impl = "kt_jvm_binary_impl",
+    _kt_jvm_import_impl = "kt_jvm_import_impl",
+    _kt_jvm_junit_test_impl = "kt_jvm_junit_test_impl",
+    _kt_jvm_library_impl = "kt_jvm_library_impl",
 )
 load(
-    "//kotlin/rules:plugins.bzl",
-    _kt_jvm_plugin_aspect = "kt_jvm_plugin_aspect",
+    "//kotlin:kotlin_compiler_repositories.bzl",
+    "KOTLIN_CURRENT_RELEASE",
+    _kotlin_compiler_repository = "kotlin_compiler_repository",
 )
 
 # The files types that may be passed to the core Kotlin compile rule.
@@ -116,6 +130,9 @@
     ".jar",
     "-sources.jar",
 ])
+# _kt.defs.KT_COMPILER_REPO can't be used till skydoc is removed
+KT_COMPILER_REPO="com_github_jetbrains_kotlin"
+
 
 ########################################################################################################################
 # Rule Attributes
@@ -124,13 +141,13 @@
     "_kotlin_compiler_classpath": attr.label_list(
         allow_files = True,
         default = [
-            Label("@" + KOTLIN_REPO_ROOT + "//:compiler"),
-            Label("@" + KOTLIN_REPO_ROOT + "//:reflect"),
-            Label("@" + KOTLIN_REPO_ROOT + "//:script-runtime"),
+            Label("@" + KT_COMPILER_REPO + "//:compiler"),
+            Label("@" + KT_COMPILER_REPO + "//:reflect"),
+            Label("@" + KT_COMPILER_REPO + "//:script-runtime"),
         ],
     ),
     "_kotlin_home": attr.label(
-        default = Label("@" + KOTLIN_REPO_ROOT + "//:home"),
+        default = Label("@" + KT_COMPILER_REPO + "//:home"),
         allow_files = True,
         cfg = "host",
     ),
@@ -141,17 +158,23 @@
     ),
     "_kotlin_runtime": attr.label(
         single_file = True,
-        default = Label("@" + KOTLIN_REPO_ROOT + "//:runtime"),
+        default = Label("@" + KT_COMPILER_REPO + "//:runtime"),
     ),
     "_kotlin_std": attr.label_list(default = [
-        Label("@" + KOTLIN_REPO_ROOT + "//:stdlib"),
-        Label("@" + KOTLIN_REPO_ROOT + "//:stdlib-jdk7"),
-        Label("@" + KOTLIN_REPO_ROOT + "//:stdlib-jdk8"),
+        Label("@" + KT_COMPILER_REPO + "//:stdlib"),
+        Label("@" + KT_COMPILER_REPO + "//:stdlib-jdk7"),
+        Label("@" + KT_COMPILER_REPO + "//:stdlib-jdk8"),
     ]),
+    "_kotlin_toolchain": attr.label_list(
+        default = [
+            Label("@io_bazel_rules_kotlin//kotlin:kt_toolchain_ide_info"),
+        ],
+        allow_files = False,
+    ),
     "_kotlin_reflect": attr.label(
         single_file = True,
         default =
-            Label("@" + KOTLIN_REPO_ROOT + "//:reflect"),
+            Label("@" + KT_COMPILER_REPO + "//:reflect"),
     ),
     "_singlejar": attr.label(
         executable = True,
@@ -200,7 +223,7 @@
         default = [],
         aspects = [_kt_jvm_plugin_aspect],
     ),
-    "module_name": attr.string()
+    "module_name": attr.string(),
 }.items())
 
 _runnable_common_attr = dict(_common_attr.items() + {
@@ -224,12 +247,6 @@
 ########################################################################################################################
 # Repositories and Toolchains
 ########################################################################################################################
-load(
-    "//kotlin:kotlin_compiler_repositories.bzl",
-    "KOTLIN_CURRENT_RELEASE",
-    _kotlin_compiler_repository = "kotlin_compiler_repository",
-)
-
 def kotlin_repositories(
     kotlin_release_version=KOTLIN_CURRENT_RELEASE
 ):
@@ -241,30 +258,20 @@
     """
     _kotlin_compiler_repository(kotlin_release_version)
 
-load("//kotlin:toolchains.bzl", _kt_register_jvm_toolchain="kt_register_jvm_toolchain")
-
 def kt_register_toolchains():
     """register all default toolchains"""
-    _kt_register_jvm_toolchain()
+    native.register_toolchains(_kt.defs.DEFAULT_TOOLCHAIN)
 
 ########################################################################################################################
 # Simple Rules:
 ########################################################################################################################
-load(
-    "//kotlin/rules:rules.bzl",
-    _kotlin_binary_impl = "kotlin_binary_impl",
-    _kotlin_import_impl = "kotlin_import_impl",
-    _kotlin_junit_test_impl = "kotlin_junit_test_impl",
-    _kotlin_library_impl = "kotlin_library_impl",
-)
-
 kt_jvm_library = rule(
     attrs = dict(_common_attr.items() + {
-        "exports": attr.label_list(default = [])
+        "exports": attr.label_list(default = []),
     }.items()),
     outputs = _common_outputs,
-    implementation = _kotlin_library_impl,
-    toolchains = ["@io_bazel_rules_kotlin//kotlin:kt_jvm_toolchain_type"]
+    toolchains = [_kt.defs.TOOLCHAIN_TYPE],
+    implementation = _kt_jvm_library_impl,
 )
 
 """This rule compiles and links Kotlin and Java sources into a .jar file.
@@ -291,8 +298,8 @@
     attrs = dict(_runnable_common_attr.items() + {"main_class": attr.string(mandatory = True)}.items()),
     executable = True,
     outputs = _binary_outputs,
-    implementation = _kotlin_binary_impl,
-    toolchains = ["@io_bazel_rules_kotlin//kotlin:kt_jvm_toolchain_type"]
+    toolchains = [_kt.defs.TOOLCHAIN_TYPE],
+    implementation = _kt_jvm_binary_impl,
 )
 
 """Builds a Java archive ("jar file"), plus a wrapper shell script with the same name as the rule. The wrapper shell script uses a classpath that includes,
@@ -318,8 +325,8 @@
     executable = True,
     outputs = _binary_outputs,
     test = True,
-    implementation = _kotlin_junit_test_impl,
-    toolchains = ["@io_bazel_rules_kotlin//kotlin:kt_jvm_toolchain_type"]
+    toolchains = [_kt.defs.TOOLCHAIN_TYPE],
+    implementation = _kt_jvm_junit_test_impl,
 )
 
 """Setup a simple kotlin_test.
@@ -341,7 +348,7 @@
             allow_single_file = True,
         ),
     },
-    implementation = _kotlin_import_impl,
+    implementation = _kt_jvm_import_impl,
 )
 
 # The pairing of src and class is used by intellij to attatch sources, this is picked up via the kt provider attribute.
diff --git a/kotlin/kotlin_compiler_repositories.bzl b/kotlin/kotlin_compiler_repositories.bzl
index 4d72046..2531073 100644
--- a/kotlin/kotlin_compiler_repositories.bzl
+++ b/kotlin/kotlin_compiler_repositories.bzl
@@ -14,7 +14,10 @@
 """This file contains the Kotlin compiler repository definitions.
 """
 
-load("//kotlin/rules:defs.bzl", "KOTLIN_REPO_ROOT")
+load(
+    "//kotlin/internal:kt.bzl",
+    _kt = "kt",
+)
 
 KOTLIN_RELEASES = {
     "1.2.21": {
@@ -40,7 +43,7 @@
 }
 
 KOTLIN_COMPILER_REPO_BUILD_FILE = """
-load("@io_bazel_rules_kotlin//kotlin/rules:bootstrap.bzl", kotlin_stdlib="kotlin_stdlib")
+load("@io_bazel_rules_kotlin//kotlin/internal:bootstrap.bzl", kotlin_stdlib="kotlin_stdlib")
 package(default_visibility = ["//visibility:public"])
 
 filegroup(
@@ -151,7 +154,7 @@
         fail('"%s" not a valid kotlin release, current release is "%s"' % (kotlin_release_version, KOTLIN_CURRENT_RELEASE))
 
     native.new_http_archive(
-        name = KOTLIN_REPO_ROOT,
+        name = _kt.defs.KT_COMPILER_REPO,
         url = release["url"],
         sha256 = release["sha256"],
         build_file_content= KOTLIN_COMPILER_REPO_BUILD_FILE,
diff --git a/kotlin/rules/bootstrap.bzl b/kotlin/rules/bootstrap.bzl
deleted file mode 100644
index c8daebc..0000000
--- a/kotlin/rules/bootstrap.bzl
+++ /dev/null
@@ -1,40 +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.
-"""This file contains rules used to bootstrap the compiler repository."""
-
-load(
-    "//kotlin/rules:defs.bzl",
-    _KotlinInfo = "KotlinInfo",
-)
-load(
-    "//kotlin/rules:rules.bzl",
-    _kotlin_import_impl = "kotlin_import_impl",
-)
-
-kotlin_stdlib = rule(
-    attrs = {
-        "jars": attr.label_list(
-            allow_files = True,
-            mandatory = True,
-            cfg = "host",
-        ),
-        "srcjar": attr.label(
-            allow_single_file = True,
-            cfg = "host",
-        ),
-    },
-    implementation = _kotlin_import_impl,
-)
-
-"""Import Kotlin libraries that are part of the compiler release."""
diff --git a/kotlin/rules/plugins.bzl b/kotlin/rules/plugins.bzl
deleted file mode 100644
index 54a3f74..0000000
--- a/kotlin/rules/plugins.bzl
+++ /dev/null
@@ -1,51 +0,0 @@
-load(
-    "//kotlin/rules:defs.bzl",
-    _KotlinPluginInfo = "KotlinPluginInfo",
-)
-
-def _mk_processor_entry(l,p):
-    return struct(
-          label=l,
-          processor_class=p.processor_class,
-          classpath=[cp.path for cp in java_common.merge([j[JavaInfo] for j in p.deps]).full_compile_jars],
-          generates_api=p.generates_api,
-    )
-
-def merge_plugin_infos(attrs):
-    tally={}
-    processors=[]
-    for info in [a[_KotlinPluginInfo] for a in attrs]:
-        for p in info.processors:
-            if p.label not in tally:
-                tally[p.label] = True
-                processors.append(p)
-    return _KotlinPluginInfo(processors=processors)
-
-def _restore_label(l):
-    lbl = l.workspace_root
-    if lbl.startswith("external/"):
-        lbl = lbl.replace("external/", "@")
-    return lbl + "//" + l.package + ":" + l.name
-
-_EMPTY_PLUGIN_INFO = [_KotlinPluginInfo(processors = [])]
-
-def _kt_jvm_plugin_aspect_impl(target, ctx):
-    if ctx.rule.kind == "java_plugin":
-        return [_KotlinPluginInfo(
-            processors = [_mk_processor_entry(_restore_label(ctx.label),ctx.rule.attr)]
-        )]
-    else:
-      if ctx.rule.kind == "java_library":
-          return [merge_plugin_infos(ctx.rule.attr.exported_plugins)]
-      else:
-          return _EMPTY_PLUGIN_INFO
-
-kt_jvm_plugin_aspect = aspect(
-    attr_aspects = [
-        "plugins",
-        "exported_plugins",
-    ],
-    implementation = _kt_jvm_plugin_aspect_impl,
-)
-
-"""renders a java info into a KotlinPluginInfo."""
diff --git a/kotlin/toolchains.bzl b/kotlin/toolchains.bzl
index e7ce1fb..9666b88 100644
--- a/kotlin/toolchains.bzl
+++ b/kotlin/toolchains.bzl
@@ -11,6 +11,15 @@
 # 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/internal:utils.bzl",
+    _utils = "utils",
+)
+load(
+    "//kotlin/internal:kt.bzl",
+    _kt = "kt",
+)
+
 """Kotlin Toolchains
 
 This file contains macros for defining and registering specific toolchains.
@@ -20,9 +29,9 @@
 To override a tool chain use the appropriate macro in a `BUILD` file to declare the toolchain:
 
 ```bzl
-load("@io_bazel_rules_kotlin//kotlin:toolchains.bzl", "define_kt_jvm_toolchain")
+load("@io_bazel_rules_kotlin//kotlin:toolchains.bzl", "define_kt_toolchain")
 
-define_kt_jvm_toolchain(
+define_kt_toolchain(
     name= "custom_toolchain",
     api_version = "1.1",
     language_version = "1.1",
@@ -33,30 +42,58 @@
 register_toolchains("//:custom_toolchain")
 ```
 """
+
 # The toolchain rules are not made private, at least the jvm ones so that they may be introspected in Intelij.
 _common_attrs = {
-    'language_version': attr.string(default="1.2", values=["1.1", "1.2"]),
-    'api_version': attr.string(default="1.2", values=["1.1", "1.2"]),
-    "coroutines": attr.string(default="enable", values=["enable", "warn", "error"]),
+    "language_version": attr.string(
+        default = "1.2",
+        values = [
+            "1.1",
+            "1.2",
+        ],
+    ),
+    "api_version": attr.string(
+        default = "1.2",
+        values = [
+            "1.1",
+            "1.2",
+        ],
+    ),
+    "coroutines": attr.string(
+        default = "enable",
+        values = [
+            "enable",
+            "warn",
+            "error",
+        ],
+    ),
 }
 
 _kt_jvm_attrs = dict(_common_attrs.items() + {
-    'jvm_target': attr.string(default="1.8", values=["1.6", "1.8"]),
+    "jvm_target": attr.string(
+        default = "1.8",
+        values = [
+            "1.6",
+            "1.8",
+        ],
+    ),
 }.items())
 
-def _kotlin_jvm_toolchain_impl(ctx):
+def _kotlin_toolchain_impl(ctx):
     toolchain = platform_common.ToolchainInfo(
+        label = _utils.restore_label(ctx.label),
         language_version = ctx.attr.language_version,
         api_version = ctx.attr.api_version,
         jvm_target = ctx.attr.jvm_target,
         coroutines = ctx.attr.coroutines
     )
-    return [toolchain]
+    return struct(providers=[toolchain])
 
-kt_jvm_toolchain = rule(
-    implementation = _kotlin_jvm_toolchain_impl,
-    attrs = _kt_jvm_attrs
+kt_toolchain = rule(
+    attrs = _kt_jvm_attrs,
+    implementation = _kotlin_toolchain_impl,
 )
+
 """The kotlin jvm toolchain
 Args:
   language_version: the -languag_version flag [see](https://kotlinlang.org/docs/reference/compatibility.html).
@@ -65,10 +102,10 @@
   coroutines: the -Xcoroutines flag, enabled by default as it's considered production ready 1.2.0 onward.
 """
 
-def define_kt_jvm_toolchain(name, language_version=None, api_version=None, jvm_target=None, coroutines=None):
+def define_kt_toolchain(name, language_version=None, api_version=None, jvm_target=None, coroutines=None):
     """Define a Kotlin JVM Toolchain, the name is used in the `toolchain` rule so can be used to register the toolchain in the WORKSPACE file."""
     impl_name = name + "_impl"
-    kt_jvm_toolchain(
+    kt_toolchain(
         name = impl_name,
         language_version = language_version,
         api_version = api_version,
@@ -78,11 +115,7 @@
     )
     native.toolchain(
         name = name,
-        toolchain_type = "@io_bazel_rules_kotlin//kotlin:kt_jvm_toolchain_type",
+        toolchain_type = _kt.defs.TOOLCHAIN_TYPE,
         toolchain = impl_name,
         visibility = ["//visibility:public"]
     )
-
-def kt_register_jvm_toolchain():
-    """Register the default JVM toolchain."""
-    native.register_toolchains("@io_bazel_rules_kotlin//kotlin:default_jvm_toolchain")
diff --git a/kotlin/workers/BUILD b/kotlin/workers/BUILD
index 010e07a..6cfd49f 100644
--- a/kotlin/workers/BUILD
+++ b/kotlin/workers/BUILD
@@ -25,7 +25,7 @@
         "//third_party:moshi-kotlin"
     ],
     exports = [
-        "//kotlin/workers/proto"
+        "//kotlin/workers/proto",
     ],
     runtime_deps = [
         "@com_github_jetbrains_kotlin//:kotlin-stdlib",
