diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/DependencyGraphResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/DependencyGraphResolver.kt
index dddf2b5..867a4d8 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/DependencyGraphResolver.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/DependencyGraphResolver.kt
@@ -11,17 +11,14 @@
 import org.gradle.api.artifacts.result.ResolvedDependencyResult
 import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
 import org.jetbrains.kotlin.gradle.dsl.topLevelExtension
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations.ResolvableMetadataConfiguration
 import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration
 import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
 import org.jetbrains.kotlin.project.model.*
 
-internal fun resolvableMetadataConfiguration(
-    module: KotlinGradleModule
-) = module.project.configurations.getByName(module.resolvableMetadataConfigurationName)
-
 internal fun configurationToResolveMetadataDependencies(project: Project, requestingModule: KotlinModule): Configuration =
     when (project.topLevelExtension) {
-        is KotlinPm20ProjectExtension -> resolvableMetadataConfiguration(requestingModule as KotlinGradleModule)
+        is KotlinPm20ProjectExtension -> (requestingModule as KotlinGradleModule).configuration(ResolvableMetadataConfiguration)
         else -> resolvableMetadataConfiguration(
             project,
             project.kotlinExtension.sourceSets, // take dependencies from all source sets; TODO introduce consistency scopes?
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradlePlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradlePlugin.kt
index d2cecaf..60e1250 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradlePlugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradlePlugin.kt
@@ -14,6 +14,12 @@
 import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
 import org.jetbrains.kotlin.gradle.dsl.pm20Extension
 import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations.MetadataElementsConfiguration
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations.ResolvableMetadataConfiguration
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations.SourcesElementsConfiguration
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks.CompileAllTask
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks.GeneratePsmTask
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks.MetadataJarTask
 import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility
 import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier
 import javax.inject.Inject
@@ -22,6 +28,19 @@
 abstract class KotlinPm20GradlePlugin @Inject constructor(
     @Inject private val softwareComponentFactory: SoftwareComponentFactory
 ) : Plugin<Project> {
+
+    private val PROTO_CONFIGURATIONS: List<ProtoConfiguration> = listOf(
+        ResolvableMetadataConfiguration,
+        MetadataElementsConfiguration,
+        SourcesElementsConfiguration,
+    )
+
+    private val PROTO_TASKS: List<ProtoTask<*>> = listOf(
+        CompileAllTask,
+        GeneratePsmTask,
+        MetadataJarTask, // needs to be after GeneratePsmTask
+    )
+
     override fun apply(project: Project) {
         checkGradleCompatibility("the Kotlin Multiplatform plugin", GradleVersion.version("6.1"))
 
@@ -31,10 +50,26 @@
         createDefaultModules(project)
         customizeKotlinDependencies(project)
         registerDefaultVariantFactories(project)
+
+        registerConfigurationByProtos(project, PROTO_CONFIGURATIONS)
+        registerTasksByProtos(project, PROTO_TASKS)
+
         setupFragmentsMetadata(project)
         setupPublication(project)
     }
 
+    private fun registerTasksByProtos(project: Project, protoTasks: List<ProtoTask<*>>) {
+        for (proto in protoTasks) {
+            proto.registerTask(project)
+        }
+    }
+
+    private fun registerConfigurationByProtos(project: Project, protoConfigurations: List<ProtoConfiguration>) {
+        for (proto in protoConfigurations) {
+            proto.registerInProject(project)
+        }
+    }
+
     private fun registerDefaultVariantFactories(project: Project) {
         project.pm20Extension.modules.configureEach { module ->
             module.fragments.registerFactory(
@@ -72,7 +107,6 @@
     private fun setupFragmentsMetadata(project: Project) {
         project.pm20Extension.modules.all { module ->
             configureMetadataResolutionAndBuild(module)
-            configureMetadataExposure(module)
         }
     }
 
@@ -85,8 +119,8 @@
     private fun setupPublicationForModule(module: KotlinGradleModule) {
         val project = module.project
 
-        val metadataElements = project.configurations.getByName(metadataElementsConfigurationName(module))
-        val sourceElements = project.configurations.getByName(sourceElementsConfigurationName(module))
+        val metadataElements = module.configuration(MetadataElementsConfiguration)
+        val sourceElements = module.configuration(SourcesElementsConfiguration)
 
         val componentName = rootPublicationComponentName(module)
         val rootSoftwareComponent = softwareComponentFactory.adhoc(componentName).also {
@@ -96,7 +130,6 @@
         }
 
         module.ifMadePublic {
-            val metadataDependencyConfiguration = resolvableMetadataConfiguration(module)
             project.pluginManager.withPlugin("maven-publish") {
                 project.extensions.getByType(PublishingExtension::class.java).publications.create(
                     componentName,
@@ -105,7 +138,7 @@
                     publication.from(rootSoftwareComponent)
                     publication.versionMapping { versionMapping ->
                         versionMapping.allVariants {
-                            it.fromResolutionOf(metadataDependencyConfiguration)
+                            it.fromResolutionOf(module.configuration(ResolvableMetadataConfiguration))
                         }
                     }
                 }
@@ -198,4 +231,4 @@
     fun inModule(module: KotlinGradleModule, configure: T.() -> Unit) {
         getOrCreateFragment(module).configure()
     }
-}
\ No newline at end of file
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleModule.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleModule.kt
index 713b8d0..a61dafa 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleModule.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleModule.kt
@@ -67,9 +67,6 @@
     override fun toString(): String = "$moduleIdentifier (Gradle)"
 }
 
-internal val KotlinGradleModule.resolvableMetadataConfigurationName: String
-    get() = lowerCamelCaseName(name, "DependenciesMetadata")
-
 internal val KotlinGradleModule.isMain
     get() = moduleIdentifier.moduleClassifier == null
 
@@ -77,4 +74,4 @@
     lowerCamelCaseName(moduleClassifier, simpleName)
 
 internal fun KotlinGradleModule.variantsContainingFragment(fragment: KotlinModuleFragment): Iterable<KotlinGradleVariant> =
-    variants.filter { fragment in it.refinesClosure }
\ No newline at end of file
+    variants.filter { fragment in it.refinesClosure }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt
index 04157a5..6cddfee 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt
@@ -17,6 +17,7 @@
 import org.jetbrains.kotlin.gradle.dsl.pm20Extension
 import org.jetbrains.kotlin.gradle.plugin.*
 import org.jetbrains.kotlin.gradle.plugin.mpp.*
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations.ResolvableMetadataConfiguration
 import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
 import org.jetbrains.kotlin.gradle.targets.metadata.ResolvedMetadataFilesProvider
 import org.jetbrains.kotlin.gradle.targets.metadata.createTransformedMetadataClasspath
@@ -61,7 +62,7 @@
     override val compileDependencyFiles: FileCollection by project.provider {
         createTransformedMetadataClasspath(
             project,
-            resolvableMetadataConfiguration(fragment.containingModule),
+            fragment.containingModule.configuration(ResolvableMetadataConfiguration),
             lazy { fragment.refinesClosure.minus(fragment).map { metadataCompilationRegistry.byFragment(it).output.classesDirs } },
             resolvedMetadataFiles
         )
@@ -202,4 +203,4 @@
         withAllCommonCallbacks += action
         withAllNativeCallbacks += action
     }
-}
\ No newline at end of file
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/ProtoConfiguration.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/ProtoConfiguration.kt
new file mode 100644
index 0000000..e2162f3
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/ProtoConfiguration.kt
@@ -0,0 +1,18 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
+
+import org.gradle.api.Project
+import org.gradle.api.artifacts.Configuration
+
+interface ProtoConfiguration {
+    fun registerInProject(project: Project)
+    fun nameIn(module: KotlinGradleModule): String
+}
+
+fun KotlinGradleModule.configurationName(proto: ProtoConfiguration): String = proto.nameIn(this)
+fun KotlinGradleModule.configuration(proto: ProtoConfiguration): Configuration =
+    project.configurations.getByName(configurationName(proto))
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/ProtoTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/ProtoTask.kt
new file mode 100644
index 0000000..c72f45b
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/ProtoTask.kt
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
+
+import org.gradle.api.Project
+import org.gradle.api.Task
+import org.gradle.api.tasks.TaskProvider
+
+interface ProtoTask<T : Task> {
+    fun registerTask(project: Project)
+
+    fun nameIn(module: KotlinGradleModule): String
+}
+
+fun <T : Task> KotlinGradleModule.taskName(proto: ProtoTask<T>): String = proto.nameIn(this)
+
+fun <T : Task> KotlinGradleModule.taskProvider(proto: ProtoTask<T>): TaskProvider<T> =
+    project.tasks.named(taskName(proto)) as TaskProvider<T>
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/TransformKotlinGranularMetadataForFragment.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/TransformKotlinGranularMetadataForFragment.kt
index 75009e7..f95335f 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/TransformKotlinGranularMetadataForFragment.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/TransformKotlinGranularMetadataForFragment.kt
@@ -11,6 +11,7 @@
 import org.gradle.api.tasks.*
 import org.jetbrains.kotlin.gradle.plugin.mpp.ExtractableMetadataFiles
 import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations.ResolvableMetadataConfiguration
 import org.jetbrains.kotlin.gradle.targets.metadata.ResolvedMetadataFilesProvider
 import org.jetbrains.kotlin.gradle.utils.getValue
 import java.io.File
@@ -35,7 +36,7 @@
     @get:InputFiles
     @get:PathSensitive(PathSensitivity.RELATIVE)
     internal val allSourceSetsMetadataConfiguration: FileCollection by lazy {
-        project.files(resolvableMetadataConfiguration(fragment.containingModule))
+        project.files(fragment.containingModule.configuration(ResolvableMetadataConfiguration))
     }
 
     @Suppress("unused") // Gradle input
@@ -95,4 +96,4 @@
     override val buildDependencies: Iterable<TaskProvider<*>> = listOf(taskProvider)
     override val metadataResolutions: Iterable<MetadataDependencyResolution> by taskProvider.map { it.metadataDependencyResolutions }
     override val metadataFilesByResolution: Map<MetadataDependencyResolution, FileCollection> by taskProvider.map { it.filesByResolution }
-}
\ No newline at end of file
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/MetadataElementsConfiguration.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/MetadataElementsConfiguration.kt
new file mode 100644
index 0000000..20233d0
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/MetadataElementsConfiguration.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations
+
+import org.gradle.api.Project
+import org.gradle.api.attributes.Usage
+import org.jetbrains.kotlin.gradle.dsl.pm20Extension
+import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.setModuleCapability
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks.MetadataJarTask
+import org.jetbrains.kotlin.gradle.plugin.usageByName
+import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
+
+object MetadataElementsConfiguration : ProtoConfiguration {
+    override fun registerInProject(project: Project) {
+        project.pm20Extension.modules.all { module ->
+            project.configurations.create(nameIn(module)) {
+                it.isCanBeConsumed = false
+                module.ifMadePublic {
+                    it.isCanBeConsumed = true
+                }
+
+                it.isCanBeResolved = false
+
+                project.artifacts.add(it.name, module.taskProvider(MetadataJarTask))
+
+                it.attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA))
+                it.attributes.attribute(KotlinPlatformType.attribute, KotlinPlatformType.common)
+
+                module.fragments.all { fragment ->
+                    // FIXME: native api-implementation
+                    project.addExtendsFromRelation(it.name, fragment.apiConfigurationName)
+                }
+
+                setModuleCapability(it, module)
+            }
+        }
+    }
+
+    override fun nameIn(module: KotlinGradleModule): String = module.disambiguateName("metadataElements")
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/ResolvableMetadataConfiguration.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/ResolvableMetadataConfiguration.kt
new file mode 100644
index 0000000..a725d29
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/ResolvableMetadataConfiguration.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations
+
+import org.gradle.api.Project
+import org.gradle.api.artifacts.Configuration
+import org.gradle.api.attributes.Usage
+import org.jetbrains.kotlin.gradle.dsl.pm20Extension
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.ProtoConfiguration
+import org.jetbrains.kotlin.gradle.plugin.usageByName
+import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
+import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
+
+object ResolvableMetadataConfiguration : ProtoConfiguration {
+    override fun registerInProject(project: Project) {
+        project.pm20Extension.modules.all { module ->
+            project.configurations.create(nameIn(module)).apply {
+                isCanBeConsumed = false
+                isCanBeResolved = true
+                attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA))
+                module.fragments.all { fragment ->
+                    project.addExtendsFromRelation(name, fragment.apiConfigurationName)
+                    project.addExtendsFromRelation(name, fragment.implementationConfigurationName)
+                }
+            }
+        }
+    }
+
+    override fun nameIn(module: KotlinGradleModule): String = lowerCamelCaseName(module.name, "DependenciesMetadata")
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/SourcesElementsConfiguration.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/SourcesElementsConfiguration.kt
new file mode 100644
index 0000000..277bbd2
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/configurations/SourcesElementsConfiguration.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.configurations
+
+import org.gradle.api.Project
+import org.gradle.api.attributes.Bundling
+import org.gradle.api.attributes.Category
+import org.gradle.api.attributes.DocsType
+import org.gradle.api.attributes.Usage
+import org.jetbrains.kotlin.gradle.dsl.pm20Extension
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.ProtoConfiguration
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.disambiguateName
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.taskProvider
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks.SourcesJarTask
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
+import org.jetbrains.kotlin.gradle.plugin.usageByName
+
+object SourcesElementsConfiguration : ProtoConfiguration {
+    override fun registerInProject(project: Project) {
+        project.pm20Extension.modules.all { module ->
+            project.configurations.create(nameIn(module)).apply {
+                isCanBeResolved = false
+                isCanBeConsumed = true
+
+                attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_SOURCES))
+                attributes.attribute(Category.CATEGORY_ATTRIBUTE, project.objects.named(Category::class.java, Category.DOCUMENTATION))
+                attributes.attribute(Bundling.BUNDLING_ATTRIBUTE, project.objects.named(Bundling::class.java, Bundling.EXTERNAL))
+                attributes.attribute(DocsType.DOCS_TYPE_ATTRIBUTE, project.objects.named(DocsType::class.java, DocsType.SOURCES))
+
+                outgoing.artifact(module.taskProvider(SourcesJarTask).get()) {
+                    it.classifier = "sources"
+                }
+
+                ComputedCapability.fromModuleOrNull(module)?.let {
+                    outgoing.capability(it)
+                }
+            }
+        }
+    }
+
+    override fun nameIn(module: KotlinGradleModule): String = module.disambiguateName("sourceElements")
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt
index 1d39804..dd54b89 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/fragmentsMetadataCompilation.kt
@@ -5,32 +5,22 @@
 
 package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
 
-import org.gradle.api.DefaultTask
 import org.gradle.api.Project
-import org.gradle.api.attributes.Usage
 import org.gradle.api.tasks.TaskProvider
-import org.gradle.jvm.tasks.Jar
 import org.jetbrains.kotlin.gradle.dsl.pm20Extension
 import org.jetbrains.kotlin.gradle.plugin.*
 import org.jetbrains.kotlin.gradle.plugin.KotlinCommonSourceSetProcessor
 import org.jetbrains.kotlin.gradle.plugin.mpp.*
-import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
-import org.jetbrains.kotlin.gradle.targets.metadata.createGenerateProjectStructureMetadataTask
-import org.jetbrains.kotlin.gradle.targets.metadata.filesWithUnpackedArchives
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks.CompileAllTask
 import org.jetbrains.kotlin.gradle.tasks.*
 import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
-import org.jetbrains.kotlin.gradle.tasks.registerTask
 import org.jetbrains.kotlin.gradle.tasks.withType
-import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
-import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
 import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
-import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
 import org.jetbrains.kotlin.project.model.KotlinModuleFragment
 import java.util.concurrent.Callable
 
 internal fun configureMetadataResolutionAndBuild(module: KotlinGradleModule) {
     val project = module.project
-    createResolvableMetadataConfigurationForModule(module)
 
     val metadataCompilationRegistry = MetadataCompilationRegistry()
     project.pm20Extension.metadataCompilationRegistryByModuleId[module.moduleIdentifier] =
@@ -38,76 +28,11 @@
 
     configureMetadataCompilationsAndCreateRegistry(module, metadataCompilationRegistry)
 
-    configureMetadataJarTask(module, metadataCompilationRegistry)
-    generateAndExportProjectStructureMetadata(module)
-}
-
-internal fun configureMetadataExposure(module: KotlinGradleModule) {
-    val project = module.project
-    project.configurations.create(metadataElementsConfigurationName(module)).apply {
-        isCanBeConsumed = false
-        module.ifMadePublic {
-            isCanBeConsumed = true
-        }
-        isCanBeResolved = false
-        project.artifacts.add(name, project.tasks.named(metadataJarName(module)))
-        attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA))
-        attributes.attribute(KotlinPlatformType.attribute, KotlinPlatformType.common)
-        module.fragments.all { fragment ->
-            // FIXME: native api-implementation
-            project.addExtendsFromRelation(name, fragment.apiConfigurationName)
-        }
-        setModuleCapability(this, module)
-    }
-
-    val sourcesArtifactAppendix = dashSeparatedName(module.moduleClassifier, "all", "sources")
-    val sourcesArtifact = sourcesJarTaskNamed(
-        module.disambiguateName("allSourcesJar"),
-        project,
-        lazy { FragmentSourcesProvider().getAllFragmentSourcesAsMap(module).entries.associate { it.key.fragmentName to it.value.get() } },
-        sourcesArtifactAppendix
-    )
-    DocumentationVariantConfigurator().createSourcesElementsConfiguration(
-        project, sourceElementsConfigurationName(module),
-        sourcesArtifact.get(), "sources", ComputedCapability.fromModuleOrNull(module)
-    )
-}
-
-fun metadataElementsConfigurationName(module: KotlinGradleModule) =
-    module.disambiguateName("metadataElements")
-
-fun sourceElementsConfigurationName(module: KotlinGradleModule) =
-    module.disambiguateName("sourceElements")
-
-private fun generateAndExportProjectStructureMetadata(
-    module: KotlinGradleModule
-) {
-    val project = module.project
-    val projectStructureMetadata = project.createGenerateProjectStructureMetadataTask(module)
-    project.tasks.withType<Jar>().named(metadataJarName(module)).configure { jar ->
-        jar.from(projectStructureMetadata.map { it.resultFile }) { spec ->
-            spec.into("META-INF")
-                .rename { MULTIPLATFORM_PROJECT_METADATA_JSON_FILE_NAME }
-        }
-    }
     GlobalProjectStructureMetadataStorage.registerProjectStructureMetadata(project) {
         buildProjectStructureMetadata(module)
     }
 }
 
