diff --git a/Build/Configurations/Includes/UDMF_misc.cfg b/Build/Configurations/Includes/UDMF_misc.cfg
index 7364780aae7bdff3eb52b9d99de51e37a1c31403..fc9bb24abaadcd06330ce4dec3c3b6c73ffd064b 100644
--- a/Build/Configurations/Includes/UDMF_misc.cfg
+++ b/Build/Configurations/Includes/UDMF_misc.cfg
@@ -65,6 +65,7 @@ sectorflags
 	silent = "Silent";
 	hidden = "Not shown on automap";
 	nofallingdamage = "No falling damage";
+	waterzone = "Sector is under water and swimmable";
 	norespawn = "Players can't respawn in this sector";
 	dropactors = "Actors drop with instantly moving floors";
 }
diff --git a/Documents/udmf_zdoom.txt b/Documents/udmf_zdoom.txt
index bdd70322ebc506a198da97eafd30c8c5d1c88fdf..3241bf4c84a606987ac32fc39fb62282db626471 100644
--- a/Documents/udmf_zdoom.txt
+++ b/Documents/udmf_zdoom.txt
@@ -113,6 +113,7 @@ Note: All <bool> fields default to false unless mentioned otherwise.
       blockprojectiles = <bool>;// Line blocks all projectiles
       blockuse = <bool>;        // Line blocks all use actions
       blocksight = <bool>;      // Line blocks monster line of sight
+      blockhitscan = <bool>;    // Line blocks hitscan attacks
       locknumber = <int>;       // Line special is locked
       arg0str = <string>;       // Alternate string-based version of arg0
 
@@ -186,6 +187,7 @@ Note: All <bool> fields default to false unless mentioned otherwise.
       soundsequence = <string>;       // The sound sequence to play when this sector moves. Placing a
                                       // sound sequence thing in the sector will override this property.
       hidden = <bool>;                // if true this sector will not be drawn on the textured automap.
+      waterzone = <bool>;             // Sector is under water and swimmable
       
       * Note about dropactors
 
@@ -203,6 +205,8 @@ Note: All <bool> fields default to false unless mentioned otherwise.
                                 // Parameter is the conversation ID, 0 meaning none.
       countsecret = <bool>;     // Picking up this actor counts as a secret.
       arg0str = <string>;       // Alternate string-based version of arg0
+	  gravity = <float>;		// Set per-actor gravity. Positive values are multiplied with the class's property, 
+	                            // negative values are used as their absolute. Default = 1.0.
 
       * Note about arg0str
 
@@ -328,6 +332,9 @@ Added back locknumber property.
 1.20 25.02.2012
 Added arg0str thing property.
 
+1.21 09.08.2013
+Added waterzone sector property.
+
 ===============================================================================
 EOF
 ===============================================================================
diff --git a/Source/Core/GZBuilder/GZDoom/MapinfoParser.cs b/Source/Core/GZBuilder/GZDoom/MapinfoParser.cs
index b539473d1cf9d5c842efe88852dadac0acb69a84..f37441a6eba8390424f91efa0995ce77f4d5182f 100644
--- a/Source/Core/GZBuilder/GZDoom/MapinfoParser.cs
+++ b/Source/Core/GZBuilder/GZDoom/MapinfoParser.cs
@@ -65,8 +65,6 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom {
 
                     //sky1 or sky2
                     if (token == "sky1" || token == "sky2") {
-                        //Form1.Trace("Got sky " + token);
-
                         string skyType = token;
                         SkipWhitespace(true);
                         token = StripTokenQuotes(ReadToken()).ToLowerInvariant();
@@ -135,7 +133,6 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom {
                                 float scrollSpeed = 0;
                                 if (!ReadSignedFloat(token, ref scrollSpeed)) {
                                     // Not numeric!
-                                    General.ErrorLogger.Add(ErrorType.Error, "Unexpected token found in '" + sourcename + "' at line " + GetCurrentLineNumber() + ": expected " + skyType + " scroll speed value, but got '" + token + "'");
                                     datastream.Seek(-token.Length - 1, SeekOrigin.Current); //step back and try parsing this token again
                                     continue;
                                 }
diff --git a/Source/Core/Resources/UDMF_UI.cfg b/Source/Core/Resources/UDMF_UI.cfg
index 613d0f54e88d252d1195af441e0992aebac8a010..79599875fb89a43aba219e29ffa463350f8ba58e 100644
--- a/Source/Core/Resources/UDMF_UI.cfg
+++ b/Source/Core/Resources/UDMF_UI.cfg
@@ -61,6 +61,7 @@ uifields
 	thing
 	{
 		arg0str;
-    conversation;
+		conversation;
+		gravity;
 	}
 }
\ No newline at end of file
diff --git a/Source/Core/Windows/ThingEditForm.Designer.cs b/Source/Core/Windows/ThingEditForm.Designer.cs
index f212f2777c1b828805dfd6e7ee77c6d760f73c8c..8833c03a8201b9baa45753d0ed0942a954f912bc 100644
--- a/Source/Core/Windows/ThingEditForm.Designer.cs
+++ b/Source/Core/Windows/ThingEditForm.Designer.cs
@@ -32,6 +32,8 @@ namespace CodeImp.DoomBuilder.Windows
 			System.Windows.Forms.GroupBox groupBox2;
 			System.Windows.Forms.Label label7;
 			this.thingtype = new CodeImp.DoomBuilder.Controls.ThingBrowserControl();
+			this.gravity = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.labelGravity = new System.Windows.Forms.Label();
 			this.cbRandomAngle = new System.Windows.Forms.CheckBox();
 			this.cbAbsoluteHeight = new System.Windows.Forms.CheckBox();
 			this.label2 = new System.Windows.Forms.Label();
@@ -119,6 +121,8 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
 						| System.Windows.Forms.AnchorStyles.Right)));
