diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
index 2da8f3cf31..5530059d4a 100644
--- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
+++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
@@ -68,24 +68,24 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
diff --git a/OpenRA.Mods.D2k/DamagedWithoutFoundation.cs b/OpenRA.Mods.D2k/Traits/Buildings/DamagedWithoutFoundation.cs
similarity index 98%
rename from OpenRA.Mods.D2k/DamagedWithoutFoundation.cs
rename to OpenRA.Mods.D2k/Traits/Buildings/DamagedWithoutFoundation.cs
index 471280179c..58f7a0e2fb 100644
--- a/OpenRA.Mods.D2k/DamagedWithoutFoundation.cs
+++ b/OpenRA.Mods.D2k/Traits/Buildings/DamagedWithoutFoundation.cs
@@ -12,7 +12,7 @@ using System.Linq;
using OpenRA.GameRules;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Reduces health points over time when the actor is placed on unsafe terrain.")]
class DamagedWithoutFoundationInfo : ITraitInfo, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithBuildingPlacedOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithBuildingPlacedOverlay.cs
similarity index 98%
rename from OpenRA.Mods.D2k/Render/WithBuildingPlacedOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithBuildingPlacedOverlay.cs
index 54bf93bfb1..0c51d31c06 100644
--- a/OpenRA.Mods.D2k/Render/WithBuildingPlacedOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithBuildingPlacedOverlay.cs
@@ -13,7 +13,7 @@ using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Rendered when the actor constructed a building.")]
public class WithBuildingPlacedOverlayInfo : ITraitInfo, Requires, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs
similarity index 98%
rename from OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs
index c270d3d9be..ce49224c9e 100644
--- a/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Mods.RA;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Rendered together with the \"make\" animation.")]
public class WithCrumbleOverlayInfo : ITraitInfo, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithDeliveryOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs
similarity index 98%
rename from OpenRA.Mods.D2k/Render/WithDeliveryOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs
index 332daad28d..03c20f070d 100644
--- a/OpenRA.Mods.D2k/Render/WithDeliveryOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Rendered when ProductionAirdrop is in progress.")]
public class WithDeliveryOverlayInfo : ITraitInfo, Requires, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithDockingOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithDockingOverlay.cs
similarity index 98%
rename from OpenRA.Mods.D2k/Render/WithDockingOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithDockingOverlay.cs
index 9d467a03fe..a8a8a291b6 100644
--- a/OpenRA.Mods.D2k/Render/WithDockingOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithDockingOverlay.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Rendered when a harvester is docked.")]
public class WithDockingOverlayInfo : ITraitInfo, Requires, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithProductionOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithProductionOverlay.cs
similarity index 99%
rename from OpenRA.Mods.D2k/Render/WithProductionOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithProductionOverlay.cs
index a6e4a3761e..33ec45444e 100644
--- a/OpenRA.Mods.D2k/Render/WithProductionOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithProductionOverlay.cs
@@ -16,7 +16,7 @@ using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Renders an animation when the Production trait of the actor is activated.",
"Works both with per player ClassicProductionQueue and per building ProductionQueue, but needs any of these.")]
diff --git a/OpenRA.Mods.D2k/ThrowsShrapnel.cs b/OpenRA.Mods.D2k/Traits/ThrowsShrapnel.cs
similarity index 98%
rename from OpenRA.Mods.D2k/ThrowsShrapnel.cs
rename to OpenRA.Mods.D2k/Traits/ThrowsShrapnel.cs
index 624089e8c3..14aabae722 100644
--- a/OpenRA.Mods.D2k/ThrowsShrapnel.cs
+++ b/OpenRA.Mods.D2k/Traits/ThrowsShrapnel.cs
@@ -12,7 +12,7 @@ using System.Linq;
using OpenRA.GameRules;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Throws particles when the actor is destroyed that do damage on impact.")]
public class ThrowsShrapnelInfo : ITraitInfo
diff --git a/OpenRA.Mods.D2k/World/ChooseBuildTabOnSelect.cs b/OpenRA.Mods.D2k/Traits/World/ChooseBuildTabOnSelect.cs
similarity index 98%
rename from OpenRA.Mods.D2k/World/ChooseBuildTabOnSelect.cs
rename to OpenRA.Mods.D2k/Traits/World/ChooseBuildTabOnSelect.cs
index cd4c8ce9ea..8537910eb7 100644
--- a/OpenRA.Mods.D2k/World/ChooseBuildTabOnSelect.cs
+++ b/OpenRA.Mods.D2k/Traits/World/ChooseBuildTabOnSelect.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.RA;
using OpenRA.Traits;
using OpenRA.Widgets;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
class ChooseBuildTabOnSelectInfo : ITraitInfo
{
diff --git a/OpenRA.Mods.D2k/World/D2kResourceLayer.cs b/OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
similarity index 99%
rename from OpenRA.Mods.D2k/World/D2kResourceLayer.cs
rename to OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
index fbead559bb..d3770b257b 100644
--- a/OpenRA.Mods.D2k/World/D2kResourceLayer.cs
+++ b/OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
@@ -14,7 +14,7 @@ using System.Linq;
using OpenRA.Mods.RA;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Used to render spice with round borders.")]
public class D2kResourceLayerInfo : TraitInfo { }
diff --git a/OpenRA.Mods.D2k/World/FogPaletteFromR8.cs b/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs
similarity index 98%
rename from OpenRA.Mods.D2k/World/FogPaletteFromR8.cs
rename to OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs
index 7196303898..24225deaca 100644
--- a/OpenRA.Mods.D2k/World/FogPaletteFromR8.cs
+++ b/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs
@@ -13,7 +13,7 @@ using OpenRA.FileSystem;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
class FogPaletteFromR8Info : ITraitInfo
{
diff --git a/OpenRA.Mods.D2k/World/PaletteFromR8.cs b/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs
similarity index 97%
rename from OpenRA.Mods.D2k/World/PaletteFromR8.cs
rename to OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs
index d544747761..4b49a9c8f7 100644
--- a/OpenRA.Mods.D2k/World/PaletteFromR8.cs
+++ b/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs
@@ -13,7 +13,7 @@ using OpenRA.FileSystem;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
class PaletteFromR8Info : ITraitInfo
{
diff --git a/OpenRA.Mods.D2k/World/PaletteFromScaledPalette.cs b/OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs
similarity index 98%
rename from OpenRA.Mods.D2k/World/PaletteFromScaledPalette.cs
rename to OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs
index ab8a0e0da6..406fcc13b5 100644
--- a/OpenRA.Mods.D2k/World/PaletteFromScaledPalette.cs
+++ b/OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs
@@ -12,7 +12,7 @@ using System.Drawing;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Create a palette by applying a scale and offset to the colors in another palette.")]
class PaletteFromScaledPaletteInfo : ITraitInfo