diff --git a/Build/Configurations/Eternity_DoomUDMF.cfg b/Build/Configurations/Eternity_DoomUDMF.cfg
index 071927cb19f9c19b438a505e8f8823e7e62cb0df..60bd3bfbed955e00fb19207ff8f1329cbb2e7725 100755
--- a/Build/Configurations/Eternity_DoomUDMF.cfg
+++ b/Build/Configurations/Eternity_DoomUDMF.cfg
@@ -28,7 +28,7 @@ decorategames = "";
 // (these are not required, just useful for new users)
 thingsfilters
 {
-	include("Includes\\ZDoom_misc.cfg", "thingsfilters_udmf");
+	include("Includes\\Eternity_misc.cfg", "thingsfilters_udmf");
 }
 
 // THING TYPES
diff --git a/Build/Configurations/Includes/Eternity_common.cfg b/Build/Configurations/Includes/Eternity_common.cfg
index b8638533a689afbd7cdb12269ef05c2c1d10be07..5eb4062001e83e8194e3815b3b9349d0a0208f30 100755
--- a/Build/Configurations/Includes/Eternity_common.cfg
+++ b/Build/Configurations/Includes/Eternity_common.cfg
@@ -236,6 +236,9 @@ mapformat_udmf
 	// WARNING: enabling this will make maps incompatible with Doom Builder 2 and can lead to problems in Slade 3!
 	longtexturenames = true;
 	
+	// Enables support for individual offsets of upper/middle/lower sidedef textures
+	localsidedeftextureoffsets = true;
+
 	// Enables setting brightness for floor and ceiling independently from each other
 	distinctfloorandceilingbrightness = true;
 	
diff --git a/Build/Configurations/Includes/Eternity_misc.cfg b/Build/Configurations/Includes/Eternity_misc.cfg
index c58d744855d2141fd52558d5d7d10d486f3779a0..e895df94751f8d13dd0ba95bcef6f53a2bbf607e 100755
--- a/Build/Configurations/Includes/Eternity_misc.cfg
+++ b/Build/Configurations/Includes/Eternity_misc.cfg
@@ -75,6 +75,63 @@ universalfields
 			type = 2;
 			default = "";
 		}
+		
+		offsetx_top
+		{
+			type = 1;
+			default = 0.0;
+		}
+
+		offsety_bottom
+		{
+			type = 1;
+			default = 0.0;
+		}
+
+		offsetx_bottom
+		{
+			type = 1;
+			default = 0.0;
+		}
+
+		offsetx_mid
+		{
+			type = 1;
+			default = 0.0;
+		}
+
+		offsety_top
+		{
+			type = 1;
+			default = 0.0;
+		}
+
+		offsety_mid
+		{
+			type = 1;
+			default = 0.0;
+		}
+
+		skew_top_type
+		{
+			type = 16;
+			enum = "skew_type_top_bottom";
+			default = "none";
+		}
+
+		skew_middle_type
+		{
+			type = 16;
+			enum = "skew_type_middle";
+			default = "none";
+		}
+
+		skew_bottom_type
+		{
+			type = 16;
+			enum = "skew_type_top_bottom";
+			default = "none";
+		}
 	}
 	
 	thing
@@ -602,4 +659,117 @@ enums
 		5 = "Copy texture and type; trigger model";
 		6 = "Copy texture and type; numeric model";
 	}
