diff --git a/src/economy.test.c b/src/economy.test.c
index ba4a9da30..afbd1b25d 100644
--- a/src/economy.test.c
+++ b/src/economy.test.c
@@ -549,7 +549,7 @@ static void test_recruit(CuTest *tc) {
     CuAssertIntEquals(tc, 1, u->number);
     CuAssertIntEquals(tc, 1, f->num_people);
     CuAssertIntEquals(tc, 1, f->num_units);
-    add_recruits(u, 1, 1);
+    add_recruits(u, 1, 1, 1);
     CuAssertIntEquals(tc, 2, u->number);
     CuAssertIntEquals(tc, 2, f->num_people);
     CuAssertIntEquals(tc, 1, f->num_units);
@@ -557,9 +557,13 @@ static void test_recruit(CuTest *tc) {
     CuAssertPtrEquals(tc, NULL, u->nextF);
     CuAssertPtrEquals(tc, NULL, u->prevF);
     CuAssertPtrEquals(tc, NULL, test_find_messagetype(f->msgs, "recruit"));
-    add_recruits(u, 1, 2);
+    add_recruits(u, 1, 2, 2);
     CuAssertIntEquals(tc, 3, u->number);
     CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "recruit"));
+    test_clear_messages(f);
+    add_recruits(u, 1, 1, 2);
+    CuAssertIntEquals(tc, 4, u->number);
+    CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "recruit"));
     test_teardown();
 }
 
diff --git a/src/recruit.c b/src/recruit.c
index 2ad875114..10bff13b2 100644
--- a/src/recruit.c
+++ b/src/recruit.c
@@ -151,7 +151,7 @@ static recruitment *select_recruitment(recruit_request ** rop,
     return recruits;
 }
 
-void add_recruits(unit * u, int number, int wanted)
+void add_recruits(unit * u, int number, int wanted, int ordered)
 {
     region *r = u->region;
     assert(number <= wanted);
@@ -178,9 +178,9 @@ void add_recruits(unit * u, int number, int wanted)
             remove_unit(&r->units, unew);
         }
     }
-    if (number < wanted) {
+    if (number < ordered) {
         ADDMSG(&u->faction->msgs, msg_message("recruit",
-            "unit region amount want", u, r, number, wanted));
+            "unit region amount want", u, r, number, u->wants));
     }
 }
 
@@ -265,7 +265,7 @@ static int do_recruiting(recruitment * recruits, int available)
                 /* unit is empty, dead, and cannot recruit */
                 number = 0;
             }
-            add_recruits(u, number, req->qty);
+            add_recruits(u, number, req->qty, u->wants);
             if (number > 0) {
                 int dec = (int)(number * multi);
                 if ((rc->ec_flags & ECF_REC_ETHEREAL) == 0) {
@@ -406,6 +406,7 @@ static void recruit_cmd(unit * u, struct order *ord, recruit_request ** recruito
         }
     }
 
+    u->wants = n;
     if (recruitcost < 0) {
         rc = u_race(u);
         recruitcost = recruit_cost(f, rc);
@@ -452,7 +453,6 @@ static void recruit_cmd(unit * u, struct order *ord, recruit_request ** recruito
     }
 
     u_setrace(u, rc);
-    u->wants = n;
     o = (recruit_request *)calloc(1, sizeof(recruit_request));
     if (!o) abort();
     o->qty = n;
diff --git a/src/recruit.h b/src/recruit.h
index f5a9c9695..be01ca957 100644
--- a/src/recruit.h
+++ b/src/recruit.h
@@ -13,7 +13,7 @@ extern "C" {
     struct unit;
 
     struct message *can_recruit(struct unit *u, const struct race *rc, struct order *ord, int now);
-    void add_recruits(struct unit * u, int number, int wanted);
+    void add_recruits(struct unit* u, int number, int wanted, int ordered);
     void recruit(struct region * r);
 
 #ifdef __cplusplus