diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java
index dd5ae82..67bcd1b 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java
@@ -13881,6 +13881,12 @@
             }
 
             @Test
+            @TestMetadata("starImportAmbiguity.kt")
+            public void testStarImportAmbiguity() throws Exception {
+                runTest("compiler/testData/diagnostics/tests/imports/starImportAmbiguity.kt");
+            }
+
+            @Test
             @TestMetadata("StarImportFromObject.kt")
             public void testStarImportFromObject() throws Exception {
                 runTest("compiler/testData/diagnostics/tests/imports/StarImportFromObject.kt");
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java
index 1e8a3f8..e2c334d 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java
@@ -13881,6 +13881,12 @@
             }
 
             @Test
+            @TestMetadata("starImportAmbiguity.kt")
+            public void testStarImportAmbiguity() throws Exception {
+                runTest("compiler/testData/diagnostics/tests/imports/starImportAmbiguity.kt");
+            }
+
+            @Test
             @TestMetadata("StarImportFromObject.kt")
             public void testStarImportFromObject() throws Exception {
                 runTest("compiler/testData/diagnostics/tests/imports/StarImportFromObject.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java
index 75fff2a..e61acd1 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java
@@ -13881,6 +13881,12 @@
             }
 
             @Test
+            @TestMetadata("starImportAmbiguity.kt")
+            public void testStarImportAmbiguity() throws Exception {
+                runTest("compiler/testData/diagnostics/tests/imports/starImportAmbiguity.kt");
+            }
+
+            @Test
             @TestMetadata("StarImportFromObject.kt")
             public void testStarImportFromObject() throws Exception {
                 runTest("compiler/testData/diagnostics/tests/imports/StarImportFromObject.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java
index 54de2a4..283c0e6 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java
@@ -13887,6 +13887,12 @@
             }
 
             @Test
+            @TestMetadata("starImportAmbiguity.kt")
+            public void testStarImportAmbiguity() throws Exception {
+                runTest("compiler/testData/diagnostics/tests/imports/starImportAmbiguity.kt");
+            }
+
+            @Test
             @TestMetadata("StarImportFromObject.kt")
             public void testStarImportFromObject() throws Exception {
                 runTest("compiler/testData/diagnostics/tests/imports/StarImportFromObject.kt");
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt
index 1407716..04c49ca 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt
@@ -42,23 +42,23 @@
     includeInnerConstructors: Boolean,
     processor: (FirCallableSymbol<*>) -> Unit
 ) {
-    val (matchedClassifierSymbol, substitutor) = getFirstClassifierOrNull(callInfo, session, bodyResolveComponents) ?: return
-    val matchedClassSymbol = matchedClassifierSymbol as? FirClassLikeSymbol<*> ?: return
+    for ((matchedClassifierSymbol, substitutor) in getClassifierResults(callInfo, session, bodyResolveComponents)) {
+        val matchedClassSymbol = matchedClassifierSymbol as? FirClassLikeSymbol<*> ?: continue
+        processConstructors(
+            matchedClassSymbol,
+            substitutor,
+            processor,
+            session,
+            bodyResolveComponents,
+            includeInnerConstructors
+        )
 
-    processConstructors(
-        matchedClassSymbol,
-        substitutor,
-        processor,
-        session,
-        bodyResolveComponents,
-        includeInnerConstructors
-    )
-
-    processSyntheticConstructors(
-        matchedClassSymbol,
-        processor,
-        bodyResolveComponents
-    )
+        processSyntheticConstructors(
+            matchedClassSymbol,
+            processor,
+            bodyResolveComponents
+        )
+    }
 }
 
 internal fun FirScope.processFunctionsAndConstructorsByName(
@@ -110,46 +110,27 @@
     return deprecation != null && deprecation.deprecationLevel == DeprecationLevelValue.HIDDEN
 }
 
-private fun FirScope.getFirstClassifierOrNull(
+private fun FirScope.getClassifierResults(
     callInfo: CallInfo,
     session: FirSession,
     bodyResolveComponents: BodyResolveComponents
-): SymbolWithSubstitutor? {
+): List<SymbolWithSubstitutor> {
     var isSuccessResult = false
-    var isAmbiguousResult = false
-    var result: SymbolWithSubstitutor? = null
+    val result = mutableListOf<SymbolWithSubstitutor>()
     processClassifiersByNameWithSubstitution(callInfo.name) { symbol, substitutor ->
         val classifierDeclaration = symbol.fir
         val isSuccessCandidate = !classifierDeclaration.isInvisibleOrHidden(session, bodyResolveComponents)
 
-        when {
-            isSuccessCandidate && !isSuccessResult -> {
-                // successful result is better than unsuccessful
-                isSuccessResult = true
-                isAmbiguousResult = false
-                result = SymbolWithSubstitutor(symbol, substitutor)
-            }
-            result?.symbol === symbol -> {
-                // miss identical results
-                return@processClassifiersByNameWithSubstitution
-            }
-            result != null -> {
-                if (isSuccessResult == isSuccessCandidate) {
-                    // results are similar => ambiguity
-                    isAmbiguousResult = true
-                } else {
-                    // ignore unsuccessful result if we have successful one
-                }
-            }
-            else -> {
-                // result == null: any result is better than no result
-                isSuccessResult = isSuccessCandidate
-                result = SymbolWithSubstitutor(symbol, substitutor)
-            }
+        if (!isSuccessResult && isSuccessCandidate) {
+            // successful result is better than unsuccessful
+            isSuccessResult = true
+            result.clear()
         }
+
+        result.add(SymbolWithSubstitutor(symbol, substitutor))
     }
 
-    return result.takeUnless { isAmbiguousResult }
+    return result
 }
 
 private fun processSyntheticConstructors(
diff --git a/compiler/testData/diagnostics/tests/imports/NestedClassClash.fir.kt b/compiler/testData/diagnostics/tests/imports/NestedClassClash.fir.kt
index 16ad5c0..062e687 100644
--- a/compiler/testData/diagnostics/tests/imports/NestedClassClash.fir.kt
+++ b/compiler/testData/diagnostics/tests/imports/NestedClassClash.fir.kt
@@ -18,7 +18,7 @@
 import a.D.<!CONFLICTING_IMPORT!>B<!>
 
 fun test(b: <!OVERLOAD_RESOLUTION_AMBIGUITY!>B<!>) {
-    <!UNRESOLVED_REFERENCE!>B<!>()
+    <!OVERLOAD_RESOLUTION_AMBIGUITY!>B<!>()
 }
 
 // FILE: d.kt
@@ -27,5 +27,5 @@
 
 // todo ambiguvity here
 fun test2(b: <!OVERLOAD_RESOLUTION_AMBIGUITY!>B<!>) {
-    <!UNRESOLVED_REFERENCE!>B<!>()
+    <!OVERLOAD_RESOLUTION_AMBIGUITY!>B<!>()
 }
diff --git a/compiler/testData/diagnostics/tests/imports/starImportAmbiguity.fir.kt b/compiler/testData/diagnostics/tests/imports/starImportAmbiguity.fir.kt
new file mode 100644
index 0000000..fdcbe9a
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/imports/starImportAmbiguity.fir.kt
@@ -0,0 +1,19 @@
+// ISSUE: KT-56520
+// FULL_JDK
+// FILE: some/HashMap.java
+package some;
+
+public class HashMap<K, V> extends java.util.HashMap<K, V> {}
+
+// FILE: test.kt
+import java.util.*
+import some.*
+
+fun foo(): Any? = null
+
+fun test() {
+    // Should be OVERLOAD_RESOLUTION_AMBIGUITY in K2
+    val map = foo() as <!OVERLOAD_RESOLUTION_AMBIGUITY!>HashMap<String, String><!>
+    // Should be OVERLOAD_RESOLUTION_AMBIGUITY in K2
+    val map2 = <!OVERLOAD_RESOLUTION_AMBIGUITY!>HashMap<!><String, String>()
+}
diff --git a/compiler/testData/diagnostics/tests/imports/starImportAmbiguity.kt b/compiler/testData/diagnostics/tests/imports/starImportAmbiguity.kt
new file mode 100644
index 0000000..74913f3
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/imports/starImportAmbiguity.kt
@@ -0,0 +1,19 @@
+// ISSUE: KT-56520
+// FULL_JDK
+// FILE: some/HashMap.java
+package some;
+
+public class HashMap<K, V> extends java.util.HashMap<K, V> {}
+
+// FILE: test.kt
+import java.util.*
+import some.*
+
+fun foo(): Any? = null
+
+fun test() {
+    // Should be OVERLOAD_RESOLUTION_AMBIGUITY in K2
+    val map = foo() <!UNCHECKED_CAST!>as HashMap<String, String><!>
+    // Should be OVERLOAD_RESOLUTION_AMBIGUITY in K2
+    val map2 = HashMap<String, String>()
+}
diff --git a/compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.fir.kt b/compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.fir.kt
new file mode 100644
index 0000000..9f23f1e
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.fir.kt
@@ -0,0 +1,33 @@
+// !WITH_NEW_IFERENCE
+// !DIAGNOSTICS: -UNUSED_PARAMETER
+
+// FILE: packageA.kt
+
+package a
+
+abstract class Cls
+abstract class Cls2
+
+// FILE: packageB.kt
+
+package b
+
+fun Cls() {}
+class Cls2
+
+// FILE: test.kt
+
+package c
+
+import a.*
+import b.*
+
+fun take(arg: Any) {}
+
+fun test() {
+    <!OVERLOAD_RESOLUTION_AMBIGUITY!>Cls<!>()
+    take(<!OVERLOAD_RESOLUTION_AMBIGUITY!>Cls<!>())
+
+    <!OVERLOAD_RESOLUTION_AMBIGUITY!>Cls2<!>()
+    take(<!OVERLOAD_RESOLUTION_AMBIGUITY!>Cls2<!>())
+}
diff --git a/compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.kt b/compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.kt
index 2557173..8028e8e 100644
--- a/compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.kt
+++ b/compiler/testData/diagnostics/tests/overload/disambiguateByFailedAbstractClassCheck.kt
@@ -1,4 +1,3 @@
-// FIR_IDENTICAL
 // !WITH_NEW_IFERENCE
 // !DIAGNOSTICS: -UNUSED_PARAMETER
 
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
index 5178a47..d4e5c55 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
@@ -13887,6 +13887,12 @@
             }
 
             @Test
+            @TestMetadata("starImportAmbiguity.kt")
+            public void testStarImportAmbiguity() throws Exception {
+                runTest("compiler/testData/diagnostics/tests/imports/starImportAmbiguity.kt");
+            }
+
+            @Test
             @TestMetadata("StarImportFromObject.kt")
             public void testStarImportFromObject() throws Exception {
                 runTest("compiler/testData/diagnostics/tests/imports/StarImportFromObject.kt");
