diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/test/KotlinTestUtils.java b/compiler/tests-common/tests/org/jetbrains/kotlin/test/KotlinTestUtils.java
index f7e2a45..fc412d1 100644
--- a/compiler/tests-common/tests/org/jetbrains/kotlin/test/KotlinTestUtils.java
+++ b/compiler/tests-common/tests/org/jetbrains/kotlin/test/KotlinTestUtils.java
@@ -108,7 +108,7 @@
             Boolean.getBoolean("org.jetbrains.kotlin.dont.ignore.tests.working.on.compatible.backend");
 
 
-    private static final boolean AUTOMATICALLY_UNMUTE_PASSED_TESTS = true;
+    private static final boolean AUTOMATICALLY_UNMUTE_PASSED_TESTS = false;
     private static final boolean AUTOMATICALLY_MUTE_FAILED_TESTS = false;
 
     private static final List<File> filesToDelete = new ArrayList<>();
diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt
index 42bdaa7..c89c03c 100644
--- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt
+++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt
@@ -104,15 +104,13 @@
     override fun getDeclaredTypeParameters() = parameters
 
     private inner class FunctionTypeConstructor : AbstractClassTypeConstructor(storageManager) {
-        val functionClassId = ClassId(BUILT_INS_PACKAGE_FQ_NAME, Name.identifier("Function"))
-        val kFunctionClassId = ClassId(KOTLIN_REFLECT_FQ_NAME, Name.identifier("KFunction"))
 
         override fun computeSupertypes(): Collection<KotlinType> {
             val result = ArrayList<KotlinType>(2)
 
             fun add(id: ClassId) {
                 val moduleDescriptor = containingDeclaration.containingDeclaration
-                val descriptor = moduleDescriptor.findClassAcrossModuleDependencies(id) ?: error("TODO")
+                val descriptor = moduleDescriptor.findClassAcrossModuleDependencies(id) ?: error("Built-in class $id not found")
 
                 val typeConstructor = descriptor.typeConstructor
 
@@ -141,6 +139,8 @@
                     add(ClassId(BUILT_INS_PACKAGE_FQ_NAME, Kind.Function.numberedClassName(arity)))
                 Kind.KSuspendFunction ->
                     add(ClassId(COROUTINES_PACKAGE_FQ_NAME_RELEASE, Kind.SuspendFunction.numberedClassName(arity)))
+                else -> {
+                }
             }
 
             return result.toList()
@@ -158,4 +158,9 @@
     }
 
     override fun toString() = name.asString()
+
+    companion object {
+        val functionClassId = ClassId(BUILT_INS_PACKAGE_FQ_NAME, Name.identifier("Function"))
+        val kFunctionClassId = ClassId(KOTLIN_REFLECT_FQ_NAME, Name.identifier("KFunction"))
+    }
 }
diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInterfaceFactory.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInterfaceFactory.kt
index 9962d17..c6335ae 100644
--- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInterfaceFactory.kt
+++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInterfaceFactory.kt
@@ -63,8 +63,8 @@
     name: FqName
 ) : FunctionInterfacePackageFragment,
     PackageFragmentDescriptorImpl(module, name) {
-    private val memberScopeObj = FunctionInterfaceMemberScope(classDescriptorFactory, fqName)
-    override fun getMemberScope() = memberScopeObj
+    private val memberScope = FunctionInterfaceMemberScope(classDescriptorFactory, fqName)
+    override fun getMemberScope() = memberScope
 }
 
 fun functionInterfacePackageFragmentProvider(
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt
index 0f13747..ea704c7 100644
--- a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt
@@ -81,12 +81,8 @@
             additionalPackages += functionInterfacePackageFragmentProvider(context.storageManager, context.module)
         }
 
-        context.module.setDependencies(
-            listOf(context.module) +
-                    moduleDescriptors +
-                    listOf(builtIns.builtInsModule),
-            friendModuleDescriptors.toSet()
-        )
+        val dependencies = mutableSetOf(context.module) + moduleDescriptors + builtIns.builtInsModule
+        context.module.setDependencies(dependencies.toList(), friendModuleDescriptors.toSet())
 
         val moduleKind = configuration.get(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN)
 
