diff --git a/kotlin/internal/jvm/impl.bzl b/kotlin/internal/jvm/impl.bzl
index 22c7194..15658c6 100644
--- a/kotlin/internal/jvm/impl.bzl
+++ b/kotlin/internal/jvm/impl.bzl
@@ -64,63 +64,77 @@
     )
 
 def kt_jvm_import_impl(ctx):
-    jars = depset()
-    source_jars = depset()
-    runtime_jars = depset()
-    transitive_compile_time_jars = depset()
-    transitive_runtime_jars = depset()
-
+    jars = []
     if ctx.file.srcjar:
-        source_jars += [ctx.file.srcjar]
+        source_jars = [ctx.file.srcjar]
+    else:
+        source_jars = []
 
-    if hasattr(ctx.attr, "runtime_deps"):
-        for jar in ctx.attr.runtime_deps:
-            transitive_runtime_jars += jar[JavaInfo].transitive_runtime_jars
-
+    # TODO after a while remove the for block, the checks after it,and simplify the source-jar to jar allignment.
+    # There must be a single jar jar and it can either be a filegroup or a JavaInfo.
     for jar in ctx.attr.jars:
+        # If a JavaInfo is available it's because it was picked up from a `maven_jar` style attribute -- e.g.,
+        # @com_google_guava_guava//jar. so the transitive_compile_jars or the transitive_runtime_jars should not be
+        # visited -- descending into these results in ijars entering the graph.
         if JavaInfo in jar:
-            jars += jar[JavaInfo].full_compile_jars
-            source_jars += jar[JavaInfo].transitive_source_jars
-            transitive_compile_time_jars += jar[JavaInfo].transitive_compile_time_jars
-            transitive_runtime_jars += jar[JavaInfo].transitive_runtime_jars
+            jars += jar[JavaInfo].full_compile_jars.to_list()
+            source_jars += jar[JavaInfo].transitive_source_jars.to_list()
         else:
+            # this branch occurs when the attr was a filegroup.
             for file in jar.files:
                 if file.basename.endswith("-sources.jar"):
-                    source_jars += [file]
+                    source_jars.append(file)
                 elif file.basename.endswith(".jar"):
-                    jars += [file]
+                    jars.append(file)
                 else:
                     fail("a jar pointing to a filegroup must either end with -sources.jar or .jar")
 
-    runtime_jars += jars
-    transitive_compile_time_jars += jars
-    transitive_runtime_jars += jars
+    if len(jars) > 1:
+        print("got more than one jar, this is an error create an issue")
+        print(jars)
+    if len(source_jars) > 1:
+        print("got more than one source jar, this is an error create an issue")
+        print(source_jars)
 
-    java_info = java_common.create_provider(
-        use_ijar = False,
-        source_jars = source_jars,
-        compile_time_jars = jars,
-        runtime_jars = runtime_jars,
-        transitive_compile_time_jars = transitive_compile_time_jars,
-        transitive_runtime_jars = transitive_runtime_jars,
-    )
-
-    # This is needed for intellij plugin, try to pair up jars with their sources so that the sources are mounted
+    # This was needed for intellij plugin, try to pair up jars with their sources so that the sources are mounted
     # correctly.
     source_tally = {}
-    for sj in source_jars.to_list():
+    for sj in source_jars:
         if sj.basename.endswith("-sources.jar"):
             source_tally[sj.basename.replace("-sources.jar", ".jar")] = sj
     artifacts = []
-    for jar in jars.to_list():
+    for jar in jars:
         if jar.basename in source_tally:
             artifacts += [struct(class_jar = jar, source_jar = source_tally[jar.basename], ijar = None)]
         else:
             artifacts += [struct(class_jar = jar, ijar = None)]
 