+			groupBox2.Controls.Add(this.gravity);
+			groupBox2.Controls.Add(this.labelGravity);
 			groupBox2.Controls.Add(this.cbRandomAngle);
 			groupBox2.Controls.Add(this.cbAbsoluteHeight);
 			groupBox2.Controls.Add(this.label2);
@@ -130,17 +134,39 @@ namespace CodeImp.DoomBuilder.Windows
 			groupBox2.Controls.Add(this.zlabel);
 			groupBox2.Controls.Add(this.anglecontrol);
 			groupBox2.Controls.Add(this.labelAngle);
-			groupBox2.Location = new System.Drawing.Point(397, 246);
+			groupBox2.Location = new System.Drawing.Point(394, 216);
 			groupBox2.Name = "groupBox2";
-			groupBox2.Size = new System.Drawing.Size(249, 134);
+			groupBox2.Size = new System.Drawing.Size(252, 164);
 			groupBox2.TabIndex = 2;
 			groupBox2.TabStop = false;
 			groupBox2.Text = " Coordination ";
 			// 
+			// gravity
+			// 
+			this.gravity.AllowDecimal = true;
+			this.gravity.AllowNegative = true;
+			this.gravity.AllowRelative = false;
+			this.gravity.ButtonStep = 8;
+			this.gravity.ButtonStepFloat = 0.1F;
+			this.gravity.Location = new System.Drawing.Point(61, 118);
+			this.gravity.Name = "gravity";
+			this.gravity.Size = new System.Drawing.Size(72, 24);
+			this.gravity.StepValues = null;
+			this.gravity.TabIndex = 19;
+			// 
+			// labelGravity
+			// 
+			this.labelGravity.Location = new System.Drawing.Point(5, 123);
+			this.labelGravity.Name = "labelGravity";
+			this.labelGravity.Size = new System.Drawing.Size(50, 14);
+			this.labelGravity.TabIndex = 18;
+			this.labelGravity.Text = "Gravity:";
+			this.labelGravity.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+			// 
 			// cbRandomAngle
 			// 
 			this.cbRandomAngle.AutoSize = true;
-			this.cbRandomAngle.Location = new System.Drawing.Point(38, 114);
+			this.cbRandomAngle.Location = new System.Drawing.Point(151, 19);
 			this.cbRandomAngle.Name = "cbRandomAngle";
 			this.cbRandomAngle.Size = new System.Drawing.Size(94, 18);
 			this.cbRandomAngle.TabIndex = 17;
@@ -151,7 +177,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// cbAbsoluteHeight
 			// 
 			this.cbAbsoluteHeight.AutoSize = true;
-			this.cbAbsoluteHeight.Location = new System.Drawing.Point(38, 93);
+			this.cbAbsoluteHeight.Location = new System.Drawing.Point(37, 94);
 			this.cbAbsoluteHeight.Name = "cbAbsoluteHeight";
 			this.cbAbsoluteHeight.Size = new System.Drawing.Size(102, 18);
 			this.cbAbsoluteHeight.TabIndex = 16;
@@ -161,7 +187,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// label2
 			// 
