diff --git a/std/container.c b/std/container.c
index a77c7fa..ff47d35 100644
--- a/std/container.c
+++ b/std/container.c
@@ -52,14 +52,6 @@
   set_next_reset(-1);
 }
 
-/*
-void init() 
-{
-  commands::init();
-  description::init();
-}
-*/
-
 void reset()
 {
   items::reset();
diff --git a/std/food.c b/std/food.c
index d5b40b6..986aedb 100644
--- a/std/food.c
+++ b/std/food.c
@@ -331,8 +331,8 @@
 }
 
 // hier wird geprueft, ob das Futter dem Spieler zugaenglich ist.
-void init() {
-  ::init();
+public varargs void init(object origin) {
+  ::init(origin);
   check_start_timer(environment());
 }
 
diff --git a/std/gilde.c b/std/gilde.c
index de2097c..de82122 100644
--- a/std/gilde.c
+++ b/std/gilde.c
@@ -18,8 +18,8 @@
   gilde::create();
 }
 
-void init()
+public varargs void init(object origin)
 {
-  room::init();
-  gilde::init();
+  room::init(origin);
+  gilde::init(origin);
 }
diff --git a/std/inpc.c b/std/inpc.c
index 63edd67..f748969 100644
--- a/std/inpc.c
+++ b/std/inpc.c
@@ -39,8 +39,8 @@
   items::reset();
 }
 
-void init() {
-  npc::init();
+public varargs void init(object origin) {
+  npc::init(origin);
   if (TP && query_once_interactive(TP))
     SetProp(P_INPC_LAST_PLAYER_CONTACT,time());
 }
diff --git a/std/items/fishing/fish.c b/std/items/fishing/fish.c
index fd116d8..9dc0e8a 100644
--- a/std/items/fishing/fish.c
+++ b/std/items/fishing/fish.c
@@ -107,8 +107,8 @@
   return tmp;
 }
 
