diff --git a/p/daemon/channel.h b/p/daemon/channel.h
index 26e4d0e..781d551 100644
--- a/p/daemon/channel.h
+++ b/p/daemon/channel.h
@@ -37,7 +37,7 @@
 #define I_MEMBER          0
 #define I_ACCESS          1
 #define I_INFO            2
-#define I_MASTER          3
+#define I_SUPERVISOR      3
 #define I_NAME            4
 
 #endif //__DAEMON_CHANNEL_H__
diff --git a/p/daemon/channeld.c b/p/daemon/channeld.c
index 1e41b81..d1a2f0f 100644
--- a/p/daemon/channeld.c
+++ b/p/daemon/channeld.c
@@ -32,7 +32,7 @@
    channels = ([string channelname : ({ ({object* members}),
                                           closure access_rights,
                                           string channel_desc,
-                                          string|object master_object,
+                                          string|object supervisor,
                                           string readable_channelname }) ])
  The master_object is also called the supervisor.
  */
@@ -439,11 +439,11 @@
 // setup() -- set up a channel and register it
 //            arguments are stored in the following order:
 //            string* chinfo = ({ channel_name, receive_level, send_level,
-//                                flags, description, masterobj })
+//                                flags, description, supervisor })
 private void setup(string* chinfo)
 {
   string desc = "- Keine Beschreibung -";
-  object chmaster = this_object();
+  object supervisor = this_object();
 
   if (sizeof(chinfo) && sizeof(chinfo[0]) > 1 && chinfo[0][0] == '\\')
     chinfo[0] = chinfo[0][1..];
@@ -453,9 +453,9 @@
     // Alle Fallthroughs in dem switch() sind Absicht.
     case 6:
       if (stringp(chinfo[5]) && sizeof(chinfo[5]))
-        catch(chmaster = load_object(chinfo[5]); publish);
-      if (!objectp(chmaster))
-        chmaster = this_object();
+        catch(supervisor = load_object(chinfo[5]); publish);
+      if (!objectp(supervisor))
+        supervisor = this_object();
 
     case 5:
       if (stringp(chinfo[4]) || closurep(chinfo[4]))
@@ -477,10 +477,10 @@
       return;
   }
 
-  if (new(chinfo[0], chmaster, desc) == E_ACCESS_DENIED)
+  if (new(chinfo[0], supervisor, desc) == E_ACCESS_DENIED)
   {
     log_file("CHANNEL", sprintf("[%s] %s: %O: error, access denied\n",
-      dtime(time()), chinfo[0], chmaster));
+      dtime(time()), chinfo[0], supervisor));
   }
   return;
 }
@@ -613,7 +613,7 @@
 }
 
 #define CHAN_NAME(x) channels[x][I_NAME]
-#define MASTER_OB(x) channels[x][I_MASTER]
+#define SVISOR_OB(x) channels[x][I_SUPERVISOR]
 #define ACC_CLOSURE(x) channels[x][I_ACCESS]
 
 // Stellt sicher, dass einen Ebenen-Supervisor gibt. Wenn dies nicht moeglich
