diff --git a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
index 3f60f45482..11d60fe3e0 100644
--- a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
+++ b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
@@ -130,6 +130,7 @@
     <Compile Include="ProjectDecompiler\TargetFrameworkTests.cs" />
     <Compile Include="TestAssemblyResolver.cs" />
     <Compile Include="TestCases\ILPretty\MonoFixed.cs" />
+    <Compile Include="TestCases\Pretty\Comparisons.cs" />
     <None Include="TestCases\VBPretty\VBAutomaticEvents.vb" />
     <Compile Include="TestCases\VBPretty\VBAutomaticEvents.cs" />
     <Compile Include="TestCases\VBPretty\VBNonGenericForEach.cs" />
diff --git a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
index 284b51401b..f4ff7c9149 100644
--- a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
+++ b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
@@ -586,6 +586,12 @@ public async Task OptionalArguments([ValueSource(nameof(defaultOptions))] Compil
 			await RunForLibrary(cscOptions: cscOptions);
 		}
 
+		[Test]
+		public async Task Comparisons([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
+		{
+			await RunForLibrary(cscOptions: cscOptions);
+		}
+
 		[Test]
 		public async Task ConstantsTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
 		{
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Comparisons.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Comparisons.cs
new file mode 100644
index 0000000000..5a1df3c9b2
--- /dev/null
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Comparisons.cs
@@ -0,0 +1,18 @@
+namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
+{
+	public class Comparisons
+	{
+		private class A
+		{
+		}
+
+		private class B
+		{
+		}
+
+		private bool CompareUnrelatedNeedsCast(A a, B b)
+		{
+			return (object)a == b;
+		}
+	}
+}
diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs
index 14ab787ba0..5d86879cc8 100644
--- a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs
+++ b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs
@@ -805,7 +805,11 @@ public ResolveResult ResolveBinaryOperator(BinaryOperatorType op, ResolveResult
 					}
 					if (op == BinaryOperatorType.Equality || op == BinaryOperatorType.InEquality)
 					{
-						if (lhsType.IsReferenceType == true && rhsType.IsReferenceType == true)
+						if (lhsType.IsReferenceType == true && rhsType.IsReferenceType == true
+							&& (conversions.IdentityConversion(lhsType, rhsType)
+								|| conversions.ExplicitConversion(lhsType, rhsType).IsReferenceConversion
+								|| conversions.IdentityConversion(rhsType, lhsType)
+								|| conversions.ExplicitConversion(rhsType, lhsType).IsReferenceConversion))
 						{
 							// If it's a reference comparison
 							if (op == BinaryOperatorType.Equality)