-			this.label2.Location = new System.Drawing.Point(12, 21);
+			this.label2.Location = new System.Drawing.Point(5, 21);
 			this.label2.Name = "label2";
 			this.label2.Size = new System.Drawing.Size(50, 14);
 			this.label2.TabIndex = 15;
@@ -170,9 +196,9 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// label1
 			// 
-			this.label1.Location = new System.Drawing.Point(9, 46);
+			this.label1.Location = new System.Drawing.Point(5, 46);
 			this.label1.Name = "label1";
-			this.label1.Size = new System.Drawing.Size(53, 14);
+			this.label1.Size = new System.Drawing.Size(50, 14);
 			this.label1.TabIndex = 14;
 			this.label1.Text = "Y:";
 			this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@@ -184,7 +210,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.posX.AllowRelative = true;
 			this.posX.ButtonStep = 8;
 			this.posX.ButtonStepFloat = 1F;
-			this.posX.Location = new System.Drawing.Point(68, 16);
+			this.posX.Location = new System.Drawing.Point(61, 16);
 			this.posX.Name = "posX";
 			this.posX.Size = new System.Drawing.Size(72, 24);
 			this.posX.StepValues = null;
@@ -198,7 +224,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.posY.AllowRelative = true;
 			this.posY.ButtonStep = 8;
 			this.posY.ButtonStepFloat = 1F;
-			this.posY.Location = new System.Drawing.Point(68, 41);
+			this.posY.Location = new System.Drawing.Point(61, 41);
 			this.posY.Name = "posY";
 			this.posY.Size = new System.Drawing.Size(72, 24);
 			this.posY.StepValues = null;
@@ -212,7 +238,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.posZ.AllowRelative = true;
 			this.posZ.ButtonStep = 8;
 			this.posZ.ButtonStepFloat = 1F;
-			this.posZ.Location = new System.Drawing.Point(68, 66);
+			this.posZ.Location = new System.Drawing.Point(61, 66);
 			this.posZ.Name = "posZ";
 			this.posZ.Size = new System.Drawing.Size(72, 24);
 			this.posZ.StepValues = null;
@@ -226,7 +252,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.angle.AllowRelative = true;
 			this.angle.ButtonStep = 1;
 			this.angle.ButtonStepFloat = 1F;
-			this.angle.Location = new System.Drawing.Point(186, 16);
+			this.angle.Location = new System.Drawing.Point(186, 41);
 			this.angle.Name = "angle";
 			this.angle.Size = new System.Drawing.Size(57, 24);
 			this.angle.StepValues = null;
@@ -235,9 +261,9 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// zlabel
 			// 
-			this.zlabel.Location = new System.Drawing.Point(6, 71);
+			this.zlabel.Location = new System.Drawing.Point(5, 71);
 			this.zlabel.Name = "zlabel";
-			this.zlabel.Size = new System.Drawing.Size(56, 14);
+			this.zlabel.Size = new System.Drawing.Size(50, 14);
 			this.zlabel.TabIndex = 9;
 			this.zlabel.Text = "Height:";
 			this.zlabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@@ -247,7 +273,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.anglecontrol.BackColor = System.Drawing.SystemColors.Control;
 			this.anglecontrol.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
 			this.anglecontrol.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-			this.anglecontrol.Location = new System.Drawing.Point(153, 46);
+			this.anglecontrol.Location = new System.Drawing.Point(152, 71);
 			this.anglecontrol.Name = "anglecontrol";
 			this.anglecontrol.Size = new System.Drawing.Size(84, 84);
 			this.anglecontrol.TabIndex = 2;
@@ -257,7 +283,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// labelAngle
 			// 
 			this.labelAngle.AutoSize = true;
-			this.labelAngle.Location = new System.Drawing.Point(149, 21);
+			this.labelAngle.Location = new System.Drawing.Point(149, 46);
 			this.labelAngle.Name = "labelAngle";
 			this.labelAngle.Size = new System.Drawing.Size(38, 14);
 			this.labelAngle.TabIndex = 8;
@@ -310,7 +336,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.spritetex.BackColor = System.Drawing.SystemColors.AppWorkspace;
 			this.spritetex.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
 			this.spritetex.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
-			this.spritetex.Location = new System.Drawing.Point(284, 252);
+			this.spritetex.Location = new System.Drawing.Point(284, 222);
 			this.spritetex.Name = "spritetex";
 			this.spritetex.Size = new System.Drawing.Size(104, 100);
 			this.spritetex.TabIndex = 22;
