diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
index 99e297493d..b999883465 100644
--- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
+++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
@@ -203,6 +203,7 @@
+
diff --git a/OpenRA.Mods.Common/Scripting/Properties/CaptureProperties.cs b/OpenRA.Mods.Common/Scripting/Properties/CaptureProperties.cs
new file mode 100644
index 0000000000..66328f0c15
--- /dev/null
+++ b/OpenRA.Mods.Common/Scripting/Properties/CaptureProperties.cs
@@ -0,0 +1,47 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System.Linq;
+using Eluant;
+using OpenRA.Mods.Common.Activities;
+using OpenRA.Mods.Common.Traits;
+using OpenRA.Scripting;
+using OpenRA.Traits;
+
+namespace OpenRA.Mods.Common.Scripting
+{
+ [ScriptPropertyGroup("Ability")]
+ public class CaptureProperties : ScriptActorProperties
+ {
+ readonly CapturesInfo normalInfo;
+ readonly ExternalCapturesInfo externalInfo;
+
+ public CaptureProperties(ScriptContext context, Actor self)
+ : base(context, self)
+ {
+ normalInfo = Self.Info.Traits.GetOrDefault();
+ externalInfo = Self.Info.Traits.GetOrDefault();
+ }
+
+ [Desc("Captures the target actor.")]
+ public void Capture(Actor target)
+ {
+ var normalCapturable = target.Info.Traits.GetOrDefault();
+ var externalCapturable = target.Info.Traits.GetOrDefault();
+
+ if (normalInfo != null && normalCapturable != null && normalInfo.CaptureTypes.Contains(normalCapturable.Type))
+ Self.QueueActivity(new CaptureActor(Self, target));
+ else if (externalInfo != null && externalCapturable != null && externalInfo.CaptureTypes.Contains(externalCapturable.Type))
+ Self.QueueActivity(new ExternalCaptureActor(Self, Target.FromActor(target)));
+ else
+ throw new LuaException("Actor '{0}' cannot capture actor '{1}'!".F(Self, target));
+ }
+ }
+}