-private fun createResolvableMetadataConfigurationForModule(module: KotlinGradleModule) {
-    val project = module.project
-    project.configurations.create(module.resolvableMetadataConfigurationName).apply {
-        isCanBeConsumed = false
-        isCanBeResolved = true
-        attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA))
-        module.fragments.all { fragment ->
-            project.addExtendsFromRelation(name, fragment.apiConfigurationName)
-            project.addExtendsFromRelation(name, fragment.implementationConfigurationName)
-        }
-    }
-}
-
 private fun configureMetadataCompilationsAndCreateRegistry(
     module: KotlinGradleModule,
     metadataCompilationRegistry: MetadataCompilationRegistry
@@ -123,10 +48,9 @@
         metadataResolutionByFragment[fragment] = transformation
         createExtractMetadataTask(project, fragment, transformation)
     }
-    val compileAllTask = project.registerTask<DefaultTask>(lowerCamelCaseName(module.moduleClassifier, "metadataClasses"))
     module.fragments.all { fragment ->
-        createCommonMetadataCompilation(fragment, compileAllTask, metadataCompilationRegistry)
-        createNativeMetadataCompilation(fragment, compileAllTask, metadataCompilationRegistry)
+        createCommonMetadataCompilation(fragment, metadataCompilationRegistry)
+        createNativeMetadataCompilation(fragment, metadataCompilationRegistry)
     }
     metadataCompilationRegistry.withAll { compilation ->
         project.tasks.matching { it.name == compilation.compileKotlinTaskName }.configureEach { task ->
@@ -135,37 +59,8 @@
     }
 }
 
