diff --git a/p/service/padreic/mnpc/moving.c b/p/service/padreic/mnpc/moving.c
index 46c0a4b..f9eb697 100644
--- a/p/service/padreic/mnpc/moving.c
+++ b/p/service/padreic/mnpc/moving.c
@@ -46,8 +46,8 @@
   }
   else
   {
-    if (find_call_out("Walk") == -1)
-      call_out("Walk", QueryProp(MNPC_DELAY)+random(QueryProp(MNPC_RANDOM)));
+    if (find_call_out("CheckWalk") == -1)
+      call_out("CheckWalk", QueryProp(MNPC_DELAY)+random(QueryProp(MNPC_RANDOM)));
   }
 }
 
@@ -64,7 +64,7 @@
     // Falls MNPC noch registriert ist oder noch einen Callout auf Walk hat,
     // muss nichts weiter gemacht werden.
     if (WALK_MASTER->Registration()
-        || find_call_out("Walk") > -1)
+        || find_call_out("CheckWalk") > -1)
       return -1;
     // ansonsten MNPC registrieren, falls geeignet.
     if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM))<MAX_MASTER_TIME)
@@ -72,7 +72,7 @@
     // und mit kurzer Verzoegerung einmal laufen. (ja, absicht, hier
     // MNPC_DELAY zu nutzen - denn solange dauert das Walk vom Master
     // mindestens.)
-    call_out("Walk",1+random( min(QueryProp(MNPC_DELAY)-1,8) ));
+    call_out("CheckWalk",1+random( min(QueryProp(MNPC_DELAY)-1,8) ));
     return 1;
   }
   return 0;
@@ -82,8 +82,8 @@
 {
   if (WALK_MASTER->Registration())
     WALK_MASTER->RemoveWalker();
-  else if (find_call_out("Walk")!=-1)
-    remove_call_out("Walk");
+  else if (find_call_out("CheckWalk")!=-1)
+    remove_call_out("CheckWalk");
   if (movehome)
   {
     move(QueryProp(MNPC_HOME), M_TPORT|M_NOCHECK);
@@ -328,40 +328,10 @@
   return res;
 }
 
+// Koennte eigentlich auch void sein, aber fuer die Abwaertskompatibilitaet
+// wird int gebraucht.
 int Walk()
 {
-  if (!environment())
-  {
-    // darf eigentlich nicht vorkommen.
-    raise_error("MNPC ohne Environment.\n");
-  }
-
-  int flags=QueryProp(MNPC_FLAGS);
-  if (!(flags & MNPC_WALK))
-    return 0;
-
-  //ggf. neuen Callout eintragen, bevor irgendwas anderes gemacht wird.
-  if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM))>=MAX_MASTER_TIME)
-    call_out("Walk", QueryProp(MNPC_DELAY)+random(QueryProp(MNPC_RANDOM)));
-
-  // Im Kampf ggf. nicht weitergehen.
-  if ((flags & MNPC_NO_WALK_IN_FIGHT) && InFight())
-  {
-    meet_last_player=time();
-    return 1;
-  }
-
-  // MNPC anhalten, wenn lange kein Spielerkontakt
-  if (QueryProp(MNPC_WALK_TIME)+meet_last_player < time()
-      && !sizeof(filter(all_inventory(environment()),
-                 #'query_once_interactive))
-      )
-  {
-    // anhalten und ggf. auch direkt nach Hause gehen.
-    Stop(flags & MNPC_GO_HOME_WHEN_STOPPED);
-    return 0;
-  }
-
   // Ausgaenge ermitteln, zunaechst aber keine Special Exits.
   mapping exits = (environment()->QueryProp(P_EXITS));
   string *rooms = m_values(exits);
@@ -376,6 +346,7 @@
       ex += ({ dirs[i] });
   }
   /* Hier muessen wir auf die Zuverlaessigkeit unserer Magier bauen ... */
+  int flags=QueryProp(MNPC_FLAGS);
   if (flags & MNPC_DIRECT_MOVE)
   {
     // im direct mode keine SEs benutzbar...
@@ -417,6 +388,44 @@
       move(QueryProp(MNPC_HOME), M_TPORT|M_NOCHECK);
     }
   }
+  return 1;
+}
+
+int CheckWalk()
+{
+  if (!environment())
+  {
+    // darf eigentlich nicht vorkommen.
+    raise_error("MNPC ohne Environment.\n");
+  }
+
+  int flags=QueryProp(MNPC_FLAGS);
+  if (!(flags & MNPC_WALK))
+    return 0;
+
+  //ggf. neuen Callout eintragen, bevor irgendwas anderes gemacht wird.
+  if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM))>=MAX_MASTER_TIME)
+    call_out("CheckWalk", QueryProp(MNPC_DELAY)+random(QueryProp(MNPC_RANDOM)));
+
+  // Im Kampf ggf. nicht weitergehen.
+  if ((flags & MNPC_NO_WALK_IN_FIGHT) && InFight())
+  {
+    meet_last_player=time();
+    return 1;
+  }
+
+  // MNPC anhalten, wenn lange kein Spielerkontakt
+  if (QueryProp(MNPC_WALK_TIME)+meet_last_player < time()
+      && !sizeof(filter(all_inventory(environment()),
+                 #'query_once_interactive))
+      )
+  {
+    // anhalten und ggf. auch direkt nach Hause gehen.
+    Stop(flags & MNPC_GO_HOME_WHEN_STOPPED);
+    return 0;
+  }
+
+  Walk();
 
   return 1;
 }
diff --git a/p/service/padreic/mnpc/walk_master.c b/p/service/padreic/mnpc/walk_master.c
index 58aecf3..688c1b7 100644
--- a/p/service/padreic/mnpc/walk_master.c
+++ b/p/service/padreic/mnpc/walk_master.c
@@ -78,7 +78,7 @@
   closure func = walk_closure;
   if (!closurep(func))
   {
-    func=symbol_function("Walk", previous_object());
+    func=symbol_function("CheckWalk", previous_object());
     if (!func)
       raise_error("RegisterWalker() call from Object without Walk() function.\n");
   }
