diff --git a/Ryujinx.Memory/WindowsShared/MappingTree.cs b/Ryujinx.Memory/WindowsShared/MappingTree.cs
index 7a18d4570..97758c2b1 100644
--- a/Ryujinx.Memory/WindowsShared/MappingTree.cs
+++ b/Ryujinx.Memory/WindowsShared/MappingTree.cs
@@ -13,7 +13,7 @@ namespace Ryujinx.Memory.WindowsShared
 
         public int GetNodes(ulong start, ulong end, ref RangeNode<T>[] overlaps, int overlapCount = 0)
         {
-            RangeNode<T> node = GetNode(new RangeNode<T>(start, start + 1UL, default));
+            RangeNode<T> node = this.GetNodeByKey(start);
 
             for (; node != null; node = node.Successor)
             {
@@ -34,7 +34,7 @@ namespace Ryujinx.Memory.WindowsShared
         }
     }
 
-    class RangeNode<T> : IntrusiveRedBlackTreeNode<RangeNode<T>>, IComparable<RangeNode<T>>
+    class RangeNode<T> : IntrusiveRedBlackTreeNode<RangeNode<T>>, IComparable<RangeNode<T>>, IComparable<ulong>
     {
         public ulong Start { get; }
         public ulong End { get; private set; }
@@ -67,5 +67,21 @@ namespace Ryujinx.Memory.WindowsShared
                 return 1;
             }
         }
+
+        public int CompareTo(ulong address)
+        {
+            if (address < Start)
+            {
+                return 1;
+            }
+            else if (address <= End - 1UL)
+            {
+                return 0;
+            }
+            else
+            {
+                return -1;
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs b/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
index 8624f817a..a17fea5e3 100644
--- a/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
+++ b/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
@@ -1,3 +1,4 @@
+using Ryujinx.Common.Collections;
 using Ryujinx.Common.Memory.PartialUnmaps;
 using System;
 using System.Diagnostics;
@@ -88,7 +89,7 @@ namespace Ryujinx.Memory.WindowsShared
 
             lock (_mappings)
             {
-                RangeNode<ulong> node = _mappings.GetNode(new RangeNode<ulong>(address, address + 1UL, default));
+                RangeNode<ulong> node = _mappings.GetNodeByKey(address);
                 RangeNode<ulong> successorNode;
 
                 for (; node != null; node = successorNode)
@@ -379,7 +380,7 @@ namespace Ryujinx.Memory.WindowsShared
 
             lock (_mappings)
             {
-                RangeNode<ulong> node = _mappings.GetNode(new RangeNode<ulong>(address, address + 1UL, default));
+                RangeNode<ulong> node = _mappings.GetNodeByKey(address);
 
                 if (node == null)
                 {
@@ -481,7 +482,7 @@ namespace Ryujinx.Memory.WindowsShared
 
             lock (_mappings)
             {
-                RangeNode<ulong> node = _mappings.GetNode(new RangeNode<ulong>(reprotectAddress, reprotectAddress + 1UL, default));
+                RangeNode<ulong> node = _mappings.GetNodeByKey(reprotectAddress);
                 RangeNode<ulong> successorNode;
 
                 for (; node != null; node = successorNode)
@@ -580,7 +581,7 @@ namespace Ryujinx.Memory.WindowsShared
 
             lock (_protections)
             {
-                RangeNode<MemoryPermission> node = _protections.GetNode(new RangeNode<MemoryPermission>(address, address + 1UL, default));
+                RangeNode<MemoryPermission> node = _protections.GetNodeByKey(address);
 
                 if (node != null &&
                     node.Start <= address &&
@@ -651,7 +652,7 @@ namespace Ryujinx.Memory.WindowsShared
 
             lock (_protections)
             {
-                RangeNode<MemoryPermission> node = _protections.GetNode(new RangeNode<MemoryPermission>(address, address + 1UL, default));
+                RangeNode<MemoryPermission> node = _protections.GetNodeByKey(address);
                 RangeNode<MemoryPermission> successorNode;
 
                 for (; node != null; node = successorNode)