diff --git a/src/common/kernel/kernel.vcproj b/src/common/kernel/kernel.vcproj
index d463de41a..e5e97aac7 100644
--- a/src/common/kernel/kernel.vcproj
+++ b/src/common/kernel/kernel.vcproj
@@ -218,9 +218,6 @@
-
-
diff --git a/src/common/kernel/movement.c b/src/common/kernel/movement.c
index 3857c0712..5b7c2449f 100644
--- a/src/common/kernel/movement.c
+++ b/src/common/kernel/movement.c
@@ -2130,39 +2130,49 @@ move_hunters(void)
region *r;
for (r = regions; r; r = r->next) {
- unit * u;
- for (u = r->units; u;) {
- unit *u2 = u->next;
- order * ord;
- param_t p;
+ unit ** up = &r->units, * u;
+ for (u=r->units; u; u=u->next) freset(u, FL_DH);
- for (ord=u->orders;ord;ord=ord->next) {
- if (get_keyword(ord) == K_FOLLOW) {
- if (attacked(u)) {
- cmistake(u, ord, 52, MSG_MOVE);
- break;
- } else if (!can_move(u)) {
- cmistake(u, ord, 55, MSG_MOVE);
- break;
- }
+ while (*up!=NULL) {
+ unit * u = *up;
- init_tokens(ord);
- skip_token();
- p = getparam(u->faction->locale);
- if (p != P_SHIP) {
- if (p != P_UNIT) {
- cmistake(u, ord, 240, MSG_MOVE);
+ if (!fval(u, FL_DH)) {
+ order * ord;
+
+ fset(u, FL_DH);
+
+ for (ord=u->orders;ord;ord=ord->next) {
+ if (get_keyword(ord) == K_FOLLOW) {
+ param_t p;
+
+ init_tokens(ord);
+ skip_token();
+ p = getparam(u->faction->locale);
+ if (p != P_SHIP) {
+ if (p != P_UNIT) {
+ cmistake(u, ord, 240, MSG_MOVE);
+ }
+ break;
}
- break;
- }
- if (!fval(u, UFL_LONGACTION) && !fval(u, UFL_HUNGER) && hunt(u)) {
- u2 = r->units;
- break;
+ /* wir folgen definitiv einem Schiff. */
+
+ if (fval(u, UFL_LONGACTION)) {
+ cmistake(u, ord, 52, MSG_MOVE);
+ break;
+ } else if (!can_move(u)) {
+ cmistake(u, ord, 55, MSG_MOVE);
+ break;
+ }
+
+ if (!fval(u, UFL_LONGACTION) && !fval(u, UFL_HUNGER) && hunt(u)) {
+ up = &r->units;
+ break;
+ }
}
}
}
- u = u2;
+ if (*up==u) up=&u->next;
}
}
}