diff --git a/Source/Core/Map/MapSet.cs b/Source/Core/Map/MapSet.cs
index b01a5bd5294fbe91c7670c80136145d3c1a31ff0..398d6c5bf5dd591cba46565d52694c45b0a5031d 100644
--- a/Source/Core/Map/MapSet.cs
+++ b/Source/Core/Map/MapSet.cs
@@ -1066,6 +1066,31 @@ namespace CodeImp.DoomBuilder.Map
 			}
 		}
 
+		// Returns a collection of sidedefs that match a selected linedefs state
+		public ICollection<Sidedef> GetSidedefsFromSelectedLinedefs(bool selected)
+		{
+			if(selected)
+			{
+				List<Sidedef> list = new List<Sidedef>(sel_linedefs.Count);
+				foreach(Linedef ld in sel_linedefs)
+				{
+					if(ld.Front != null) list.Add(ld.Front);
+					if(ld.Back != null) list.Add(ld.Back);
+				}
+				return list;
+			}
+			else
+			{
+				List<Sidedef> list = new List<Sidedef>(linedefs.Count - sel_linedefs.Count);
+				foreach(Linedef ld in linedefs)
+				{
+					if(!ld.Selected && (ld.Front != null)) list.Add(ld.Front);
+					if(!ld.Selected && (ld.Back != null)) list.Add(ld.Back);
+				}
+				return list;
+			}
+		}
+
 		// Returns a collection of sectors that match a selected state
 		public ICollection<Sector> GetSelectedSectors(bool selected)
 		{
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs b/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs
index 78893a762230b5acdb03a8d661a4101a10985509..5621b134e26ad662521971fc60a37248c16f3b3e 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs
@@ -106,9 +106,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
 
 			// Interpret the find
 			long longfind = Lump.MakeLongName(value.Trim());
-
+			
+			// Where to search?
+			ICollection<Sector> seclist = withinselection ? General.Map.Map.GetSelectedSectors(true) : General.Map.Map.Sectors;
+			ICollection<Sidedef> sidelist = withinselection ? General.Map.Map.GetSidedefsFromSelectedLinedefs(true) : General.Map.Map.Sidedefs;
+			
 			// Go for all sectors
-			foreach(Sector s in General.Map.Map.Sectors)
+			foreach(Sector s in seclist)
 			{
 				// Flat matches?
 				if(s.LongCeilTexture == longfind)
@@ -127,7 +131,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			}
 			
 			// Go for all sidedefs
-			foreach(Sidedef sd in General.Map.Map.Sidedefs)
+			foreach(Sidedef sd in sidelist)
 			{
 				string side = sd.IsFront ? "front" : "back";
 				
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindLinedefSectorRef.cs b/Source/Plugins/BuilderModes/FindReplace/FindLinedefSectorRef.cs
index 1efa5cb441d801c895aac4877e56cd97cd7c326d..372af6aceafcae514db8e31316e1553bea9b2db2 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindLinedefSectorRef.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindLinedefSectorRef.cs
@@ -111,8 +111,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int tag = 0;
 			if(int.TryParse(value, out tag))
 			{
+				// Where to search?
+				ICollection<Linedef> list = withinselection ? General.Map.Map.GetSelectedLinedefs(true) : General.Map.Map.Linedefs;
+				
 				// Go for all linedefs
-				foreach(Linedef l in General.Map.Map.Linedefs)
+				foreach(Linedef l in list)
 				{
 					bool addline = false;
 
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindLinedefTags.cs b/Source/Plugins/BuilderModes/FindReplace/FindLinedefTags.cs
index c0b77745adf5f212136d9582041d235200cb1a53..0927c0f1ff74ba83a7edaec60fcdb63ae7078993 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindLinedefTags.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindLinedefTags.cs
@@ -110,8 +110,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int tag = 0;
 			if(int.TryParse(value, out tag))
 			{
+				// Where to search?
+				ICollection<Linedef> list = withinselection ? General.Map.Map.GetSelectedLinedefs(true) : General.Map.Map.Linedefs;
+
 				// Go for all linedefs
-				foreach(Linedef l in General.Map.Map.Linedefs)
+				foreach(Linedef l in list)
 				{
 					// Tag matches?
 					if(l.Tag == tag)
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindLinedefThingRef.cs b/Source/Plugins/BuilderModes/FindReplace/FindLinedefThingRef.cs
index e4d159646122e0e98719795d86d6beb195214ee4..470a3cd9423a8d8b5e53bd7432862551ac289b27 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindLinedefThingRef.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindLinedefThingRef.cs
@@ -111,8 +111,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int tag = 0;
 			if(int.TryParse(value, out tag))
 			{
+				// Where to search?
+				ICollection<Linedef> list = withinselection ? General.Map.Map.GetSelectedLinedefs(true) : General.Map.Map.Linedefs;
+
 				// Go for all linedefs
-				foreach(Linedef l in General.Map.Map.Linedefs)
+				foreach(Linedef l in list)
 				{
 					bool addline = false;
 
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindLinedefTypes.cs b/Source/Plugins/BuilderModes/FindReplace/FindLinedefTypes.cs
index 31d3ddb91b4da32fc87851dcba63c3b0028977bf..82d79a700ae62444a0786e5d7c7f7bd74e74a070 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindLinedefTypes.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindLinedefTypes.cs
@@ -105,8 +105,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int action = 0;
 			if(int.TryParse(value, out action))
 			{
+				// Where to search?
+				ICollection<Linedef> list = withinselection ? General.Map.Map.GetSelectedLinedefs(true) : General.Map.Map.Linedefs;
+
 				// Go for all linedefs
-				foreach(Linedef l in General.Map.Map.Linedefs)
+				foreach(Linedef l in list)
 				{
 					// Action matches?
 					if(l.Action == action)
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSectorEffect.cs b/Source/Plugins/BuilderModes/FindReplace/FindSectorEffect.cs
index 1ba14b8c42c62788e973aa73eee545ab17ab6ffc..a8d7609010eb7dad55fe42dc6e458a7ab4831101 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindSectorEffect.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindSectorEffect.cs
@@ -106,8 +106,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int effect = 0;
 			if(int.TryParse(value, out effect))
 			{
+				// Where to search?
+				ICollection<Sector> list = withinselection ? General.Map.Map.GetSelectedSectors(true) : General.Map.Map.Sectors;
+
 				// Go for all sectors
-				foreach(Sector s in General.Map.Map.Sectors)
+				foreach(Sector s in list)
 				{
 					// Tag matches?
 					if(s.Effect == effect)
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs b/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs
index 23df6897e6c64da9ece0381fa458d81f6379ccaf..e8e0aa3eb18b28b86905c34c00d7eb2da0fe28f4 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs
@@ -99,9 +99,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			
 			// Interpret the find
 			long longfind = Lump.MakeLongName(value.Trim());
-			
+
+			// Where to search?
+			ICollection<Sector> list = withinselection ? General.Map.Map.GetSelectedSectors(true) : General.Map.Map.Sectors;
+
 			// Go for all sectors
-			foreach(Sector s in General.Map.Map.Sectors)
+			foreach(Sector s in list)
 			{
 				// Flat matches?
 				if(s.LongCeilTexture == longfind)
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSectorTags.cs b/Source/Plugins/BuilderModes/FindReplace/FindSectorTags.cs
index d4cbbe34630e9d4abf04150fc5b21493f724258f..5ae3ebda93a58c397bd5f1b9a1331468be069af4 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindSectorTags.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindSectorTags.cs
@@ -103,8 +103,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int tag = 0;
 			if(int.TryParse(value, out tag))
 			{
+				// Where to search?
+				ICollection<Sector> list = withinselection ? General.Map.Map.GetSelectedSectors(true) : General.Map.Map.Sectors;
+
 				// Go for all sectors
-				foreach(Sector s in General.Map.Map.Sectors)
+				foreach(Sector s in list)
 				{
 					// Tag matches?
 					if(s.Tag == tag)
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs b/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs
index b9a34d9b8a7248a5faa110704a24a8df625e1a45..058222fdede92579ae98ac6a17bc499fee43087b 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs
@@ -99,9 +99,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			
 			// Interpret the find
 			long longfind = Lump.MakeLongName(value.Trim());
-			
+
+			// Where to search?
+			ICollection<Sidedef> list = withinselection ? General.Map.Map.GetSidedefsFromSelectedLinedefs(true) : General.Map.Map.Sidedefs;
+
 			// Go for all sidedefs
-			foreach(Sidedef sd in General.Map.Map.Sidedefs)
+			foreach(Sidedef sd in list)
 			{
 				string side = sd.IsFront ? "front" : "back";
 				
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingAction.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingAction.cs
index 329e8191ba2084abad57f3b97f8976bef41ae040..f355aebffdc8025412286952d732ea7e35883850 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindThingAction.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindThingAction.cs
@@ -113,8 +113,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int findaction = 0;
 			if(int.TryParse(value, out findaction))
 			{
+				// Where to search?
+				ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things;
+
 				// Go for all things
-				foreach(Thing t in General.Map.Map.Things)
+				foreach(Thing t in list)
 				{
 					// Match?
 					if(t.Action == findaction)
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingSectorRef.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingSectorRef.cs
index fbd7202c7db44013719c58c14f22c18519761e44..79dc8888d6255001854dae0881d8f2eae2b03f31 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindThingSectorRef.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindThingSectorRef.cs
@@ -111,8 +111,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int tag = 0;
 			if(int.TryParse(value, out tag))
 			{
+				// Where to search?
+				ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things;
+
 				// Go for all things
-				foreach(Thing t in General.Map.Map.Things)
+				foreach(Thing t in list)
 				{
 					bool addthing = false;
 					
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingTag.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingTag.cs
index 659b8668022a99da6543c4d051d4074eeaebf237..a6cff5a2f052e66ccbdc9a3d6edc8dcac0ad5872 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindThingTag.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindThingTag.cs
@@ -110,8 +110,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int tag = 0;
 			if(int.TryParse(value, out tag))
 			{
+				// Where to search?
+				ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things;
+
 				// Go for all things
-				foreach(Thing t in General.Map.Map.Things)
+				foreach(Thing t in list)
 				{
 					// Match?
 					if(t.Tag == tag)
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingThingRef.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingThingRef.cs
index 5a491302fda850e42d827c25802ce4da1cf48078..866cbddeb8ee86c67d763eec4d9663d8e3c5315d 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindThingThingRef.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindThingThingRef.cs
@@ -111,8 +111,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int tag = 0;
 			if(int.TryParse(value, out tag))
 			{
+				// Where to search?
+				ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things;
+
 				// Go for all things
-				foreach(Thing t in General.Map.Map.Things)
+				foreach(Thing t in list)
 				{
 					bool addthing = false;
 
diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingType.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingType.cs
index aee3a80bff40e10db2a937e104f7b611148f6f35..ca5f05b83a75b19a0afb30ab70ec66a420f05848 100644
--- a/Source/Plugins/BuilderModes/FindReplace/FindThingType.cs
+++ b/Source/Plugins/BuilderModes/FindReplace/FindThingType.cs
@@ -106,8 +106,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			int findtype = 0;
 			if(int.TryParse(value, out findtype))
 			{
+				// Where to search?
+				ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things;
+
 				// Go for all things
-				foreach(Thing t in General.Map.Map.Things)
+				foreach(Thing t in list)
 				{
 					// Match?
 					if(t.Type == findtype)