-private fun configureMetadataJarTask(
-    module: KotlinGradleModule,
-    registry: MetadataCompilationRegistry
-) {
-    val project = module.project
-    val allMetadataJar = project.registerTask<Jar>(metadataJarName(module)) { task ->
-        if (module.moduleClassifier != null) {
-            task.archiveClassifier.set(module.moduleClassifier)
-        }
-        task.archiveAppendix.set("metadata")
-        task.from()
-    }
-    module.fragments.all { fragment ->
-        allMetadataJar.configure { jar ->
-            val metadataOutput = project.files(Callable {
-                val compilationData = registry.byFragment(fragment)
-                project.filesWithUnpackedArchives(compilationData.output.allOutputs, setOf(KLIB_FILE_EXTENSION))
-            })
-            jar.from(metadataOutput) { spec ->
-                spec.into(fragment.fragmentName)
-            }
-        }
-    }
-}
-
-internal fun metadataJarName(module: KotlinGradleModule) =
-    lowerCamelCaseName(module.moduleClassifier, "metadataJar")
-
 private fun createCommonMetadataCompilation(
     fragment: KotlinGradleFragment,
-    compileAllTask: TaskProvider<DefaultTask>,
     metadataCompilationRegistry: MetadataCompilationRegistry
 ) {
     val module = fragment.containingModule
@@ -176,7 +71,7 @@
             project,
             fragment,
             module,
-            compileAllTask,
+            module.taskProvider(CompileAllTask),
             metadataCompilationRegistry,
             lazy { resolvedMetadataProviders(fragment) }
         )
