diff --git a/OpenRA.Mods.Cnc/Activities/HarvesterDockSequence.cs b/OpenRA.Mods.Cnc/Activities/HarvesterDockSequence.cs
index 4870124f24..8141ddce40 100644
--- a/OpenRA.Mods.Cnc/Activities/HarvesterDockSequence.cs
+++ b/OpenRA.Mods.Cnc/Activities/HarvesterDockSequence.cs
@@ -11,10 +11,10 @@
using System;
using System.Collections.Generic;
using OpenRA.Mods.Common;
-using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Move;
using OpenRA.Mods.RA.Render;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.Cnc
diff --git a/OpenRA.Mods.Cnc/Traits/Buildings/TiberiumRefinery.cs b/OpenRA.Mods.Cnc/Traits/Buildings/TiberiumRefinery.cs
index bb8c982c57..283198c320 100644
--- a/OpenRA.Mods.Cnc/Traits/Buildings/TiberiumRefinery.cs
+++ b/OpenRA.Mods.Cnc/Traits/Buildings/TiberiumRefinery.cs
@@ -8,7 +8,7 @@
*/
#endregion
-using OpenRA.Mods.RA;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.Cnc.Traits
diff --git a/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs b/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs
index 84c32b65f6..42d89437ad 100644
--- a/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs
+++ b/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs
@@ -11,6 +11,7 @@
using System.Linq;
using OpenRA.Traits;
using OpenRA.Mods.RA;
+using OpenRA.Mods.RA.Traits;
using OpenRA.GameRules;
namespace OpenRA.Mods.Cnc.Traits
diff --git a/OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs b/OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
index d3770b257b..af795d9dd7 100644
--- a/OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
+++ b/OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
@@ -11,7 +11,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using OpenRA.Mods.RA;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.D2k.Traits
diff --git a/OpenRA.Mods.RA/AI/BaseBuilder.cs b/OpenRA.Mods.RA/AI/BaseBuilder.cs
index 52fd6b2bf9..42f84c957c 100644
--- a/OpenRA.Mods.RA/AI/BaseBuilder.cs
+++ b/OpenRA.Mods.RA/AI/BaseBuilder.cs
@@ -11,8 +11,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.Common.Power;
+using OpenRA.Mods.RA.Buildings;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.AI
diff --git a/OpenRA.Mods.RA/Activities/Attack.cs b/OpenRA.Mods.RA/Activities/Attack.cs
index 03b793987e..671436eb40 100755
--- a/OpenRA.Mods.RA/Activities/Attack.cs
+++ b/OpenRA.Mods.RA/Activities/Attack.cs
@@ -9,6 +9,7 @@
#endregion
using OpenRA.Mods.RA.Move;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
diff --git a/OpenRA.Mods.RA/Activities/DeliverResources.cs b/OpenRA.Mods.RA/Activities/DeliverResources.cs
index d1f39f503e..cd5b4e6926 100755
--- a/OpenRA.Mods.RA/Activities/DeliverResources.cs
+++ b/OpenRA.Mods.RA/Activities/DeliverResources.cs
@@ -10,6 +10,7 @@
using System.Drawing;
using OpenRA.Mods.Common;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
diff --git a/OpenRA.Mods.RA/Activities/FindResources.cs b/OpenRA.Mods.RA/Activities/FindResources.cs
index 2f3181f7a1..f966c45086 100755
--- a/OpenRA.Mods.RA/Activities/FindResources.cs
+++ b/OpenRA.Mods.RA/Activities/FindResources.cs
@@ -14,6 +14,7 @@ using System.Drawing;
using System.Linq;
using OpenRA.Mods.Common;
using OpenRA.Mods.RA.Move;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
diff --git a/OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs b/OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs
index 6e6c31eced..c879d052a4 100755
--- a/OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs
+++ b/OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs
@@ -12,6 +12,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.RA.Move;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
diff --git a/OpenRA.Mods.RA/Activities/RAHarvesterDockSequence.cs b/OpenRA.Mods.RA/Activities/RAHarvesterDockSequence.cs
index 3543f2f3f8..9a909c6db4 100644
--- a/OpenRA.Mods.RA/Activities/RAHarvesterDockSequence.cs
+++ b/OpenRA.Mods.RA/Activities/RAHarvesterDockSequence.cs
@@ -12,6 +12,7 @@ using System;
using System.Collections.Generic;
using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Render;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
diff --git a/OpenRA.Mods.RA/Activities/Repair.cs b/OpenRA.Mods.RA/Activities/Repair.cs
index c0f11f0068..0b76337cd3 100644
--- a/OpenRA.Mods.RA/Activities/Repair.cs
+++ b/OpenRA.Mods.RA/Activities/Repair.cs
@@ -10,6 +10,7 @@
using System;
using OpenRA.Mods.Common;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
diff --git a/OpenRA.Mods.RA/Activities/RepairBridge.cs b/OpenRA.Mods.RA/Activities/RepairBridge.cs
index 3b0aab74ba..8addd094a6 100644
--- a/OpenRA.Mods.RA/Activities/RepairBridge.cs
+++ b/OpenRA.Mods.RA/Activities/RepairBridge.cs
@@ -8,6 +8,7 @@
*/
#endregion
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
diff --git a/OpenRA.Mods.RA/Activities/UnloadCargo.cs b/OpenRA.Mods.RA/Activities/UnloadCargo.cs
index db3d3e0851..5b87f5c263 100644
--- a/OpenRA.Mods.RA/Activities/UnloadCargo.cs
+++ b/OpenRA.Mods.RA/Activities/UnloadCargo.cs
@@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Mods.RA.Move;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Buildings/LaysTerrain.cs b/OpenRA.Mods.RA/Buildings/LaysTerrain.cs
index bc58ad00d2..bc5cbc921c 100755
--- a/OpenRA.Mods.RA/Buildings/LaysTerrain.cs
+++ b/OpenRA.Mods.RA/Buildings/LaysTerrain.cs
@@ -9,6 +9,7 @@
#endregion
using System.Linq;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Buildings
diff --git a/OpenRA.Mods.RA/Buildings/Util.cs b/OpenRA.Mods.RA/Buildings/Util.cs
index 1d7a55a2ca..2fc491ab42 100644
--- a/OpenRA.Mods.RA/Buildings/Util.cs
+++ b/OpenRA.Mods.RA/Buildings/Util.cs
@@ -10,6 +10,7 @@
using System.Collections.Generic;
using System.Linq;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Buildings
diff --git a/OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs b/OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs
index f71fa2d28a..5df58c50e4 100644
--- a/OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs
+++ b/OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs
@@ -8,6 +8,7 @@
*/
#endregion
+using OpenRA.Mods.RA.Traits;
using System.Linq;
namespace OpenRA.Mods.RA.Crates
diff --git a/OpenRA.Mods.RA/Effects/GpsDot.cs b/OpenRA.Mods.RA/Effects/GpsDot.cs
index f6321740c3..883e2639ac 100644
--- a/OpenRA.Mods.RA/Effects/GpsDot.cs
+++ b/OpenRA.Mods.RA/Effects/GpsDot.cs
@@ -13,6 +13,7 @@ using System.Collections.Generic;
using OpenRA.Effects;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Move/PathFinder.cs b/OpenRA.Mods.RA/Move/PathFinder.cs
index a980745018..9a98a432c6 100644
--- a/OpenRA.Mods.RA/Move/PathFinder.cs
+++ b/OpenRA.Mods.RA/Move/PathFinder.cs
@@ -12,6 +12,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
+using OpenRA.Mods.RA.Traits;
using OpenRA;
using OpenRA.Primitives;
using OpenRA.Support;
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index 9f77b2cc82..6ee8043a70 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -152,9 +152,6 @@
-
-
-
@@ -174,7 +171,6 @@
-
@@ -197,17 +193,11 @@
-
-
-
-
-
-
@@ -217,7 +207,6 @@
-
@@ -226,7 +215,6 @@
-
@@ -241,7 +229,6 @@
-
@@ -274,8 +261,6 @@
-
-
@@ -295,12 +280,10 @@
-
-
-
+
@@ -309,6 +292,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -352,9 +359,7 @@
-
-
@@ -369,7 +374,6 @@
-
@@ -381,12 +385,9 @@
-
-
-
@@ -411,7 +412,6 @@
-
diff --git a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs
index 7dc09f5206..9659ca659b 100644
--- a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs
+++ b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs
@@ -13,9 +13,10 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common;
-using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.Common.Graphics;
+using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Render;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
using OpenRA.Primitives;
diff --git a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs
index 555d1dc91f..961b8de26f 100644
--- a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs
+++ b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs
@@ -13,6 +13,7 @@ using System.Linq;
using OpenRA.Mods.Common;
using OpenRA.Mods.Common.Power;
using OpenRA.Mods.RA.Buildings;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
diff --git a/OpenRA.Mods.RA/Player/HarvesterAttackNotifier.cs b/OpenRA.Mods.RA/Player/HarvesterAttackNotifier.cs
index ad51b3eff0..c05f2ff4ef 100644
--- a/OpenRA.Mods.RA/Player/HarvesterAttackNotifier.cs
+++ b/OpenRA.Mods.RA/Player/HarvesterAttackNotifier.cs
@@ -12,7 +12,7 @@ using System.Drawing;
using OpenRA.Mods.Common;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Plays an audio notification and shows a radar ping when a harvester is attacked.",
"Attach this to the player actor.")]
diff --git a/OpenRA.Mods.RA/Player/PlaceBuilding.cs b/OpenRA.Mods.RA/Player/PlaceBuilding.cs
index 8f68878db2..b9fd4d22c2 100644
--- a/OpenRA.Mods.RA/Player/PlaceBuilding.cs
+++ b/OpenRA.Mods.RA/Player/PlaceBuilding.cs
@@ -11,6 +11,7 @@
using System.Linq;
using OpenRA.Effects;
using OpenRA.Mods.RA.Buildings;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Production.cs b/OpenRA.Mods.RA/Production.cs
index c1295937c7..7cf9c224c1 100755
--- a/OpenRA.Mods.RA/Production.cs
+++ b/OpenRA.Mods.RA/Production.cs
@@ -13,6 +13,7 @@ using System.Drawing;
using System.Linq;
using OpenRA.Mods.Common;
using OpenRA.Mods.RA.Move;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Render/RenderHarvester.cs b/OpenRA.Mods.RA/Render/RenderHarvester.cs
index 1ae9ec1842..70fa7ed8d1 100644
--- a/OpenRA.Mods.RA/Render/RenderHarvester.cs
+++ b/OpenRA.Mods.RA/Render/RenderHarvester.cs
@@ -9,6 +9,7 @@
#endregion
using OpenRA.Graphics;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
using OpenRA.Mods.Common;
diff --git a/OpenRA.Mods.RA/Scripting/Properties/HarvesterProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/HarvesterProperties.cs
index 3bc19c8c49..4f27c8caf4 100644
--- a/OpenRA.Mods.RA/Scripting/Properties/HarvesterProperties.cs
+++ b/OpenRA.Mods.RA/Scripting/Properties/HarvesterProperties.cs
@@ -9,6 +9,7 @@
#endregion
using OpenRA.Scripting;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Scripting
diff --git a/OpenRA.Mods.RA/Scripting/Properties/ProductionProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/ProductionProperties.cs
index e2178ea603..5ecc494227 100644
--- a/OpenRA.Mods.RA/Scripting/Properties/ProductionProperties.cs
+++ b/OpenRA.Mods.RA/Scripting/Properties/ProductionProperties.cs
@@ -15,6 +15,7 @@ using System.Linq;
using OpenRA.Mods.Common;
using OpenRA.Mods.Common.Scripting;
using OpenRA.Mods.RA.Activities;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Scripting;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/SeedsResource.cs b/OpenRA.Mods.RA/SeedsResource.cs
index 6528127dca..242dae4115 100644
--- a/OpenRA.Mods.RA/SeedsResource.cs
+++ b/OpenRA.Mods.RA/SeedsResource.cs
@@ -15,7 +15,7 @@ using OpenRA.Mods.RA.Render;
using OpenRA.Support;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Lets the actor spread resources around it in a circle.")]
class SeedsResourceInfo : ITraitInfo
diff --git a/OpenRA.Mods.RA/AttackBomber.cs b/OpenRA.Mods.RA/Traits/Air/AttackBomber.cs
similarity index 98%
rename from OpenRA.Mods.RA/AttackBomber.cs
rename to OpenRA.Mods.RA/Traits/Air/AttackBomber.cs
index dd943e5fb9..8c4c84378c 100644
--- a/OpenRA.Mods.RA/AttackBomber.cs
+++ b/OpenRA.Mods.RA/Traits/Air/AttackBomber.cs
@@ -10,9 +10,10 @@
using System;
using System.Linq;
+using OpenRA.Mods.RA;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
class AttackBomberInfo : AttackBaseInfo
{
diff --git a/OpenRA.Mods.RA/BaseBuilding.cs b/OpenRA.Mods.RA/Traits/Buildings/BaseBuilding.cs
similarity index 94%
rename from OpenRA.Mods.RA/BaseBuilding.cs
rename to OpenRA.Mods.RA/Traits/Buildings/BaseBuilding.cs
index d9e13386c0..b44def9e1e 100644
--- a/OpenRA.Mods.RA/BaseBuilding.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/BaseBuilding.cs
@@ -10,7 +10,7 @@
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Tag trait for construction yard and MCVs. Used by the cycle bases hotkey to identify actors.")]
public class BaseBuildingInfo : TraitInfo { }
diff --git a/OpenRA.Mods.RA/Bridge.cs b/OpenRA.Mods.RA/Traits/Buildings/Bridge.cs
similarity index 99%
rename from OpenRA.Mods.RA/Bridge.cs
rename to OpenRA.Mods.RA/Traits/Buildings/Bridge.cs
index 206ce3bd5c..1470bc0a85 100644
--- a/OpenRA.Mods.RA/Bridge.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/Bridge.cs
@@ -18,7 +18,7 @@ using OpenRA.Mods.RA.Buildings;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
class BridgeInfo : ITraitInfo, Requires, Requires
{
diff --git a/OpenRA.Mods.RA/BridgeHut.cs b/OpenRA.Mods.RA/Traits/Buildings/BridgeHut.cs
similarity index 98%
rename from OpenRA.Mods.RA/BridgeHut.cs
rename to OpenRA.Mods.RA/Traits/Buildings/BridgeHut.cs
index 447ec5fc91..d89b1f7930 100644
--- a/OpenRA.Mods.RA/BridgeHut.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/BridgeHut.cs
@@ -12,7 +12,7 @@ using System;
using System.Linq;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Allows bridges to be targeted for demolition and repair.")]
class BridgeHutInfo : IDemolishableInfo, ITraitInfo
diff --git a/OpenRA.Mods.RA/Fake.cs b/OpenRA.Mods.RA/Traits/Buildings/Fake.cs
similarity index 94%
rename from OpenRA.Mods.RA/Fake.cs
rename to OpenRA.Mods.RA/Traits/Buildings/Fake.cs
index 1846e72a26..f7c7d629cb 100644
--- a/OpenRA.Mods.RA/Fake.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/Fake.cs
@@ -11,7 +11,7 @@
using System.Collections.Generic;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Display a sprite tag \"fake\" when selected.")]
class FakeInfo : TraitInfo { }
diff --git a/OpenRA.Mods.RA/FreeActor.cs b/OpenRA.Mods.RA/Traits/Buildings/FreeActor.cs
similarity index 98%
rename from OpenRA.Mods.RA/FreeActor.cs
rename to OpenRA.Mods.RA/Traits/Buildings/FreeActor.cs
index 66fdfde4cd..68a36e1dff 100644
--- a/OpenRA.Mods.RA/FreeActor.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/FreeActor.cs
@@ -11,7 +11,7 @@
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Player recives a unit for free once the building is placed. This also works for structures.",
"If you want more than one unit to appear copy this section and assign IDs like FreeActor@2, ...")]
diff --git a/OpenRA.Mods.RA/OreRefinery.cs b/OpenRA.Mods.RA/Traits/Buildings/OreRefinery.cs
similarity index 96%
rename from OpenRA.Mods.RA/OreRefinery.cs
rename to OpenRA.Mods.RA/Traits/Buildings/OreRefinery.cs
index 4c74090fbe..12e10feceb 100644
--- a/OpenRA.Mods.RA/OreRefinery.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/OreRefinery.cs
@@ -15,16 +15,18 @@ using OpenRA.Mods.Common.Effects;
using OpenRA.Mods.RA.Render;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
public class OreRefineryInfo : ITraitInfo
{
+ [Desc("Docking cell relative to top-left cell.")]
public readonly CVec DockOffset = new CVec(1, 2);
public readonly bool ShowTicks = true;
public readonly int TickLifetime = 30;
public readonly int TickVelocity = 2;
public readonly int TickRate = 10;
+ [Desc("Actually harvester facing when docking, 0-255 counter-clock-wise.")]
public readonly int DockAngle = 64;
public virtual object Create(ActorInitializer init) { return new OreRefinery(init.self, this); }
diff --git a/OpenRA.Mods.RA/PrimaryBuilding.cs b/OpenRA.Mods.RA/Traits/Buildings/PrimaryBuilding.cs
old mode 100755
new mode 100644
similarity index 98%
rename from OpenRA.Mods.RA/PrimaryBuilding.cs
rename to OpenRA.Mods.RA/Traits/Buildings/PrimaryBuilding.cs
index 53c654f094..a0e7124314
--- a/OpenRA.Mods.RA/PrimaryBuilding.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/PrimaryBuilding.cs
@@ -13,7 +13,7 @@ using System.Collections.Generic;
using OpenRA.Traits;
using OpenRA.Mods.Common.Orders;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
static class PrimaryExts
{
diff --git a/OpenRA.Mods.RA/RepairsUnits.cs b/OpenRA.Mods.RA/Traits/Buildings/RepairsUnits.cs
similarity index 95%
rename from OpenRA.Mods.RA/RepairsUnits.cs
rename to OpenRA.Mods.RA/Traits/Buildings/RepairsUnits.cs
index 726032bcf3..26a7f41428 100644
--- a/OpenRA.Mods.RA/RepairsUnits.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/RepairsUnits.cs
@@ -10,7 +10,7 @@
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
public class RepairsUnitsInfo : TraitInfo
{
diff --git a/OpenRA.Mods.RA/Reservable.cs b/OpenRA.Mods.RA/Traits/Buildings/Reservable.cs
old mode 100755
new mode 100644
similarity index 97%
rename from OpenRA.Mods.RA/Reservable.cs
rename to OpenRA.Mods.RA/Traits/Buildings/Reservable.cs
index 13deff87e3..5b869bd04f
--- a/OpenRA.Mods.RA/Reservable.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/Reservable.cs
@@ -9,11 +9,10 @@
#endregion
using System;
-using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Reserve landing places for aircraft.")]
class ReservableInfo : TraitInfo { }
diff --git a/OpenRA.Mods.RA/TargetableBuilding.cs b/OpenRA.Mods.RA/Traits/Buildings/TargetableBuilding.cs
old mode 100755
new mode 100644
similarity index 97%
rename from OpenRA.Mods.RA/TargetableBuilding.cs
rename to OpenRA.Mods.RA/Traits/Buildings/TargetableBuilding.cs
index 277d5b7b5b..f568aa3286
--- a/OpenRA.Mods.RA/TargetableBuilding.cs
+++ b/OpenRA.Mods.RA/Traits/Buildings/TargetableBuilding.cs
@@ -13,7 +13,7 @@ using System.Linq;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
public class TargetableBuildingInfo : ITraitInfo, ITargetableInfo, Requires
{
diff --git a/OpenRA.Mods.RA/Cloak.cs b/OpenRA.Mods.RA/Traits/Cloak.cs
similarity index 99%
rename from OpenRA.Mods.RA/Cloak.cs
rename to OpenRA.Mods.RA/Traits/Cloak.cs
index 186471bdda..859504536e 100644
--- a/OpenRA.Mods.RA/Cloak.cs
+++ b/OpenRA.Mods.RA/Traits/Cloak.cs
@@ -16,7 +16,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.Common;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("This unit can cloak and uncloak in specific situations.")]
public class CloakInfo : UpgradableTraitInfo, ITraitInfo
diff --git a/OpenRA.Mods.RA/Harvester.cs b/OpenRA.Mods.RA/Traits/Harvester.cs
similarity index 99%
rename from OpenRA.Mods.RA/Harvester.cs
rename to OpenRA.Mods.RA/Traits/Harvester.cs
index b5160885ce..0e47cfdd9e 100644
--- a/OpenRA.Mods.RA/Harvester.cs
+++ b/OpenRA.Mods.RA/Traits/Harvester.cs
@@ -17,7 +17,7 @@ using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Move;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
public class HarvesterInfo : ITraitInfo
{
diff --git a/OpenRA.Mods.RA/HarvesterHuskModifier.cs b/OpenRA.Mods.RA/Traits/HarvesterHuskModifier.cs
similarity index 94%
rename from OpenRA.Mods.RA/HarvesterHuskModifier.cs
rename to OpenRA.Mods.RA/Traits/HarvesterHuskModifier.cs
index 3ce63efd3f..45a3e1339c 100644
--- a/OpenRA.Mods.RA/HarvesterHuskModifier.cs
+++ b/OpenRA.Mods.RA/Traits/HarvesterHuskModifier.cs
@@ -8,9 +8,10 @@
*/
#endregion
+using OpenRA.Mods.RA;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
public class HarvesterHuskModifierInfo : ITraitInfo, Requires
{
diff --git a/OpenRA.Mods.RA/Husk.cs b/OpenRA.Mods.RA/Traits/Husk.cs
similarity index 99%
rename from OpenRA.Mods.RA/Husk.cs
rename to OpenRA.Mods.RA/Traits/Husk.cs
index 17f2481d63..0958b87b0b 100644
--- a/OpenRA.Mods.RA/Husk.cs
+++ b/OpenRA.Mods.RA/Traits/Husk.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.RA.Move;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Spawns remains of a husk actor with the correct facing.")]
class HuskInfo : ITraitInfo, IOccupySpaceInfo, IFacingInfo
diff --git a/OpenRA.Mods.RA/LeavesHusk.cs b/OpenRA.Mods.RA/Traits/LeavesHusk.cs
similarity index 98%
rename from OpenRA.Mods.RA/LeavesHusk.cs
rename to OpenRA.Mods.RA/Traits/LeavesHusk.cs
index b9524c3677..68c3bb17a3 100644
--- a/OpenRA.Mods.RA/LeavesHusk.cs
+++ b/OpenRA.Mods.RA/Traits/LeavesHusk.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.RA.Move;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Spawn another actor immediately upon death.")]
public class LeavesHuskInfo : ITraitInfo
diff --git a/OpenRA.Mods.RA/Modifiers/FrozenUnderFog.cs b/OpenRA.Mods.RA/Traits/Modifiers/FrozenUnderFog.cs
similarity index 99%
rename from OpenRA.Mods.RA/Modifiers/FrozenUnderFog.cs
rename to OpenRA.Mods.RA/Traits/Modifiers/FrozenUnderFog.cs
index d914d74fc0..f9e776f0c1 100644
--- a/OpenRA.Mods.RA/Modifiers/FrozenUnderFog.cs
+++ b/OpenRA.Mods.RA/Traits/Modifiers/FrozenUnderFog.cs
@@ -15,7 +15,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("This actor will remain visible (but not updated visually) under fog, once discovered.")]
public class FrozenUnderFogInfo : ITraitInfo, Requires
diff --git a/OpenRA.Mods.RA/RepairsBridges.cs b/OpenRA.Mods.RA/Traits/RepairsBridges.cs
similarity index 98%
rename from OpenRA.Mods.RA/RepairsBridges.cs
rename to OpenRA.Mods.RA/Traits/RepairsBridges.cs
index 631821668e..2d6fbaa349 100644
--- a/OpenRA.Mods.RA/RepairsBridges.cs
+++ b/OpenRA.Mods.RA/Traits/RepairsBridges.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.Common.Orders;
using OpenRA.Mods.RA.Activities;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Can enter a BridgeHut to trigger a repair.")]
class RepairsBridgesInfo : TraitInfo { }
diff --git a/OpenRA.Mods.RA/TargetableSubmarine.cs b/OpenRA.Mods.RA/Traits/TargetableSubmarine.cs
similarity index 96%
rename from OpenRA.Mods.RA/TargetableSubmarine.cs
rename to OpenRA.Mods.RA/Traits/TargetableSubmarine.cs
index 1e50223ae7..c01561a577 100644
--- a/OpenRA.Mods.RA/TargetableSubmarine.cs
+++ b/OpenRA.Mods.RA/Traits/TargetableSubmarine.cs
@@ -10,7 +10,7 @@
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
public class TargetableSubmarineInfo : TargetableUnitInfo, Requires
{
diff --git a/OpenRA.Mods.RA/TargetableUnit.cs b/OpenRA.Mods.RA/Traits/TargetableUnit.cs
old mode 100755
new mode 100644
similarity index 97%
rename from OpenRA.Mods.RA/TargetableUnit.cs
rename to OpenRA.Mods.RA/Traits/TargetableUnit.cs
index b4946169a2..54ffb359d6
--- a/OpenRA.Mods.RA/TargetableUnit.cs
+++ b/OpenRA.Mods.RA/Traits/TargetableUnit.cs
@@ -11,7 +11,7 @@
using System.Collections.Generic;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Actor can be targeted.")]
public class TargetableUnitInfo : ITraitInfo, ITargetableInfo
diff --git a/OpenRA.Mods.RA/BridgeLayer.cs b/OpenRA.Mods.RA/Traits/World/BridgeLayer.cs
similarity index 99%
rename from OpenRA.Mods.RA/BridgeLayer.cs
rename to OpenRA.Mods.RA/Traits/World/BridgeLayer.cs
index 62e3f1078e..15cdb8140f 100644
--- a/OpenRA.Mods.RA/BridgeLayer.cs
+++ b/OpenRA.Mods.RA/Traits/World/BridgeLayer.cs
@@ -14,7 +14,7 @@ using OpenRA.Graphics;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
class BridgeLayerInfo : ITraitInfo
{
diff --git a/OpenRA.Mods.RA/World/BuildableTerrainLayer.cs b/OpenRA.Mods.RA/Traits/World/BuildableTerrainLayer.cs
similarity index 98%
rename from OpenRA.Mods.RA/World/BuildableTerrainLayer.cs
rename to OpenRA.Mods.RA/Traits/World/BuildableTerrainLayer.cs
index 043dd62c21..e23515389a 100644
--- a/OpenRA.Mods.RA/World/BuildableTerrainLayer.cs
+++ b/OpenRA.Mods.RA/Traits/World/BuildableTerrainLayer.cs
@@ -12,7 +12,7 @@ using System.Collections.Generic;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Attach this to the world actor. Required for LaysTerrain to work.")]
public class BuildableTerrainLayerInfo : TraitInfo { }
diff --git a/OpenRA.Mods.RA/World/DomainIndex.cs b/OpenRA.Mods.RA/Traits/World/DomainIndex.cs
similarity index 99%
rename from OpenRA.Mods.RA/World/DomainIndex.cs
rename to OpenRA.Mods.RA/Traits/World/DomainIndex.cs
index cb5c6ba1f4..72b78899e2 100644
--- a/OpenRA.Mods.RA/World/DomainIndex.cs
+++ b/OpenRA.Mods.RA/Traits/World/DomainIndex.cs
@@ -17,7 +17,7 @@ using OpenRA.Mods.RA.Move;
using OpenRA.Traits;
using OpenRA.Support;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Identify untraversable regions of the map for faster pathfinding, especially with AI.",
"This trait is required. Every mod needs it attached to the world actor.")]
diff --git a/OpenRA.Mods.RA/World/PathfinderDebugOverlay.cs b/OpenRA.Mods.RA/Traits/World/PathfinderDebugOverlay.cs
similarity index 98%
rename from OpenRA.Mods.RA/World/PathfinderDebugOverlay.cs
rename to OpenRA.Mods.RA/Traits/World/PathfinderDebugOverlay.cs
index 3b4b43cc88..ebba5ab18c 100644
--- a/OpenRA.Mods.RA/World/PathfinderDebugOverlay.cs
+++ b/OpenRA.Mods.RA/Traits/World/PathfinderDebugOverlay.cs
@@ -16,7 +16,7 @@ using OpenRA.Graphics;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Required for the A* PathDebug from DeveloperMode. Attach this to the world actor.")]
class PathfinderDebugOverlayInfo : TraitInfo { }
diff --git a/OpenRA.Mods.RA/World/ResourceLayer.cs b/OpenRA.Mods.RA/Traits/World/ResourceLayer.cs
similarity index 99%
rename from OpenRA.Mods.RA/World/ResourceLayer.cs
rename to OpenRA.Mods.RA/Traits/World/ResourceLayer.cs
index c68f6ea95e..b8891b91b0 100644
--- a/OpenRA.Mods.RA/World/ResourceLayer.cs
+++ b/OpenRA.Mods.RA/Traits/World/ResourceLayer.cs
@@ -15,7 +15,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Attach this to the world actor.", "Order of the layers defines the Z sorting.")]
public class ResourceLayerInfo : TraitInfo, Requires { }
diff --git a/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs b/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs
index d80c01e04f..0f85697645 100644
--- a/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs
+++ b/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs
@@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Effects;
using OpenRA.GameRules;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
diff --git a/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs b/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs
index 07e64a288c..a1c7b9d7cb 100644
--- a/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs
+++ b/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs
@@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Effects;
using OpenRA.GameRules;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
diff --git a/OpenRA.Mods.RA/Widgets/Logic/DebugMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/DebugMenuLogic.cs
index 2e6cd763ff..f9fdd12fc5 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/DebugMenuLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/DebugMenuLogic.cs
@@ -10,6 +10,7 @@
using System;
using OpenRA.Support;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
using OpenRA.Widgets;
diff --git a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs
index 82f6c74e3f..d55ad543bd 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs
@@ -15,6 +15,7 @@ using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common;
using OpenRA.Mods.Common.Power;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Network;
using OpenRA.Traits;
using OpenRA.Widgets;
diff --git a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs
index 1d8136be8c..c7c46c7dec 100644
--- a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs
+++ b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs
@@ -13,6 +13,7 @@ using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Orders;
using OpenRA.Primitives;
using OpenRA.Widgets;
diff --git a/OpenRA.Mods.TS/Activities/VoxelHarvesterDockSequence.cs b/OpenRA.Mods.TS/Activities/VoxelHarvesterDockSequence.cs
index 7dc111b76f..7d6b85c9a9 100644
--- a/OpenRA.Mods.TS/Activities/VoxelHarvesterDockSequence.cs
+++ b/OpenRA.Mods.TS/Activities/VoxelHarvesterDockSequence.cs
@@ -10,10 +10,10 @@
using System;
using System.Collections.Generic;
-using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Move;
using OpenRA.Mods.RA.Render;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.TS
diff --git a/OpenRA.Mods.TS/Traits/Buildings/TiberianSunRefinery.cs b/OpenRA.Mods.TS/Traits/Buildings/TiberianSunRefinery.cs
index 9b9bafd8ae..e2c6ccd652 100644
--- a/OpenRA.Mods.TS/Traits/Buildings/TiberianSunRefinery.cs
+++ b/OpenRA.Mods.TS/Traits/Buildings/TiberianSunRefinery.cs
@@ -8,7 +8,7 @@
*/
#endregion
-using OpenRA.Mods.RA;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.TS.Traits