-void init() {
-  ::init();
+public varargs void init(object origin) {
+  ::init(origin);
   if( QueryProp(P_FISH)&F_REPLACE ) {
     if(query_once_interactive(environment(ME))) {
       call_out("ReplaceFish",0);
diff --git a/std/newsclient.c b/std/newsclient.c
index b047e41..8dc359f 100644
--- a/std/newsclient.c
+++ b/std/newsclient.c
@@ -53,9 +53,9 @@
   return thing::remove();
 }
 
-void init()
+public varargs void init(object origin)
 {
-  thing::init();
+  thing::init(origin);
   add_action("schreib","schreib",1);
   add_action("lies","lies");
   add_action("loesche","loesch",1);
diff --git a/std/npc.c b/std/npc.c
index a6d9ce6..5f4faf1 100644
--- a/std/npc.c
+++ b/std/npc.c
@@ -150,12 +150,12 @@
 // Force the monster to do a command.
 int command_me(string cmd) { return command(cmd); }
 
-void init()
+public varargs void init(object origin)
 {
-  combat::init();
-  info::init();
-  commands::init();
-//  description::init();
+  combat::init(origin);
+  info::init(origin);
+  commands::init(origin);
+//  description::init(origin);
 }
 
 // items initialisieren?
diff --git a/std/npc/combat.c b/std/npc/combat.c
index d4dca90..0a489c1 100644
--- a/std/npc/combat.c
+++ b/std/npc/combat.c
@@ -475,8 +475,8 @@
   }
 }
 
-void init() {
-
+public varargs void init(object origin)
+{
   // ggf. Heartbeats nachholen und wieder einschalten.
   if (!heartbeat) {
     set_heart_beat(1);
diff --git a/std/npc/info.c b/std/npc/info.c
index 2eb6942..9db7221 100644
--- a/std/npc/info.c
+++ b/std/npc/info.c
@@ -82,7 +82,8 @@
 }
 
 
-void init() {
+public varargs void init(object origin)
+{
   add_action( "frage", "frag", 1 );
 }
 
diff --git a/std/room.c b/std/room.c
index 7047f2b..d87c0fd 100644
--- a/std/room.c
+++ b/std/room.c
@@ -205,16 +205,15 @@
   return 1;
 }
 
-void
-init()
+public varargs void init(object origin)
 {
   if (HookFlow(H_HOOK_INIT, 0)[H_RETCODE] == H_CANCELLED)
       return;
   Set(" clean counter ",2);
-  exits::init();
-  commands::init();
-  description::init();
-  doors::init();
+  exits::init(origin);
+  commands::init(origin);
+  description::init(origin);
+  doors::init(origin);
 
   add_action("toggle_exits", "exits");
   add_action("toggle_exits", "ausgang");
diff --git a/std/room/commands.c b/std/room/commands.c
index 5aa75c3..bb4a293 100644
--- a/std/room/commands.c
+++ b/std/room/commands.c
@@ -20,9 +20,9 @@
 #include <language.h>
 #include <defines.h>
 
-void init() 
+public varargs void init(object origin)
 {
-  ::init();
+  ::init(origin);
 
   add_action("imposs", "such");
   add_action("imposs", "suche");
diff --git a/std/room/description.c b/std/room/description.c
index 1af1520..47390e4 100644
--- a/std/room/description.c
+++ b/std/room/description.c
@@ -32,7 +32,7 @@
   AddId(({"raum", "hier"}));
 }
 
-void init()
+public varargs void init(object origin)
 {
   // Wenn P_ROOM_MSG gesetzt oder P_FUNC_MSG und kein Callout laeuft,
   // Callout starten.
diff --git a/std/room/doors.c b/std/room/doors.c
index e05f009..d9eded0 100644
--- a/std/room/doors.c
+++ b/std/room/doors.c
@@ -81,7 +81,7 @@
   return call_other(DOOR_MASTER,"NewDoor",cmds,dest,ids,props);
 }
 
-void init()
+public varargs void init(object origin)
 {
   mixed *info;
   string *cmds;
diff --git a/std/room/exits.c b/std/room/exits.c
index 45617ce..b5c352b 100644
--- a/std/room/exits.c
+++ b/std/room/exits.c
@@ -241,7 +241,7 @@
 
 // Richtungsbefehle nur interpretieren, wenn der Spieler *im* Raum steht und
 // nicht davor (Transporter etc.)/o
-void init()
+public varargs void init(object origin)
 {
     if ( environment(this_player()) == this_object() )
         add_action( "_normalfunction", "", 1 );
diff --git a/std/room/gilde.c b/std/room/gilde.c
index 55e87ca..471b62d 100644
--- a/std/room/gilde.c
+++ b/std/room/gilde.c
@@ -102,7 +102,7 @@
   AddCmd(({"treff"}), "GotoMagierTreff");
  }
 
-void init()
+public varargs void init(object origin)
 {
   int lvl;
 
diff --git a/std/thing/commands.c b/std/thing/commands.c
index 767e7ed..8f93449 100644
--- a/std/thing/commands.c
+++ b/std/thing/commands.c
@@ -631,7 +631,7 @@
  return 0;
 }
 
-void init() {
+public varargs void init(object origin) {
  add_action("_cl","",1);
 }
 
diff --git a/std/transport.c b/std/transport.c
index 2a559ba..1c19fe1 100644
--- a/std/transport.c
+++ b/std/transport.c
@@ -543,9 +543,9 @@
 // again.
 int clean_up(int arg) { return 0; }
 
-public void init()
+public varargs void init(object origin)
 {
-  "*"::init();
+  "*"::init(origin);
   // if we have player contact (even if the player is just in the same
   // environment), we update the time.
   if (this_player() && query_once_interactive(this_player()))
diff --git a/std/tray.c b/std/tray.c
index df47955..c84ed07 100644
--- a/std/tray.c
+++ b/std/tray.c
@@ -48,13 +48,5 @@
   set_next_reset(-1);
 }
 
-/*
-void init() 
-{
-  commands::init();
-  description::init();
-}
-*/
-
 void reset()
 {}
diff --git a/std/weapon.c b/std/weapon.c
index 7c1f97c..c80c767 100644
--- a/std/weapon.c
+++ b/std/weapon.c
@@ -41,14 +41,6 @@
   AddId(({"Ding","waffe"}));
 }
 
-/*
-void init()
-{
-  commands::init();
-  description::init();
-}
-*/
-
 void reset()  // Man kann in ALLEN Standardobjekten ::reset aufrufen!
 { }
 