-    kotlin_info = _KtJvmInfo(outputs = struct(jars = artifacts))
-    default_info = DefaultInfo(files = depset(jars))
-    return struct(kt = kotlin_info, providers = [default_info, java_info, kotlin_info])
+    # Normalize to None if no source jars discovered
+    if len(source_jars) == 0:
+        source_jar = None
+    else:
+        source_jar = source_jars[0]
+
+    kt_info = _KtJvmInfo(
+        module_name = "",
+        outputs = struct(
+            jars = artifacts,
+        ),
+    )
+    return struct(
+        kt = kt_info,
+        providers = [
+            DefaultInfo(files = depset(jars)),
+            JavaInfo(
+                output_jar = jars[0],
+                compile_jar = jars[0],
+                source_jar = source_jar,
+                runtime_deps = ctx.attr.runtime_deps,
+                neverlink = getattr(ctx.attr, "neverlink", False),
+            ),
+            kt_info,
+        ],
+    )
 
 def kt_jvm_library_impl(ctx):
     return _make_providers(
diff --git a/kotlin/internal/jvm/jvm.bzl b/kotlin/internal/jvm/jvm.bzl
index 2224653..f0af8c5 100644
--- a/kotlin/internal/jvm/jvm.bzl
+++ b/kotlin/internal/jvm/jvm.bzl
@@ -339,6 +339,10 @@
             mandatory = False,
             providers = [JavaInfo],
         ),
+        "neverlink": attr.bool(
+            doc = """If true only use this library for compilation and not at runtime.""",
+            default = False,
+        ),
     },
     implementation = _kt_jvm_import_impl,
     provides = [JavaInfo, _KtJvmInfo],
diff --git a/kotlin/internal/repositories/BUILD.com_github_jetbrains_kotlin b/kotlin/internal/repositories/BUILD.com_github_jetbrains_kotlin
index 9d11d95..4c3dc5a 100644
--- a/kotlin/internal/repositories/BUILD.com_github_jetbrains_kotlin
+++ b/kotlin/internal/repositories/BUILD.com_github_jetbrains_kotlin
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 package(default_visibility = ["//visibility:public"])
+load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_import", "kt_js_import")
 
 # Kotlin home filegroup containing everything that is needed.
 filegroup(
@@ -19,39 +20,31 @@
     srcs = glob(["**"]),
 )
 
-# Kotlin dependencies that are internal to this repo and are meant to be loaded at runtime.
+# Kotlin dependencies that are internal to this repo and are meant to be loaded manually into a classloader.
 [
-    java_import(
-        name = "%s" % art,
-        jars = ["lib/%s.jar" % art],
+    kt_jvm_import(
+        name = "kotlin-%s" % art,
+        jars = ["lib/kotlin-%s.jar" % art],
         neverlink = 1,
     )
     for art in [
-        "kotlin-annotation-processing",
-        "kotlin-annotation-processing-runtime",
-        "kotlin-compiler",
+        "annotation-processing",
+        "annotation-processing-runtime",
+        "compiler",
     ]
 ]
 
 # Kotlin dependencies that are internal to this repo and may be linked.
 [
     java_import(
-        name = "%s" % art,
-        jars = ["lib/%s.jar" % art],
+        name = "kotlin-%s" % art,
+        jars = ["lib/kotlin-%s.jar" % art],
     )
     for art in [
-        "kotlin-preloader",
+        "preloader",
     ]
 ]
 
-# Kotlin annotations jar. Contains annotations like NotNull.
-java_import(
-    name = "annotations",
-    jars = ["lib/annotations-13.0.jar"],
-)
-
-load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_import")
-
 #  The Kotlin standard libraries. These should be setup in a Toolchain.
 [
     kt_jvm_import(
@@ -71,9 +64,7 @@
     ]
 ]
 
-load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_js_import")
-
-#  The Kotlin standard libraries. These should be setup in a Toolchain.
+#  The Kotlin JS standard libraries. These should be setup in a Toolchain.
 [
     kt_js_import(
         name = "kotlin-%s" % art,
