diff --git a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt
index e0b374a..8611904 100644
--- a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt
+++ b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt
@@ -13,6 +13,7 @@
 import org.jetbrains.kotlin.resolve.calls.inference.isRecursiveTypeParameter
 import org.jetbrains.kotlin.resolve.calls.inference.model.*
 import org.jetbrains.kotlin.resolve.calls.model.PostponedResolvedAtomMarker
+import org.jetbrains.kotlin.types.AbstractTypeChecker
 import org.jetbrains.kotlin.types.model.*
 
 class VariableFixationFinder(
@@ -70,6 +71,7 @@
 
     class TypeVariableFixationReadiness(
         val main: TypeVariableFixationReadinessFactor,
+        val additional: List<TypeVariableFixationReadinessFactor>? = null,
     ) : Comparable<TypeVariableFixationReadiness> {
 
         companion object Singletons {
@@ -82,14 +84,6 @@
 
             val READY_FOR_FIXATION_DECLARED_UPPER_BOUND_WITH_SELF_TYPES =
                 TypeVariableFixationReadiness(TypeVariableFixationReadinessFactor.READY_FOR_FIXATION_DECLARED_UPPER_BOUND_WITH_SELF_TYPES)
-            val WITH_COMPLEX_DEPENDENCY =
-                TypeVariableFixationReadiness(TypeVariableFixationReadinessFactor.WITH_COMPLEX_DEPENDENCY)
-            val ALL_CONSTRAINTS_TRIVIAL_OR_NON_PROPER =
-                TypeVariableFixationReadiness(TypeVariableFixationReadinessFactor.ALL_CONSTRAINTS_TRIVIAL_OR_NON_PROPER)
-            val RELATED_TO_ANY_OUTPUT_TYPE =
-                TypeVariableFixationReadiness(TypeVariableFixationReadinessFactor.RELATED_TO_ANY_OUTPUT_TYPE)
-            val FROM_INCORPORATION_OF_DECLARED_UPPER_BOUND =
-                TypeVariableFixationReadiness(TypeVariableFixationReadinessFactor.FROM_INCORPORATION_OF_DECLARED_UPPER_BOUND)
 
             val READY_FOR_FIXATION_UPPER =
                 TypeVariableFixationReadiness(TypeVariableFixationReadinessFactor.READY_FOR_FIXATION_UPPER)
@@ -102,7 +96,27 @@
         }
 
         override fun compareTo(other: TypeVariableFixationReadiness): Int {
-            return main.compareTo(other.main)
+            if (main != other.main) return main.compareTo(other.main)
+            if (additional == null && other.additional == null) return 0
+
+            val thisAdditional = additional.orEmpty()
+            val otherAdditional = other.additional.orEmpty()
+
+            var i = 0
+            while (true) {
+                // this has shorter additional list => this has greater readiness => returning positive
+                if (i == thisAdditional.size) return otherAdditional.size - i
+                // i < thisAdditional.size => this has some more additional factors => other has greater readiness => return -1
+                if (i == otherAdditional.size) return -1
+
+                val aV = thisAdditional[i]
+                val bV = otherAdditional[i]
+                if (aV != bV) {
+                    return aV.compareTo(bV)
+                }
+
+                i++
+            }
         }
     }
 
@@ -110,11 +124,18 @@
         FORBIDDEN,
         WITHOUT_PROPER_ARGUMENT_CONSTRAINT, // proper constraint from arguments -- not from upper bound for type parameters
         OUTER_TYPE_VARIABLE_DEPENDENCY,
+
+        // Starting from here, there's at least some proper constraint, and the type variable is not related to any outer one.
+        // Thus, it means that this variable is not forbidden to fix.
+        // In resulting readiness, there might be more than one of those factors.
         READY_FOR_FIXATION_DECLARED_UPPER_BOUND_WITH_SELF_TYPES,
         WITH_COMPLEX_DEPENDENCY, // if type variable T has constraint with non fixed type variable inside (non-top-level): T <: Foo<S>
         ALL_CONSTRAINTS_TRIVIAL_OR_NON_PROPER, // proper trivial constraint from arguments, Nothing <: T
         RELATED_TO_ANY_OUTPUT_TYPE,
         FROM_INCORPORATION_OF_DECLARED_UPPER_BOUND,
+
+        // The variable is totally ready to be fixed (has proper non-trivial constraints non-relevant to output types or upper bounds)
+        // Only one of the factors below is assumed to be used at once.
         READY_FOR_FIXATION_UPPER,
         READY_FOR_FIXATION_LOWER,
         READY_FOR_FIXATION,
@@ -130,28 +151,58 @@
     private fun Context.getTypeVariableReadiness(
         variable: TypeConstructorMarker,
         dependencyProvider: TypeVariableDependencyInformationProvider,
-    ): TypeVariableFixationReadiness = when {
-        !notFixedTypeVariables.contains(variable) || dependencyProvider.isVariableRelatedToTopLevelType(variable) ||
-                variableHasUnprocessedConstraintsInForks(variable) ->
-            TypeVariableFixationReadiness.FORBIDDEN
-        isTypeInferenceForSelfTypesSupported && areAllProperConstraintsSelfTypeBased(variable) ->
-            TypeVariableFixationReadiness.READY_FOR_FIXATION_DECLARED_UPPER_BOUND_WITH_SELF_TYPES
-        !variableHasProperArgumentConstraints(variable) -> TypeVariableFixationReadiness.WITHOUT_PROPER_ARGUMENT_CONSTRAINT
-        dependencyProvider.isRelatedToOuterTypeVariable(variable) -> TypeVariableFixationReadiness.OUTER_TYPE_VARIABLE_DEPENDENCY
-        hasDependencyToOtherTypeVariables(variable) -> TypeVariableFixationReadiness.WITH_COMPLEX_DEPENDENCY
-        // TODO: Consider removing this kind of readiness, see KT-63032
-        allConstraintsTrivialOrNonProper(variable) -> TypeVariableFixationReadiness.ALL_CONSTRAINTS_TRIVIAL_OR_NON_PROPER
-        dependencyProvider.isVariableRelatedToAnyOutputType(variable) -> TypeVariableFixationReadiness.RELATED_TO_ANY_OUTPUT_TYPE
-        variableHasOnlyIncorporatedConstraintsFromDeclaredUpperBound(variable) ->
-            TypeVariableFixationReadiness.FROM_INCORPORATION_OF_DECLARED_UPPER_BOUND
-        isReified(variable) -> TypeVariableFixationReadiness.READY_FOR_FIXATION_REIFIED
-        inferenceCompatibilityModeEnabled -> {
-            when {
-                variableHasLowerNonNothingProperConstraint(variable) -> TypeVariableFixationReadiness.READY_FOR_FIXATION_LOWER
-                else -> TypeVariableFixationReadiness.READY_FOR_FIXATION_UPPER
-            }
+    ): TypeVariableFixationReadiness {
+
+        val resultingSetOfFactors = mutableListOf<TypeVariableFixationReadinessFactor>()
+
+        when {
+            !notFixedTypeVariables.contains(variable) || dependencyProvider.isVariableRelatedToTopLevelType(variable) ||
+                    variableHasUnprocessedConstraintsInForks(variable) ->
+                return TypeVariableFixationReadiness.FORBIDDEN
+            isTypeInferenceForSelfTypesSupported && areAllProperConstraintsSelfTypeBased(variable) ->
+                resultingSetOfFactors.add(TypeVariableFixationReadinessFactor.READY_FOR_FIXATION_DECLARED_UPPER_BOUND_WITH_SELF_TYPES)
+            !variableHasProperArgumentConstraints(variable) -> return TypeVariableFixationReadiness.WITHOUT_PROPER_ARGUMENT_CONSTRAINT
+            dependencyProvider.isRelatedToOuterTypeVariable(variable) -> return TypeVariableFixationReadiness.OUTER_TYPE_VARIABLE_DEPENDENCY
         }
-        else -> TypeVariableFixationReadiness.READY_FOR_FIXATION
+
+        if (!isK2 && resultingSetOfFactors.isNotEmpty()) return TypeVariableFixationReadiness.READY_FOR_FIXATION_DECLARED_UPPER_BOUND_WITH_SELF_TYPES
+
+        if (hasDependencyToOtherTypeVariables(variable)) {
+            resultingSetOfFactors.add(TypeVariableFixationReadinessFactor.WITH_COMPLEX_DEPENDENCY)
+        }
+
+        if (allConstraintsTrivialOrNonProper(variable)) {
+            resultingSetOfFactors.add(TypeVariableFixationReadinessFactor.ALL_CONSTRAINTS_TRIVIAL_OR_NON_PROPER)
+        }
+
+        if (dependencyProvider.isVariableRelatedToAnyOutputType(variable)) {
+            resultingSetOfFactors.add(TypeVariableFixationReadinessFactor.RELATED_TO_ANY_OUTPUT_TYPE)
+        }
+
+        if (variableHasOnlyIncorporatedConstraintsFromDeclaredUpperBound(variable)) {
+            resultingSetOfFactors.add(TypeVariableFixationReadinessFactor.FROM_INCORPORATION_OF_DECLARED_UPPER_BOUND)
+        }
+
+        if (resultingSetOfFactors.isNotEmpty()) {
+            if (AbstractTypeChecker.RUN_SLOW_ASSERTIONS) {
+                check(resultingSetOfFactors.sorted() == resultingSetOfFactors)
+            }
+
+            if (!isK2) return TypeVariableFixationReadiness(resultingSetOfFactors.first())
+
+            return TypeVariableFixationReadiness(resultingSetOfFactors.first(), resultingSetOfFactors.drop(1))
+        }
+
+        return when {
+            isReified(variable) -> TypeVariableFixationReadiness.READY_FOR_FIXATION_REIFIED
+            inferenceCompatibilityModeEnabled -> {
+                when {
+                    variableHasLowerNonNothingProperConstraint(variable) -> TypeVariableFixationReadiness.READY_FOR_FIXATION_LOWER
+                    else -> TypeVariableFixationReadiness.READY_FOR_FIXATION_UPPER
+                }
+            }
+            else -> TypeVariableFixationReadiness.READY_FOR_FIXATION
+        }
     }
 
     private fun Context.variableHasUnprocessedConstraintsInForks(variableConstructor: TypeConstructorMarker): Boolean {
diff --git a/compiler/testData/diagnostics/tests/inference/kt69159Simplified.fir.kt b/compiler/testData/diagnostics/tests/inference/kt69159Simplified.fir.kt
deleted file mode 100644
index 9e5bc5b..0000000
--- a/compiler/testData/diagnostics/tests/inference/kt69159Simplified.fir.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-// ISSUE: KT-69159
-
-interface MyExpression<F>
-
-fun <E> getElement(f: MyExpression<E>): E = TODO()
-
-class MyMin<T1, in S1 : T1?> : MyExpression<T1?>
-
-fun <T2, S2 : T2?> MyExpression<in S2>.min(): MyMin<T2, S2> = TODO()
-
-fun main(x: MyExpression<String>) {
-    <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>getElement(x.min())!!<!>
-    getElement(x.min())!!.<!UNRESOLVED_REFERENCE!>length<!>
-}
diff --git a/compiler/testData/diagnostics/tests/inference/kt69159Simplified.kt b/compiler/testData/diagnostics/tests/inference/kt69159Simplified.kt
index 5651e8a..3b2491d 100644
--- a/compiler/testData/diagnostics/tests/inference/kt69159Simplified.kt
+++ b/compiler/testData/diagnostics/tests/inference/kt69159Simplified.kt
@@ -1,3 +1,4 @@
+// FIR_IDENTICAL
 // ISSUE: KT-69159
 
 interface MyExpression<F>
diff --git a/compiler/testData/diagnostics/tests/inference/kt69159WithComparable.fir.kt b/compiler/testData/diagnostics/tests/inference/kt69159WithComparable.fir.kt
deleted file mode 100644
index 508a9c1..0000000
--- a/compiler/testData/diagnostics/tests/inference/kt69159WithComparable.fir.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-// ISSUE: KT-69159
-interface MyExpression<F>
-
-fun <E> getElement(f: MyExpression<E>): E = TODO()
-
-class MyMin<T1, in S1 : T1?> : MyExpression<T1?>
-
-fun <T2 : Comparable<T2>, S2 : T2?> MyExpression<in S2>.min(): MyMin<T2, S2> = TODO()
-
-fun foo(x: MyExpression<String>) {
-    <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Nothing")!>getElement(x.min())!!<!>
-    getElement(x.min())!!.<!UNRESOLVED_REFERENCE!>length<!>
-}
diff --git a/compiler/testData/diagnostics/tests/inference/kt69159WithComparable.kt b/compiler/testData/diagnostics/tests/inference/kt69159WithComparable.kt
index fc64653..8f6d2bb 100644
--- a/compiler/testData/diagnostics/tests/inference/kt69159WithComparable.kt
+++ b/compiler/testData/diagnostics/tests/inference/kt69159WithComparable.kt
@@ -1,3 +1,4 @@
+// FIR_IDENTICAL
 // ISSUE: KT-69159
 interface MyExpression<F>
 
