diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs
index 32fd8b73d..78912bcc5 100644
--- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs
@@ -140,7 +140,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
         {
             if ((MethodOffset)meth.Method == MethodOffset.BindChannel)
             {
-                _subChannels[meth.SubChannel] = new GpuState();
+                _subChannels[meth.SubChannel].ClearCallbacks();
 
                 _context.Methods.RegisterCallbacks(_subChannels[meth.SubChannel]);
             }
diff --git a/Ryujinx.Graphics.Gpu/State/GpuState.cs b/Ryujinx.Graphics.Gpu/State/GpuState.cs
index 4b93dd45f..16dad5c10 100644
--- a/Ryujinx.Graphics.Gpu/State/GpuState.cs
+++ b/Ryujinx.Graphics.Gpu/State/GpuState.cs
@@ -210,6 +210,17 @@ namespace Ryujinx.Graphics.Gpu.State
             _registers[(int)offset].Callback = callback;
         }
 
+        /// <summary>
+        /// Clear all registered callbacks.
+        /// </summary>
+        public void ClearCallbacks()
+        {
+            for (int index = 0; index < _registers.Length; index++)
+            {
+                _registers[index].Callback = null;
+            }
+        }
+
         /// <summary>
         /// Checks if a given register has been modified since the last call to this method.
         /// </summary>