diff --git a/OpenRA.Mods.RA/Crates/ExplodeCrateAction.cs b/OpenRA.Mods.RA/Crates/ExplodeCrateAction.cs
new file mode 100644
index 0000000000..6bd2eece05
--- /dev/null
+++ b/OpenRA.Mods.RA/Crates/ExplodeCrateAction.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using OpenRA.Traits;
+using OpenRA.Effects;
+
+namespace OpenRA.Mods.RA.Crates
+{
+ class ExplodeCrateActionInfo : ITraitInfo
+ {
+ public string Weapon = null;
+ public int SelectionShares = 5;
+
+ public object Create(Actor self) { return new ExplodeCrateAction(self, this); }
+ }
+
+ class ExplodeCrateAction : ICrateAction
+ {
+ Actor self;
+ ExplodeCrateActionInfo info;
+
+ public ExplodeCrateAction(Actor self, ExplodeCrateActionInfo info)
+ {
+ this.self = self;
+ }
+
+ public int SelectionShares
+ {
+ get { return info.SelectionShares; }
+ }
+
+ public void Activate(Actor collector)
+ {
+ self.World.AddFrameEndTask(
+ w => w.Add(new Bullet(info.Weapon, self.Owner,
+ self, self.CenterLocation.ToInt2(), self.CenterLocation.ToInt2(),
+ 0, 0)));
+ }
+ }
+}
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index 796b5cf958..2f3c1499ef 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -53,6 +53,7 @@
+