Index: /IBBoard.WarFoundry.API/trunk/api/Commands/CreateAndAddUnitCommand.cs
===================================================================
--- /IBBoard.WarFoundry.API/trunk/api/Commands/CreateAndAddUnitCommand.cs	(revision 143)
+++ /IBBoard.WarFoundry.API/trunk/api/Commands/CreateAndAddUnitCommand.cs	(revision 146)
@@ -13,15 +13,15 @@
 	{
 		private UnitType addedUnitType;
-		private Army army;
+		private ArmyCategory armyCat;
 		private Unit addedUnit;
 		
-		public CreateAndAddUnitCommand(UnitType toAdd, Army armyTo)
+		public CreateAndAddUnitCommand(UnitType toAdd, ArmyCategory armyCatTo)
 		{
 			addedUnitType = toAdd;
-			army = armyTo;
+			armyCat = armyCatTo;
 		}
 
 		[Obsolete("Use two parameter constructor instead")]
-		public CreateAndAddUnitCommand(UnitType toAdd, ArmyCategory catTo, Army armyTo) : this(toAdd, armyTo)
+		public CreateAndAddUnitCommand(UnitType toAdd, ArmyCategory catTo, Army armyTo) : this(toAdd, catTo)
 		{
 		}
@@ -34,5 +34,5 @@
 		public override bool CanExecute()
 		{
-			return (addedUnitType!=null && army!=null);
+			return (addedUnitType!=null && armyCat!=null);
 		}
 
@@ -49,5 +49,5 @@
 		public override bool Execute()
 		{
-			addedUnit = new Unit(addedUnitType, army);
+			addedUnit = new Unit(addedUnitType, armyCat);
 			this.Redo();
 			return true;
@@ -56,10 +56,10 @@
 		public override void Redo()
 		{
-			army.AddUnit(addedUnit);
+			armyCat.AddUnit(addedUnit);
 		}
 
 		public override void Undo()
 		{
-			army.RemoveUnit(addedUnit);
+			armyCat.RemoveUnit(addedUnit);
 		}
 
Index: /IBBoard.WarFoundry.API/trunk/api/Objects/Unit.cs
===================================================================
--- /IBBoard.WarFoundry.API/trunk/api/Objects/Unit.cs	(revision 143)
+++ /IBBoard.WarFoundry.API/trunk/api/Objects/Unit.cs	(revision 146)
@@ -18,5 +18,4 @@
 		private UnitType type;
 		private int size;
-		private Army army;
 		private Unit parentUnit;
 		private double points;
@@ -28,9 +27,9 @@
 		public event DoubleValChangedDelegate UnitEquipmentAmountChanged;
 
-		public Unit(UnitType unitType, Army parentArmy) : this(unitType, unitType.MinSize, parentArmy){}
-
-		public Unit(UnitType unitType, int startSize, Army parentArmy)
-		{
-			Army = parentArmy;
+		public Unit(UnitType unitType, ArmyCategory parentArmyCat) : this(unitType, unitType.MinSize, parentArmyCat) { }
+
+		public Unit(UnitType unitType, int startSize, ArmyCategory parentArmyCat)
+		{
+			Category = parentArmyCat;
 			type = unitType;
 			Size = startSize;
@@ -144,14 +143,5 @@
 		public Army Army
 		{
-			get { return army; }
-			set 
-			{
-				army = value;
-
-				if (army == null)
-				{
-					Category = null;
-				}
-			}
+			get { return (Category == null ? null : Category.ParentArmy); }
 		}
 
@@ -163,21 +153,7 @@
 		public ArmyCategory Category
 		{
-			get 
-			{ 
-				if (cat==null)
-				{
-					if (Army!=null)
-					{
-						return Army.GetCategory(UnitType.MainCategory);
-					}
-					else
-					{
-						return null;
-					}
-				}
-				else
-				{
-					return cat; 
-				}
+			get
+			{
+				return cat;
 			}
 			set { cat = value; }
Index: /IBBoard.WarFoundry.API/trunk/api/Objects/ArmyCategory.cs
===================================================================
--- /IBBoard.WarFoundry.API/trunk/api/Objects/ArmyCategory.cs	(revision 143)
+++ /IBBoard.WarFoundry.API/trunk/api/Objects/ArmyCategory.cs	(revision 146)
@@ -23,4 +23,5 @@
 		public event ObjectAddDelegate UnitAdded;
 		public event ObjectRemoveDelegate UnitRemoved;
+		public event FailedUnitRequirementDelegate FailedRequirement;
 
 		public ArmyCategory(Army army, Category cat) : base()
@@ -75,14 +76,15 @@
 			unitTypes[unit.UnitType.ID] = (int)unitTypeCount + 1;
 			TotalPoints+= unit.PointsValue;
-			OnUnitAdded(unit);
+			OnUnitAdded(unit, failedReqs);
 		}
 
 		internal void RemoveUnit(Unit unit)
 		{
+			List<FailedUnitRequirement> failedReqs = ParentArmy.CanRemoveUnit(unit);
 			units.Remove(unit);
 			unitTypes[unit.UnitType.ID] = ((int)unitTypes[unit.UnitType.ID])-1;
 			TotalPoints-= unit.PointsValue;
 			unit.PointsValueChanged-= PointsValueChangedMethod;
-			OnUnitRemoved(unit);
+			OnUnitRemoved(unit, failedReqs);
 		}
 
@@ -126,17 +128,37 @@
 		}
 
-		private void OnUnitAdded(Unit unit)
+		protected void OnUnitAdded(Unit unit)
 		{
-			if (UnitAdded!=null)
+			OnUnitAdded(unit, null);
+		}
+
+		protected void OnUnitAdded(Unit unit, List<FailedUnitRequirement> failedReqs)
+		{
+			if (UnitAdded != null)
 			{
 				UnitAdded(unit);
 			}
+
+			if (FailedRequirement != null && failedReqs != null && failedReqs.Count > 0)
+			{
+				FailedRequirement(failedReqs);
+			}
 		}
 
-		private void OnUnitRemoved(Unit unit)
+		protected void OnUnitRemoved(Unit unit)
 		{
-			if (UnitRemoved!=null)
+			OnUnitRemoved(unit, null);
+		}
+
+		protected void OnUnitRemoved(Unit unit, List<FailedUnitRequirement> failedReqs)
+		{
+			if (UnitRemoved != null)
 			{
 				UnitRemoved(unit);
+			}
+
+			if (FailedRequirement != null && failedReqs != null && failedReqs.Count > 0)
+			{
+				FailedRequirement(failedReqs);
 			}
 		}
Index: /IBBoard.WarFoundry.API/trunk/api/Objects/Army.cs
===================================================================
--- /IBBoard.WarFoundry.API/trunk/api/Objects/Army.cs	(revision 143)
+++ /IBBoard.WarFoundry.API/trunk/api/Objects/Army.cs	(revision 146)
@@ -70,4 +70,5 @@
 						cat.UnitAdded+=new ObjectAddDelegate(Army_UnitAdded);
 						cat.UnitRemoved+=new ObjectRemoveDelegate(Army_UnitRemoved);
+						cat.FailedRequirement+=new FailedUnitRequirementDelegate(Army_FailedRequirement);
 					}
 				}
@@ -102,13 +103,10 @@
 		protected void OnUnitAdded(Unit unit, List<FailedUnitRequirement> failedReqs)
 		{
-			if (UnitAdded!=null)
+			if (UnitAdded != null)
 			{
 				UnitAdded(unit);
 			}
 
-			if (FailedRequirement!=null && failedReqs!=null && failedReqs.Count > 0)
-			{
-				FailedRequirement(failedReqs);
-			}
+			OnFailedRequirement(failedReqs);
 		}
 
@@ -125,5 +123,10 @@
 			}
 
-			if (FailedRequirement!=null && failedReqs!=null && failedReqs.Count > 0)
+			OnFailedRequirement(failedReqs);
+		}
+
+		protected void OnFailedRequirement(List<FailedUnitRequirement> failedReqs)
+		{
+			if (FailedRequirement != null && failedReqs != null && failedReqs.Count > 0)
 			{
 				FailedRequirement(failedReqs);
@@ -161,5 +164,4 @@
 		public void AddUnit(Unit unit)
 		{
-			unit.Army = this;
 			ArmyCategory armyCat = GetCategory(unit.UnitType.MainCategory);
 			armyCat.AddUnit(unit);
@@ -168,8 +170,5 @@
 		public void RemoveUnit(Unit unit)
 		{
-			List<FailedUnitRequirement> failedReqs = CanRemoveUnit(unit);
-			unit.Army = null;
 			unit.Category.RemoveUnit(unit);
-			OnUnitRemoved(unit, failedReqs);
 		}
 
@@ -255,12 +254,17 @@
 		}
 
-		private void Army_UnitAdded(object val)
+		private void Army_UnitAdded(WarFoundryObject val)
 		{
 			OnUnitAdded((Unit)val);
 		}
 
-		private void Army_UnitRemoved(object val)
+		private void Army_UnitRemoved(WarFoundryObject val)
 		{
 			OnUnitRemoved((Unit)val);
+		}
+
+		private void Army_FailedRequirement(List<FailedUnitRequirement> val)
+		{
+			OnFailedRequirement(val);
 		}
 	}
