diff --git a/Source/BuilderModes/ClassicModes/LinedefsMode.cs b/Source/BuilderModes/ClassicModes/LinedefsMode.cs
index 80b287ec..267bfbc6 100644
--- a/Source/BuilderModes/ClassicModes/LinedefsMode.cs
+++ b/Source/BuilderModes/ClassicModes/LinedefsMode.cs
@@ -657,8 +657,20 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		[BeginAction("fliplinedefs")]
 		public void FlipLinedefs()
 		{
-			// Any selected lines?
+			// No selected lines?
 			ICollection<Linedef> selected = General.Map.Map.GetSelectedLinedefs(true);
+			if(selected.Count == 0)
+			{
+				// Anything highlighted?
+				if(highlighted != null)
+				{
+					// Select the highlighted item
+					highlighted.Selected = true;
+					selected.Add(highlighted);
+				}
+			}
+
+			// Any selected lines?
 			if(selected.Count > 0)
 			{
 				// Make undo
@@ -673,9 +685,17 @@ namespace CodeImp.DoomBuilder.BuilderModes
 					l.FlipVertices();
 					l.FlipSidedefs();
 				}
+				
+				// Remove selection if only one was selected
+				if(selected.Count == 1)
+				{
+					foreach(Linedef ld in selected) ld.Selected = false;
+					selected.Clear();
+				}
 
 				// Redraw
 				General.Map.IsChanged = true;
+				General.Interface.RefreshInfo();
 				General.Interface.RedrawDisplay();
 			}
 		}
@@ -683,8 +703,20 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		[BeginAction("flipsidedefs")]
 		public void FlipSidedefs()
 		{
-			// Any selected lines?
+			// No selected lines?
 			ICollection<Linedef> selected = General.Map.Map.GetSelectedLinedefs(true);
+			if(selected.Count == 0)
+			{
+				// Anything highlighted?
+				if(highlighted != null)
+				{
+					// Select the highlighted item
+					highlighted.Selected = true;
+					selected.Add(highlighted);
+				}
+			}
+
+			// Any selected lines?
 			if(selected.Count > 0)
 			{
 				// Make undo
@@ -697,10 +729,21 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				foreach(Linedef l in selected)
 				{
 					l.FlipSidedefs();
+					if(l.Front != null) l.Front.Sector.UpdateNeeded = true;
+					if(l.Back != null) l.Back.Sector.UpdateNeeded = true;
+				}
+
+				// Remove selection if only one was selected
+				if(selected.Count == 1)
+				{
+					foreach(Linedef ld in selected) ld.Selected = false;
+					selected.Clear();
 				}
 
 				// Redraw
+				General.Map.Map.Update();
 				General.Map.IsChanged = true;
+				General.Interface.RefreshInfo();
 				General.Interface.RedrawDisplay();
 			}
 		}
diff --git a/Source/Windows/IMainForm.cs b/Source/Windows/IMainForm.cs
index 36f16dbf..0f6ffa74 100644
--- a/Source/Windows/IMainForm.cs
+++ b/Source/Windows/IMainForm.cs
@@ -64,6 +64,7 @@ namespace CodeImp.DoomBuilder.Windows
 		void ShowThingInfo(Thing t);
 		void ShowVertexInfo(Vertex v);
 		void HideInfo();
+		void RefreshInfo();
 		void UpdateCoordinates(Vector2D coords);
 		bool Focus();
 		void SetProcessorState(bool on);
diff --git a/Source/Windows/MainForm.cs b/Source/Windows/MainForm.cs
index 17c5d584..f2decec9 100644
--- a/Source/Windows/MainForm.cs
+++ b/Source/Windows/MainForm.cs
@@ -1985,6 +1985,15 @@ namespace CodeImp.DoomBuilder.Windows
 			modename.Refresh();
 		}
 		
+		// This refreshes info
+		public void RefreshInfo()
+		{
+			if(lastinfoobject is Vertex) ShowVertexInfo(lastinfoobject as Vertex);
+			else if(lastinfoobject is Linedef) ShowLinedefInfo(lastinfoobject as Linedef);
+			else if(lastinfoobject is Sector) ShowSectorInfo(lastinfoobject as Sector);
+			else if(lastinfoobject is Thing) ShowThingInfo(lastinfoobject as Thing);
+		}
+		
 		// Show linedef info
 		public void ShowLinedefInfo(Linedef l)
 		{