@@ -186,7 +81,6 @@
 
 private fun createNativeMetadataCompilation(
     fragment: KotlinGradleFragment,
-    compileAllTask: TaskProvider<DefaultTask>,
     metadataCompilationRegistry: MetadataCompilationRegistry
 ) {
     val module = fragment.containingModule
@@ -197,7 +91,7 @@
             project,
             fragment,
             module,
-            compileAllTask,
+            module.taskProvider(CompileAllTask),
             metadataCompilationRegistry,
             lazy { resolvedMetadataProviders(fragment) }
         )
@@ -285,4 +179,4 @@
 }
 
 private fun transformFragmentMetadataTaskName(fragment: KotlinModuleFragment) =
-    lowerCamelCaseName("resolve", fragment.disambiguateName("Metadata"))
\ No newline at end of file
+    lowerCamelCaseName("resolve", fragment.disambiguateName("Metadata"))
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/CompileAllTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/CompileAllTask.kt
new file mode 100644
index 0000000..e85c994
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/CompileAllTask.kt
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks
+
+import org.gradle.api.DefaultTask
+import org.gradle.api.Project
+import org.jetbrains.kotlin.gradle.dsl.pm20Extension
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.ProtoTask
+import org.jetbrains.kotlin.gradle.tasks.registerTask
+import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
+
+object CompileAllTask : ProtoTask<DefaultTask> {
+    override fun registerTask(project: Project) {
+        project.pm20Extension.modules.all { module -> module.project.registerTask<DefaultTask>(nameIn(module)) }
+    }
+
+    override fun nameIn(module: KotlinGradleModule): String {
+        return lowerCamelCaseName(module.moduleClassifier, "metadataClasses")
+    }
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/GeneratePsmTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/GeneratePsmTask.kt
new file mode 100644
index 0000000..563d3ec
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/GeneratePsmTask.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks
+
+import org.gradle.api.Project
+import org.jetbrains.kotlin.gradle.dsl.pm20Extension
+import org.jetbrains.kotlin.gradle.plugin.mpp.GenerateProjectStructureMetadata
+import org.jetbrains.kotlin.gradle.plugin.mpp.buildProjectStructureMetadata
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.ProtoTask
+import org.jetbrains.kotlin.gradle.tasks.registerTask
+import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
+
+object GeneratePsmTask : ProtoTask<GenerateProjectStructureMetadata> {
+    override fun registerTask(project: Project) {
+        project.pm20Extension.modules.all { module ->
+            project.registerTask<GenerateProjectStructureMetadata>(nameIn(module)) { task ->
+                task.lazyKotlinProjectStructureMetadata = lazy { buildProjectStructureMetadata(module) }
+            }
+        }
+    }
+
+    override fun nameIn(module: KotlinGradleModule): String =
+        lowerCamelCaseName("generate", module.moduleClassifier, "ProjectStructureMetadata")
+}
+
+// TODO: move the task itself closer?
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/MetadataJarTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/MetadataJarTask.kt
new file mode 100644
index 0000000..e8a81aa
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/MetadataJarTask.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks
+
+import org.gradle.api.Project
+import org.gradle.jvm.tasks.Jar
+import org.jetbrains.kotlin.gradle.dsl.pm20Extension
+import org.jetbrains.kotlin.gradle.plugin.mpp.MULTIPLATFORM_PROJECT_METADATA_JSON_FILE_NAME
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.ProtoTask
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.taskProvider
+import org.jetbrains.kotlin.gradle.targets.metadata.filesWithUnpackedArchives
+import org.jetbrains.kotlin.gradle.tasks.registerTask
+import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
+import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
+import java.util.concurrent.Callable
+
+internal object MetadataJarTask : ProtoTask<Jar> {
+    override fun registerTask(project: Project) {
+        project.pm20Extension.modules.all { module ->
+            val allMetadataJar = project.registerTask<Jar>(nameIn(module)) { task ->
+                if (module.moduleClassifier != null) {
+                    task.archiveClassifier.set(module.moduleClassifier)
+                }
+                task.archiveAppendix.set("metadata")
+                task.from() // TODO: ????
+                task.from(module.taskProvider(GeneratePsmTask).map { it.resultFile }) { spec ->
+                    spec.into("META-INF")
+                        .rename { MULTIPLATFORM_PROJECT_METADATA_JSON_FILE_NAME }
+                }
+            }
+
+            val registry = project.pm20Extension.metadataCompilationRegistryByModuleId[module.moduleIdentifier]!!
+
+            module.fragments.all { fragment ->
+                allMetadataJar.configure { jar ->
+                    val metadataOutput = project.files(Callable {
+                        val compilationData = registry.byFragment(fragment)
+                        project.filesWithUnpackedArchives(compilationData.output.allOutputs, setOf(KLIB_FILE_EXTENSION))
+                    })
+                    jar.from(metadataOutput) { spec ->
+                        spec.into(fragment.fragmentName)
+                    }
+                }
+            }
+        }
+    }
+
+    override fun nameIn(module: KotlinGradleModule): String =
+        lowerCamelCaseName(module.moduleClassifier, "metadataJar")
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/SourcesJarTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/SourcesJarTask.kt
new file mode 100644
index 0000000..6d1799d
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/tasks/SourcesJarTask.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.tasks
+
+import org.gradle.api.Project
+import org.gradle.jvm.tasks.Jar
+import org.jetbrains.kotlin.gradle.dsl.pm20Extension
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentSourcesProvider
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.ProtoTask
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.disambiguateName
+import org.jetbrains.kotlin.gradle.plugin.mpp.sourcesJarTaskNamed
+import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
+
+object SourcesJarTask : ProtoTask<Jar> {
+    override fun registerTask(project: Project) {
+        project.pm20Extension.modules.all { module ->
+            val sourcesArtifactAppendix = dashSeparatedName(module.moduleClassifier, "all", "sources")
+
+            // not really nice, but can't remove sourcesJarTaskNamed because of other clients, and don't want to duplicate code either
+            sourcesJarTaskNamed(
+                module.disambiguateName("allSourcesJar"),
+                project,
+                lazy { FragmentSourcesProvider().getAllFragmentSourcesAsMap(module).entries.associate { it.key.fragmentName to it.value.get() } },
+                sourcesArtifactAppendix
+            )
+        }
+    }
+
+    override fun nameIn(module: KotlinGradleModule): String {
+        TODO("Not yet implemented")
+    }
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
index 8b6d22e..c1a5147 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
@@ -507,10 +507,6 @@
     override fun run() = Unit
 }
 
-internal fun Project.createGenerateProjectStructureMetadataTask(module: KotlinGradleModule): TaskProvider<GenerateProjectStructureMetadata> =
-    project.registerTask(lowerCamelCaseName("generate", module.moduleClassifier, "ProjectStructureMetadata")) { task ->
-        task.lazyKotlinProjectStructureMetadata = lazy { buildProjectStructureMetadata(module) }
-    }
 
 internal fun Project.createGenerateProjectStructureMetadataTask(): TaskProvider<GenerateProjectStructureMetadata> =
     project.registerTask(lowerCamelCaseName("generateProjectStructureMetadata")) { task ->