@@ -323,7 +349,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.settingsgroup.Controls.Add(this.flags);
 			this.settingsgroup.Location = new System.Drawing.Point(284, 6);
 			this.settingsgroup.Name = "settingsgroup";
-			this.settingsgroup.Size = new System.Drawing.Size(362, 234);
+			this.settingsgroup.Size = new System.Drawing.Size(362, 204);
 			this.settingsgroup.TabIndex = 1;
 			this.settingsgroup.TabStop = false;
 			this.settingsgroup.Text = " Settings ";
@@ -337,7 +363,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.flags.Columns = 3;
 			this.flags.Location = new System.Drawing.Point(19, 19);
 			this.flags.Name = "flags";
-			this.flags.Size = new System.Drawing.Size(337, 208);
+			this.flags.Size = new System.Drawing.Size(337, 178);
 			this.flags.TabIndex = 0;
 			this.flags.VerticalSpacing = 1;
 			// 
@@ -732,5 +758,7 @@ namespace CodeImp.DoomBuilder.Windows
 		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox conversationID;
 		private System.Windows.Forms.Label labelID;
 		private System.Windows.Forms.ComboBox scriptNumbers;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox gravity;
+		private System.Windows.Forms.Label labelGravity;
 	}
 }
\ No newline at end of file
diff --git a/Source/Core/Windows/ThingEditForm.cs b/Source/Core/Windows/ThingEditForm.cs
index fa92ccc65cb9f125e1597fd006a028c38f4ff761..2aa1e19d92578a7436453e702270b7603a0e49ca 100644
--- a/Source/Core/Windows/ThingEditForm.cs
+++ b/Source/Core/Windows/ThingEditForm.cs
@@ -104,6 +104,8 @@ namespace CodeImp.DoomBuilder.Windows
 				// Hide unused controls
 				labelID.Visible = false; //mxd
 				conversationID.Visible = false; //mxd
+				labelGravity.Visible = false; //mxd
+				gravity.Visible = false; //mxd
 			}
 
 			// Tag/Effects?
@@ -185,6 +187,7 @@ namespace CodeImp.DoomBuilder.Windows
 			if(General.Map.FormatInterface.HasCustomFields) {
 				fieldslist.SetValues(ft.Fields, true);
 				conversationID.Text = ft.Fields.GetValue("conversation", 0).ToString();
+				gravity.Text = ft.Fields.GetValue("gravity", 1.0f).ToString();
 				arg0str = ft.Fields.GetValue("arg0str", string.Empty);
 				haveArg0Str = !string.IsNullOrEmpty(arg0str);
 			}
@@ -256,6 +259,9 @@ namespace CodeImp.DoomBuilder.Windows
 					if(t.Fields.GetValue("conversation", 0).ToString() != conversationID.Text)
 						conversationID.Text = "";
 
+					if(t.Fields.GetValue("gravity", 1.0f).ToString() != gravity.Text)
+						gravity.Text = "";
+
 					if (arg0str != t.Fields.GetValue("arg0str", string.Empty)) {
 						haveArg0Str = true;
 						arg0str = string.Empty;
@@ -487,6 +493,9 @@ namespace CodeImp.DoomBuilder.Windows
 
 					if(!string.IsNullOrEmpty(conversationID.Text))
 						UDMFTools.SetInteger(t.Fields, "conversation", conversationID.GetResult(t.Fields.GetValue("conversation", 0)), 0, false);
+
+					if(!string.IsNullOrEmpty(gravity.Text))
+						UDMFTools.SetFloat(t.Fields, "gravity", gravity.GetResultFloat(t.Fields.GetValue("gravity", 1.0f)), 1.0f, false);
 				}
 				
 				// Update settings
diff --git a/Source/Core/Windows/ThingEditForm.resx b/Source/Core/Windows/ThingEditForm.resx
index f4c5e6edb8ad5ce6041ae126d93d5a4eb01c569a..dffbb6ff2ee9a75e12d84b9eb3b294f480a3573d 100644
--- a/Source/Core/Windows/ThingEditForm.resx
+++ b/Source/Core/Windows/ThingEditForm.resx
@@ -138,6 +138,24 @@
   <metadata name="actiongroup.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="groupBox3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="tabcustom.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="fieldslist.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="actiongroup.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="hexenpanel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="doompanel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="hexenpanel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
@@ -150,13 +168,19 @@
   <metadata name="arg2label.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="doompanel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="arg1label.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="groupBox3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="arg0label.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="tabcustom.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="arg2label.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="doompanel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="groupBox3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <metadata name="fieldslist.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">