+
+	skew_type_top_bottom
+	{
+		none = "None";
+		front = "Skew to front-sector slope";
+		back = "Skew to back-sector slope";
+	}
+
+	skew_type_middle
+	{
+		none = "None";
+		front_floor = "Skew to front-sector floor slope";
+		front_ceiling = "Skew to front-sector ceiling slope";
+		back_floor = "Skew to back-sector floor slope";
+		back_ceiling = "Skew to back-sector ceiling slope";
+	}
+}
+
+// Default thing filters
+// (these are not required, just useful for new users)
+thingsfilters_udmf
+{
+	
+	filter0
+	{
+		name = "Keys only";
+		category = "keys";
+		type = -1;
+	}
+	
+	filter1
+	{
+		name = "Deathmatch";
+		category = "";
+		type = -1;
+		
+		fields
+		{
+			dm = true;
+		}
+	}
+	
+	filter2
+	{
+		name = "Cooperative";
+		category = "";
+		type = -1;
+		
+		fields
+		{
+			coop = true;
+		}
+	}
+
+	filter3
+	{
+		name = "Skill 1";
+		category = "";
+		type = -1;
+		
+		fields
+		{
+			skill1 = true;
+		}
+	}
+	
+	filter4
+	{
+		name = "Skill 2";
+		category = "";
+		type = -1;
+		
+		fields
+		{
+			skill2 = true;
+		}
+	}
+	
+	filter5
+	{
+		name = "Skill 3";
+		category = "";
+		type = -1;
+		
+		fields
+		{
+			skill3 = true;
+		}
+	}
+	
+	filter6
+	{
+		name = "Skill 4";
+		category = "";
+		type = -1;
+		
+		fields
+		{
+			skill4 = true;
+		}
+	}
+	
+	filter7
+	{
+		name = "Skill 5";
+		category = "";
+		type = -1;
+		
+		fields
+		{
+			skill5 = true;
+		}
+	}
 }
\ No newline at end of file
diff --git a/Source/Core/ZDoom/ZScriptStateGoto.cs b/Source/Core/ZDoom/ZScriptStateGoto.cs
index 82c88ebbe8c209c374637195ddc6efe81215b482..46885ead39bc59b05f226cd560cee8ea220f4397 100755
--- a/Source/Core/ZDoom/ZScriptStateGoto.cs
+++ b/Source/Core/ZDoom/ZScriptStateGoto.cs
@@ -36,12 +36,15 @@ namespace CodeImp.DoomBuilder.ZDoom
                     return;
             }
 
+            // TODO: Zscript allows complex mathematical opeartions, not use addition.
+            // example: Goto Spawn + 5 * 2 - 7;
+            // Values of identifies are not used right now and always use 0
             tokenizer.SkipWhitespace();
             token = tokenizer.ExpectToken(ZScriptTokenType.OpAdd);
             if (token != null && token.IsValid)
             {
                 tokenizer.SkipWhitespace();
-                token = tokenizer.ExpectToken(ZScriptTokenType.Integer);
+                token = tokenizer.ExpectToken(ZScriptTokenType.Integer, ZScriptTokenType.Identifier);
                 if (token == null || !token.IsValid)
                 {
                     parser.ReportError("Expected state offset, got " + ((Object)token ?? "<null>").ToString());
diff --git a/Source/Plugins/BuilderModes/Resources/Actions.cfg b/Source/Plugins/BuilderModes/Resources/Actions.cfg
index b30a1bab4860b3b2194b94248d90378c5d8f9c27..86a01b7d4a6a853ac1bde6e5bd17e5c15e341500 100755
--- a/Source/Plugins/BuilderModes/Resources/Actions.cfg
+++ b/Source/Plugins/BuilderModes/Resources/Actions.cfg
@@ -711,6 +711,7 @@ showvisualthings
 	allowkeys = true;
 	allowmouse = true;
 	allowscroll = true;
+	registertoast = true;
 }
 
 raisebrightness8
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
index 235d74b7994f7db9d08c6d1f1521d80bd0f86d0d..5028cce5519dd114b9dfc2cb9c0946d663ed9bb0 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
@@ -3442,6 +3442,15 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		{
 			BuilderPlug.Me.ShowVisualThings++;
 			if(BuilderPlug.Me.ShowVisualThings > 2) BuilderPlug.Me.ShowVisualThings = 0;
+
+			string shortmessage = "Thing visibility is now " + (BuilderPlug.Me.ShowVisualThings > 0 ? (BuilderPlug.Me.ShowVisualThings > 1 ? "ON" : "SPRITE ONLY") : "OFF") + ".";
+			string message = shortmessage;
+			string key = Actions.Action.GetShortcutKeyDesc(General.Actions.Current.ShortcutKey);
+
+			if (!string.IsNullOrEmpty(key))
+				message += $" Press '{key}' to change.";
+
+			General.ToastManager.ShowToast("showvisualthings", ToastType.INFO, "Changed thing visibility", message, new StatusInfo(StatusType.Action, shortmessage));
 		}
 
 		[BeginAction("raisebrightness8")]