@@ -628,12 +628,12 @@
   {
     // Wenn der Ebenenbesitzer als String eingetragen ist, versuchen wir,
     // die Closure wiederherzustellen. Dabei wird das Objekt gleichzeitig
-    // neugeladen.
-    if (stringp(MASTER_OB(ch)))
+    // neugeladen und eingetragen.
+    if (stringp(SVISOR_OB(ch)))
     {
       closure new_acc_cl;
       string err = catch(new_acc_cl=
-                          symbol_function("check_ch_access", MASTER_OB(ch));
+                          symbol_function("check_ch_access", SVISOR_OB(ch));
                           publish);
       /* Wenn das SV-Objekt neu geladen werden konnte, wird es als Mitglied
        * eingetragen. Auch die Closure wird neu eingetragen, allerdings kann
@@ -647,13 +647,13 @@
         // erfolgt keine Pruefung des Zugriffsrechtes (ist ja unsinnig, weil
         // er sich ja selber genehmigen koennte), und auch um eine Rekursion
         // zu vermeiden.
-        add_member(ch, find_object(MASTER_OB(ch)));
+        add_member(ch, find_object(SVISOR_OB(ch)));
         // Rueckgabewert ist 1, ein neues SV-Objekt ist eingetragen.
       }
       else
       {
         log_file("CHANNEL", sprintf("[%s] Channel deleted. %O -> %O\n",
-                  dtime(time()), MASTER_OB(ch), err));
+                  dtime(time()), SVISOR_OB(ch), err));
         m_delete(channels, ch);
         return 0;
       }
@@ -664,6 +664,7 @@
       // werden. Wir nehmen das aelteste Mitglied der Ebene.
       // TODO: kaputte Objekte raussortieren, neuen Master bestimmen, wenn
       // dieser nicht mehr existiert.
+
     }
   }
   return 1;
@@ -717,7 +718,7 @@
   // nicht beliebige SV-Objekt EMs den Zugriff verweigern koennen. Ebenen mit
   // CHANNELD als SV koennen aber natuerlich auch EM+ Zugriff verweigern.
   if (IS_ARCH(previous_object(1))
-      && find_object(MASTER_OB(ch)) != this_object())
+      && find_object(SVISOR_OB(ch)) != this_object())
     return 1;
 
   return funcall(ACC_CLOSURE(ch), ch, pl, cmd, &txt);
@@ -857,9 +858,9 @@
 
   // Kontrolle an jemand anderen uebergeben, wenn der Ebenenbesitzer diese
   // verlaesst.
-  if (pl == channels[ch][I_MASTER] && sizeof(channels[ch][I_MEMBER]) > 1)
+  if (pl == channels[ch][I_SUPERVISOR] && sizeof(channels[ch][I_MEMBER]) > 1)
   {
-    channels[ch][I_MASTER] = channels[ch][I_MEMBER][1];
+    channels[ch][I_SUPERVISOR] = channels[ch][I_MEMBER][1];
 
     if (!pl->QueryProp(P_INVIS))
     {
@@ -870,7 +871,7 @@
       // Caller-Stack bei dem internen Aufruf denselben Aufbau hat wie bei
       // einem externen.
       this_object()->send(ch, pl, "uebergibt die Ebene an " +
-        channels[ch][I_MASTER]->name(WEN) + ".", MSG_EMOTE);
+        channels[ch][I_SUPERVISOR]->name(WEN) + ".", MSG_EMOTE);
     }
   }
   channels[ch][I_MEMBER] -= ({pl});
@@ -879,7 +880,7 @@
   // existiert.
   // Wenn Spieler, NPC, Clone oder Channeld als letztes die Ebene verlassen,
   // wird diese zerstoert, mit Meldung.
-  if (!sizeof(channels[ch][I_MEMBER]) && !stringp(channels[ch][I_MASTER]))
+  if (!sizeof(channels[ch][I_MEMBER]) && !stringp(channels[ch][I_SUPERVISOR]))
   {
     // Der Letzte macht das Licht aus, aber nur, wenn er nicht unsichtbar ist.
     if (!pl->QueryProp(P_INVIS))
diff --git a/p/daemon/channeld.init b/p/daemon/channeld.init
index f099d2d..f5e5586 100644
--- a/p/daemon/channeld.init
+++ b/p/daemon/channeld.init
@@ -1,6 +1,6 @@
 # CHANNEL MASTER INIT FILE
 # To create a new channel:
-# <name>:<recv>:<send>:<flags>:<info>:<master>
+# <name>:<recv>:<send>:<accessflags>:<info>:<supervisor>
 Allgemein:   0: 0: 0:Allgemeine Unterhaltungsebene
 Abenteuer:   0: 0: 0:Fragen die Abenteuer betreffen:	/secure/questmaster
 Grats:	     0: 0: 0:Gratulationen zu geloesten Abenteuern etc
diff --git a/p/daemon/channeld.init.testmud b/p/daemon/channeld.init.testmud
index 1dbc6ea..b424337 100644
--- a/p/daemon/channeld.init.testmud
+++ b/p/daemon/channeld.init.testmud
@@ -1,3 +1,7 @@
+# CHANNEL MASTER INIT FILE
+# To create a new channel:
+# <name>:<recv>:<send>:<accessflags>:<info>:<supervisor>
+#
 # Debug-Ebenen initialisieren.
 Debug:      20:60: 1:Debug und Fehlermeldungen:		/p/daemon/debug
 Entwicklung: 20:60:1:Fehler rund um Eigenentwicklungen: /p/daemon/debug
