diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
index 60702b08c0944408d5a25b8d3763ab10067b708f..f97c07291002bf55b580655521ec36195943399c 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
@@ -1187,14 +1187,27 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			}
 			allslopehandles.Clear();
 
-			if (General.Map.UDMF /* && General.Settings.ShowVisualSlopeHandles */)
+			BuildSlopeHandles(General.Map.Map.Sectors.ToList());
+		}
+
+		private void BuildSlopeHandles(List<Sector> sectors)
+		{
+			if (General.Map.UDMF)
 			{
-				foreach (Sector s in General.Map.Map.Sectors)
+				foreach (Sector s in sectors)
 				{
+					if (s.IsDisposed)
+					{
+						continue;
+					}
+
 					SectorData sectordata = GetSectorData(s);
 
 					sectordata.Update();
 
+					if (allslopehandles.ContainsKey(s))
+						allslopehandles.Remove(s);
+
 					foreach (Sidedef sidedef in s.Sidedefs)
 					{
 						VisualSlope handle = CreateVisualSlopeHandle(sectordata.Floor, sidedef, true);
@@ -1489,6 +1502,29 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			{
 				// Let the core do this (it will just dispose the sectors that were changed)
 				base.ResourcesReloadedPartial();
+
+				// The base doesn't know anything about slobe handles, so we have to clear them up ourself
+				if (General.Map.UDMF)
+				{
+					List<Sector> removedsectors = new List<Sector>();
+
+					// Get the sectors that were disposed...
+					foreach(Sector s in allslopehandles.Keys)
+					{
+						if (s.IsDisposed)
+							removedsectors.Add(s);
+					}
+
+					// ... so that we can remove their slope handles
+					foreach(Sector s in removedsectors)
+					{
+						allslopehandles[s].Clear();
+						allslopehandles.Remove(s);
+					}
+
+					// Rebuild slope handles for the changed sectors
+					BuildSlopeHandles(General.Map.Map.GetMarkedSectors(true));
+				}
 			}
 			else
 			{
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualSidedefSlope.cs b/Source/Plugins/BuilderModes/VisualModes/VisualSidedefSlope.cs
index 237a586b0e61b50f8eff1a99d6ae7e7c5b5f590c..6346c914578374e8330985ae93faed67eab482f5 100644
--- a/Source/Plugins/BuilderModes/VisualModes/VisualSidedefSlope.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualSidedefSlope.cs
@@ -84,6 +84,9 @@ namespace CodeImp.DoomBuilder.VisualModes
 		/// </summary>
 		public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
 		{
+			if (sidedef.IsDisposed || sidedef.Sector.IsDisposed)
+				return false;
+
 			RectangleF bbox = sidedef.Sector.BBox;
 
 			if ((up && plane.Distance(from) > 0.0f) || (!up && plane.Distance(from) < 0.0f))