diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/resolvableMetadataConfiguration.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/resolvableMetadataConfiguration.kt
index ccc06c0..cfdef24 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/resolvableMetadataConfiguration.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/resolvableMetadataConfiguration.kt
@@ -36,8 +36,6 @@
 
     addDependsOnClosureConfigurationsTo(configuration)
 
-    // needed for old IDEs
-    configureLegacyMetadataDependenciesConfigurations(configuration)
 
     configuration
 }
@@ -78,18 +76,6 @@
 the intransitiveMetadataConfigurationName will not extend this mechanism, since it only
 relies on dependencies being added explicitly by the Kotlin Gradle Plugin
  */
-private fun InternalKotlinSourceSet.configureLegacyMetadataDependenciesConfigurations(resolvableMetadataConfiguration: Configuration) {
-    @Suppress("DEPRECATION_ERROR")
-    listOf(
-        apiMetadataConfigurationName,
-        implementationMetadataConfigurationName,
-        compileOnlyMetadataConfigurationName
-    ).forEach { configurationName ->
-        val configuration = project.configurations.getByName(configurationName)
-        configuration.extendsFrom(resolvableMetadataConfiguration)
-        configuration.shouldResolveConsistentlyWith(resolvableMetadataConfiguration)
-    }
-}
 
 internal fun Configuration.configureMetadataDependenciesAttribute(project: Project): Configuration = apply {
     if (project.multiplatformExtensionOrNull != null) {
@@ -105,35 +91,3 @@
  * Ensure a consistent dependencies resolution result between common source sets and actual
  * See [ResolvableMetadataConfigurationTest] for the cases where dependencies should resolve consistently
  */
-internal val SetupConsistentMetadataDependenciesResolution = KotlinProjectSetupCoroutine {
-    KotlinPluginLifecycle.Stage.AfterFinaliseRefinesEdges.await()
-
-    val sourceSets = multiplatformExtension.awaitSourceSets()
-    val sourceSetsBySourceSetTree = mutableMapOf<KotlinSourceSetTree?, MutableSet<KotlinSourceSet>>()
-    for (sourceSet in sourceSets) {
-        val trees = sourceSet.internal.compilations.map { KotlinSourceSetTree.orNull(it) }
-        trees.forEach { tree -> sourceSetsBySourceSetTree.getOrPut(tree) { mutableSetOf() }.add(sourceSet) }
-    }
-
-    for ((sourceSetTree, sourceSetsOfTree) in sourceSetsBySourceSetTree) {
-        val configurationName = when (sourceSetTree) {
-            null -> continue // for unknown trees there should be no relation between source sets, so just skip
-            KotlinSourceSetTree.main -> "allSourceSetsCompileDependenciesMetadata"
-            else -> lowerCamelCaseName("all", sourceSetTree.name, "SourceSetsCompileDependenciesMetadata")
-        }
-
-        configureConsistentDependencyResolution(sourceSetsOfTree, configurationName)
-    }
-}
-
-private fun Project.configureConsistentDependencyResolution(groupOfSourceSets: Collection<KotlinSourceSet>, configurationName: String) {
-    if (groupOfSourceSets.isEmpty()) return
-    val configuration = configurations.createResolvable(configurationName)
-    configuration.configureMetadataDependenciesAttribute(project)
-    val allVisibleSourceSets = groupOfSourceSets + groupOfSourceSets.flatMap { getVisibleSourceSetsFromAssociateCompilations(it) }
-    val extenders = allVisibleSourceSets.flatMap { it.internal.compileDependenciesConfigurations }
-    configuration.extendsFrom(*extenders.toTypedArray())
-    groupOfSourceSets.forEach { it.internal.resolvableMetadataConfiguration.shouldResolveConsistentlyWith(configuration) }
-
-    // FIXME: KT-66375 Make actual compilation classpaths/libraries configurations to have the same consistent dependencies
-}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt
index d27101e..2e6e68f 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt
@@ -63,7 +63,6 @@
         register(project, UserDefinedAttributesSetupAction)
         register(project, CustomizeKotlinDependenciesSetupAction)
         register(project, AddKotlinPlatformIntegersSupportLibrary)
-        register(project, SetupKotlinNativeStdlibAndPlatformDependenciesImport)
         register(project, FinalizeConfigurationFusMetricAction)
 
         if (isAbiValidationEnabled) {
@@ -95,7 +94,6 @@
             register(project, IdeMultiplatformImportActionSetupAction)
             register(project, KotlinLLDBScriptSetupAction)
             register(project, SetupKotlinNativePlatformDependenciesAndStdlib)
-            register(project, SetupConsistentMetadataDependenciesResolution)
             register(project, RegisterMultiplatformResourcesPublicationExtensionAction)
             register(project, SetUpMultiplatformJvmResourcesPublicationAction)
             register(project, SetUpMultiplatformAndroidAssetsAndResourcesPublicationAction)
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt
index 3021407..9ec652b 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt
@@ -81,28 +81,6 @@
         super.setUpSourceSetDefaults(sourceSet)
         sourceSet.resources.srcDir(defaultSourceFolder(project, sourceSet.name, SOURCE_SET_TYPE_RESOURCES))
 
-        val dependencyConfigurationWithMetadata = with(sourceSet) {
-            @Suppress("DEPRECATION")
-            listOf(
-                apiConfigurationName to apiMetadataConfigurationName,
-                implementationConfigurationName to implementationMetadataConfigurationName,
-                compileOnlyConfigurationName to compileOnlyMetadataConfigurationName,
-                null to intransitiveMetadataConfigurationName
-            )
-        }
-
-        dependencyConfigurationWithMetadata.forEach { (configurationName, metadataName) ->
-            project.configurations.maybeCreateResolvable(metadataName).apply {
-                attributes.attribute(KotlinPlatformType.attribute, KotlinPlatformType.common)
-                attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA))
-                attributes.attribute(Category.CATEGORY_ATTRIBUTE, project.categoryByName(Category.LIBRARY))
-                isVisible = false
-
-                if (configurationName != null) {
-                    extendsFrom(project.configurations.maybeCreateDependencyScope(configurationName))
-                }
-            }
-        }
     }
 
     override fun doCreateSourceSet(name: String): DefaultKotlinSourceSet =
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetMetadataTransformation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetMetadataTransformation.kt
index 7087b4f..8e79842 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetMetadataTransformation.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetMetadataTransformation.kt
@@ -47,14 +47,6 @@
     the intransitiveMetadataConfigurationName will not extend this mechanism, since it only
     relies on dependencies being added explicitly by the Kotlin Gradle Plugin
     */
-    listOf(
-        apiMetadataConfigurationName,
-        implementationMetadataConfigurationName,
-        compileOnlyMetadataConfigurationName
-    ).forEach { configurationName ->
-        val configuration = project.configurations.getByName(configurationName)
-        project.applyTransformationToLegacyDependenciesMetadataConfiguration(configuration, granularMetadataTransformation)
-    }
 
     granularMetadataTransformation
 }
