diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs
index 8376f0571f1f85f4e1afc6444ef5c56460812a80..0a8a69ed346381ba1596e02e05a1ba0375441ff5 100755
--- a/Source/Core/General/MapManager.cs
+++ b/Source/Core/General/MapManager.cs
@@ -543,13 +543,17 @@ namespace CodeImp.DoomBuilder
 
 			if(General.Editing.Mode != null)
 			{
-				if(General.Editing.Mode is ClassicMode)
+				if (General.Editing.Mode is ClassicMode)
 				{
 					ClassicMode mode = (ClassicMode)General.Editing.Mode;
 					mode.OnRedoEnd();
 
+					// biwa. Cancel current mode. This will re-engage non-volatile modes to make sure it's
+					// properly initialized for the new map. Fixes issues mentioned in #196
+					General.Editing.CancelMode();
+
 					// Center map in screen or on stored coordinates
-					if(options.ViewPosition.IsFinite() && !float.IsNaN(options.ViewScale))
+					if (options.ViewPosition.IsFinite() && !float.IsNaN(options.ViewScale))
 						mode.CenterOnCoordinates(options.ViewPosition, options.ViewScale);
 					else
 						mode.CenterInScreen();
@@ -557,12 +561,16 @@ namespace CodeImp.DoomBuilder
 				else if(General.Editing.Mode is VisualMode)
 				{
 					VisualMode mode = (VisualMode)General.Editing.Mode;
-					
+
+					// biwa. Cancel current mode. This will re-engage non-volatile modes to make sure it's
+					// properly initialized for the new map. Fixes issues mentioned in #196
+					General.Editing.CancelMode();
+
 					// This will rebuild blockmap, among the other things
 					General.Editing.Mode.OnReloadResources();
 
 					// Update camera position
-					if(options.ViewPosition.IsFinite()) mode.CenterOnCoordinates(options.ViewPosition);
+					if (options.ViewPosition.IsFinite()) mode.CenterOnCoordinates(options.ViewPosition);
 				}
 			}