diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
index 75dcab5..4b249cb 100644
--- a/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
+++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
@@ -38,19 +38,25 @@
     class Result(val timings: List<String>, val command: CompilationTask)
 
     fun compile(command: CompilationTask): Result {
-        val context = Context()
-        val commandWithApSources = context.execute("kapt") {
-            runAnnotationProcessors(command)
+        // fix error handling
+        try {
+            val context = Context()
+            val commandWithApSources = context.execute("kapt") {
+                runAnnotationProcessors(command)
+            }
+            compileClasses(context, commandWithApSources)
+            context.execute("create jar") {
+                outputJarCreator.createOutputJar(commandWithApSources)
+            }
+            produceSourceJar(commandWithApSources)
+            context.execute("generate jdeps") {
+                jDepsGenerator.generateJDeps(commandWithApSources)
+            }
+            return Result(context.timings, commandWithApSources)
+
+        } catch (ex: Throwable) {
+            throw RuntimeException(ex)
         }
-        compileClasses(context, commandWithApSources)
-        context.execute("create jar") {
-            outputJarCreator.createOutputJar(commandWithApSources)
-        }
-        produceSourceJar(commandWithApSources)
-        context.execute("generate jdeps") {
-            jDepsGenerator.generateJDeps(commandWithApSources)
-        }
-        return Result(context.timings, commandWithApSources)
     }
 
     private fun produceSourceJar(command: CompilationTask) {
diff --git a/kotlin/internal/compile.bzl b/kotlin/internal/compile.bzl
index 71f1d48..0444853 100644
--- a/kotlin/internal/compile.bzl
+++ b/kotlin/internal/compile.bzl
@@ -103,52 +103,6 @@
         input_manifests = input_manifests
     )
 
-def _select_std_libs(ctx):
-    return ctx.toolchains[kt.defs.TOOLCHAIN_TYPE].jvm_stdlibs
-
-def _make_java_provider(ctx, srcs, input_deps=[], auto_deps=[]):
-    """Creates the java_provider for a Kotlin target.
-
-    This macro is distinct from the kotlin_make_providers as collecting the java_info is useful before the DefaultInfo is
-    created.
-
-    Args:
-    ctx: The ctx of the rule in scope when this macro is called. The macro will pick up the following entities from
-      the rule ctx:
-        * The default output jar.
-        * The `deps` for this provider.
-        * Optionally `exports` (see java rules).
-        * The `_kotlin_runtime` implicit dependency.
-    Returns:
-    A JavaInfo provider.
-    """
-    runtime = ctx.toolchains[kt.defs.TOOLCHAIN_TYPE].jvm_runtime
-    deps=utils.collect_all_jars(input_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.transitive_runtime_jars + [ctx.outputs.jar]
-
-    my_transitive_compile_jars = my_compile_jars + deps.transitive_compile_time_jars + exported_deps.transitive_compile_time_jars + auto_deps
-    my_transitive_runtime_jars = my_runtime_jars + deps.transitive_runtime_jars + exported_deps.transitive_runtime_jars + runtime + auto_deps
-
-    # collect the runtime jars from the runtime_deps attribute.
-    for jar in ctx.attr.runtime_deps:
-        my_transitive_runtime_jars += jar[JavaInfo].transitive_runtime_jars
-
-    return java_common.create_provider(
-        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 = [ctx.outputs.srcjar],
-        # 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.
-        runtime_jars = my_runtime_jars,
-        transitive_compile_time_jars = my_transitive_compile_jars,
-        transitive_runtime_jars = my_transitive_runtime_jars
-    )
-
 def _make_providers(ctx, java_info, module_name, transitive_files=depset(order="default")):
     kotlin_info=kt.info.KtInfo(
         srcs=ctx.files.srcs,
@@ -159,7 +113,7 @@
             jars = [struct(
               class_jar = ctx.outputs.jar,
               ijar = None,
-              source_jars = java_info.source_jars
+              source_jars = [ctx.outputs.srcjar]
             )]
         ),
     )
@@ -204,21 +158,43 @@
         # If we setup indirection than the first entry in the merge list is the result of the kotlin compile action.
         output_merge_list=[ kt_compile_output_jar ] + output_merge_list
 
-    kotlin_auto_deps=_select_std_libs(ctx)
-
-    deps = ctx.attr.deps + getattr(ctx.attr, "friends", [])
-
     srcs = utils.partition_srcs(ctx.files.srcs)
 
     if (len(srcs.kt) + len(srcs.java) == 0) and len(srcs.src_jars) == 0:
         fail("no sources provided")
 
+    toolchain=ctx.toolchains[kt.defs.TOOLCHAIN_TYPE]
+
+    deps = [
+        d[JavaInfo]
+        for d in (
+            toolchain.jvm_stdlibs +
+            getattr(ctx.attr, "friends", []) +
+            ctx.attr.deps
+        )
+    ]
+
+    runtime_deps = [
+        d[JavaInfo]
+        for d in (
+            ctx.attr.runtime_deps +
+            [toolchain.jvm_runtime]
+        )
+    ]
+
+    exports = [
+        d[JavaInfo]
+        for d in (
+            getattr(ctx.attr, "exports", [])
+        )
+    ]
+
     # setup the compile action.
     _kotlin_do_compile_action(
         ctx,
         rule_kind = rule_kind,
         output_jar = kt_compile_output_jar,
-        compile_jars = utils.collect_jars_for_compile(deps) + kotlin_auto_deps,
+        compile_jars = java_common.merge(deps).compile_jars,
         module_name = module_name,
         friend_paths = friend_paths,
         srcs = srcs
@@ -229,7 +205,17 @@
         utils.actions.fold_jars(ctx, rule_kind, output_jar, output_merge_list)
 
     # create the java provider but the kotlin and default provider cannot be created here.
-    return _make_java_provider(ctx, srcs, deps, kotlin_auto_deps)
+
+    return JavaInfo(
+        output_jar = ctx.outputs.jar,
+        compile_jar = ctx.outputs.jar,
+        source_jar = ctx.outputs.srcjar,
+#        jdeps = ctx.outputs.jdeps,
+        deps = deps,
+        runtime_deps = runtime_deps,
+        exports = exports,
+        neverlink = getattr(ctx.attr, "neverlink", False)
+    )
 
 compile = struct(
     compile_action = _compile_action,
diff --git a/kotlin/internal/utils.bzl b/kotlin/internal/utils.bzl
index eaab3db..c141584 100644
--- a/kotlin/internal/utils.bzl
+++ b/kotlin/internal/utils.bzl
@@ -52,54 +52,6 @@
         all_srcs = kt + java,
         src_jars = depset(src_jars)
     )
-
-# 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 = kt.info.KtInfo in dep
-    java_provider = dep[JavaInfo]
-    if is_kotlin_provider:
-       return java_provider.full_compile_jars
-    elif dep.label.workspace_root == "external/com_github_jetbrains_kotlin":
-         return java_provider.full_compile_jars
-    else:
-        return java_provider.compile_jars
-
-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()
-    for d in deps:
-        compile_jars += _select_compile_jars(d)
-    return compile_jars
-
-def _collect_all_jars(deps):
-    """
-    Merges a list of java providers into a struct of depsets.
-    """
-    compile_jars = depset()
-    runtime_jars = depset()
-    transitive_runtime_jars = depset()
-    transitive_compile_time_jars = depset()
-
-    for dep_target in deps:
-        if JavaInfo in dep_target:
-            java_provider = dep_target[JavaInfo]
-            compile_jars += java_provider.compile_jars
-            # the runtime_jar compile_jar seperation is here to support the exports concept.
-            runtime_jars += java_provider.full_compile_jars
-            transitive_compile_time_jars += java_provider.transitive_compile_time_jars
-            transitive_runtime_jars += java_provider.transitive_runtime_jars
-
-    return struct (
-        compile_jars = compile_jars,
-        runtime_jars = runtime_jars,
-        transitive_runtime_jars = transitive_runtime_jars,
-        transitive_compile_time_jars = transitive_compile_time_jars
-    )
-
 # RESOURCE JARS ################################################################################################################################################
 _CONVENTIONAL_RESOURCE_PATHS = [
     "src/main/resources",
@@ -217,8 +169,6 @@
         fold_jars = _fold_jars_action,
         write_launcher = _write_launcher_action,
     ),
-    collect_all_jars = _collect_all_jars,
-    collect_jars_for_compile = _collect_jars_for_compile,
     restore_label = _restore_label,
     derive_module_name = _derive_module_name,
     partition_srcs = _partition_srcs
diff --git a/kotlin/kotlin.bzl b/kotlin/kotlin.bzl
index acd1b1f..87decf2 100644
--- a/kotlin/kotlin.bzl
+++ b/kotlin/kotlin.bzl
@@ -159,7 +159,7 @@
         default = [],
         allow_files = [".srcjar", ".kt", ".java"],
     ),
-    "deps": attr.label_list(aspects = [_kt_jvm_plugin_aspect]),
+    "deps": attr.label_list(aspects = [_kt_jvm_plugin_aspect], providers=[JavaInfo]),
     "runtime_deps": attr.label_list(default = []),
     "resources": attr.label_list(
         default = [],
@@ -222,7 +222,8 @@
 ########################################################################################################################
 kt_jvm_library = rule(
     attrs = dict(_common_attr.items() + {
-        "exports": attr.label_list(default = []),
+        "exports": attr.label_list(default = [], providers=[JavaInfo]),
+        "neverlink": attr.bool(default=False),
     }.items()),
     outputs = _common_outputs,
     toolchains = [_kt.defs.TOOLCHAIN_TYPE],
@@ -247,6 +248,7 @@
   deps: A list of dependencies of this rule.See general comments about `deps` at [Attributes common to all build rules](https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes).
   module_name: The name of the module, if not provided the module name is derived from the label. --e.g., `//some/package/path:label_name` is translated to
     `some_package_path-label_name`.
+  neverlink: If true only use this library for compilation and not at runtime.
 """
 
 kt_jvm_binary = rule(
@@ -278,6 +280,7 @@
         ),
         "friends": attr.label_list(
             default = [],
+            providers = [JavaInfo]
         ),
         "test_class": attr.string(),
         "main_class": attr.string(default="com.google.testing.junit.runner.BazelTestRunner"),
diff --git a/kotlin/toolchains.bzl b/kotlin/toolchains.bzl
index 733bc06..814cc52 100644
--- a/kotlin/toolchains.bzl
+++ b/kotlin/toolchains.bzl
@@ -84,13 +84,15 @@
 _kt_jvm_attrs = dict(_common_attrs.items() + {
     "jvm_runtime": attr.label(
         default = Label("@" + _KT_COMPILER_REPO + "//:kotlin-runtime"),
+        providers = [JavaInfo]
     ),
     "jvm_stdlibs": attr.label_list(
         default = [
             Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib"),
             Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib-jdk7"),
             Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib-jdk8"),
-        ]
+        ],
+        providers = [JavaInfo]
     ),
     "jvm_target": attr.string(
         default = "1.8",
@@ -114,8 +116,8 @@
         kotlinbuilder = ctx.attr.kotlinbuilder,
         kotlin_home = ctx.files.kotlin_home,
 
-        jvm_runtime = ctx.files.jvm_runtime,
-        jvm_stdlibs = ctx.files.jvm_stdlibs
+        jvm_runtime = ctx.attr.jvm_runtime,
+        jvm_stdlibs = ctx.attr.jvm_stdlibs
     )
     return struct(providers=[toolchain])
 
