diff --git a/room/orakel.c b/room/orakel.c
new file mode 100644
index 0000000..4da1508
--- /dev/null
+++ b/room/orakel.c
@@ -0,0 +1,231 @@
+// MorgenGrauen MUDlib
+//
+// orakel.c -- Der Raum, in dem man sich neue ZT-Sprueche holen kann
+//
+// $Id: orakel.c 9371 2015-10-22 19:01:48Z Zesstra $
+
+#define TIPS(x) "/secure/ARCH/ZT/"+x
+
+#define POTIONMASTER "/secure/potionmaster"
+
+inherit "/std/room";
+
+#include <properties.h>
+
+// WANNWIEVIEL zeigt an, mit wieviel Stufenpunkten man wieviele Zaubertraenke
+// haben kann, so ist zum Beispiel an fuenfter Stelle die Zahl 25 einge-
+// tragen, also kann man mit 25 Stufenpunkten 5 Zaubertraenke bekommen.
+#define WANNWIEVIEL ({ 0, 0, 0, 0,\
+   25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375,\
+   400, 425, 450, 475, 500, 525, 550, 575, 600, 625, 650, 675, 700, 725,\
+   750,\
+   790, 830, 870, 910, 950, 990, 1030, 1070, 1110, 1150, 1190, 1230, 1270,\
+   1310, 1350, 1390, 1430, 1470, 1510, 1550, 1590, 1630, 1670, 1710, 1750,\
+   1790,\
+   1860, 1930, 2000, 2070, 2140, 2210, 2280, 2350, 2420, 2490,\
+   2590, 2690, 2790, 2890, 2990, 3090, 3190, 3290, 3390, 3490 })
+#define KEINTIPTEXT "Der Nebel ueber der Kugel ruehrt sich nicht.\n"
+
+
+
+protected void create()
+{
+   ::create();
+   SetProp(P_INDOORS, 1);
+   SetProp(P_LIGHT, 1);
+   SetProp(P_INT_SHORT, "Das heilige Orakel von Tingan");
+   SetProp(P_INT_LONG,
+   "Du befindest Dich in einer mittelgrossen Hoehle, die sich halbkugel-\n"+
+   "foermig ueber Deinem Kopf erhebt. Die Hoehle wird fast komplett vom\n"+
+   "gruenlich schimmernden Quellsee des Osterbachs ausgefuellt. Ueber dem\n"+
+   "See schwebt eingehuellt in langsam ziehende Nebelschwaden eine magisch\n"+
+   "leuchtende Kugel, das heilige Orakel von Tingan. Im Osten fliesst das\n"+
+   "Wasser des Sees durch einen schmalen Gang ab, dem Du folgen koenntest.\n");
+   AddDetail("boden", "Der Boden ist groesstenteils mit Wasser bedeckt.\n");
+   AddDetail("decke", "Die Decke ist aus massivem Felsgestein, Du willst gar nicht wissen,\nwieviele Tonnen davon ueber Deinem Kopf lasten.\n");
+   AddDetail(({"fels", "gestein", "felsgestein"}), "Sowas ist im Gebirge recht haeufig.\n");
+   AddDetail(({"wand", "waende"}), "Die Waende sind feucht.\n");
+   AddDetail(({"quellsee", "see"}), "Er ist die Quelle des Osterbachs.\n");
+   AddDetail("quelle", "Das heisst, der Bach entspringt hier.\n");
+   AddDetail(({"bach", "osterbach"}), "Er fliesst nach Osten ab.\n");
+   AddDetail("wasser", "Es ist klar und frisch.\n");
+   AddDetail("gang", "Er fuehrt nach Osten.\n");
+   AddDetail("orakel", "Du fuehlst grosses Wissen in Deiner Umgebung.\n");
+   AddDetail("umgebung", "Die Umgebung ist das, was Dich umgibt.\n");
+   AddDetail("wissen", "Vielleicht nuetzt es Dir ja was.\n");
+   AddDetail(({"nebel", "schwaden", "nebelschwaden"}), "Sie ziehen langsam ueber den See.\n");
+   AddDetail("kugel", "Die Kugel leuchtet in magischem Licht und laedt Dich fast zum Meditieren ein.\n");
+   AddDetail("licht", "Magisches Licht erhellt den Raum.\n");
+   AddDetail("raum", "Schau Dich einfach mal um.\n");
+   AddDetail("hoehle", "Du befindest Dich tatsaechlich in einer Hoehle.\n");
+   AddDetail("kopf", "Das anzuschauen duerfte Dir schwer fallen.\n");
+   AddCmd(({"trink", "trinke"}), "trinken");
+   AddCmd("meditiere", "meditieren");
+   AddCmd(({"wirf", "werfe"}), "werfen");
+   AddExit("osten", "/players/boing/orakel/organg2");
+}
+
+// Es wird berechnet ob der Spieler einen neuen Tip bekommen kann.
+int NeuerTip()
+{
+   mapping platt;   // Attributmapping des Spielers
+   int	   summe;   // Summe der Attribute des Spielers + der noch zu findenen
+		    // aber bekannten Zaubertrankstellen
+   int	   sps;     // Stufenpunkte des Spielers
+
+   platt  = this_player()->QueryProp(P_ATTRIBUTES);
+   summe  = (int)platt["int"] + (int)platt["con"] + 
+	    (int)platt["dex"] + (int)platt["str"] - 4; 
+   summe  += sizeof(this_player()->QueryProp(P_KNOWN_POTIONROOMS));
+   sps	  = this_player()->QueryProp(P_LEP);
+
+// Wenn genug Stufenpunkte da sind, dann wird 1 zurueckgegeben, sonst 0
+  if (summe>79)
+    return 0;
+  if (sps > WANNWIEVIEL[summe])
+    return 1;
+   return 0;
+}
+
+// Gibt die Nummer des ausgewaehlten Zaubertranks zurueck oder 0, wenn keiner
+// mehr uebrig ist.
+int ZTAuswahl()
+{
+   int* pllist;
+   int	pllsize;
+   int i;
+   mixed sorted_list; // ({ ({liste1}), ({liste2}), ..., ({liste8}) })
+
+// Initialisierung
+   sorted_list = ({ ({ }), ({ }), ({ }), ({ }), ({ }), ({ }), ({ }), ({ }) });
+   pllist      = this_player()->QueryProp(P_POTIONROOMS);
+   pllsize     = sizeof(pllist);
+
+// Zaubertraenke werden gemaess ihrer Liste in den neuen Array eingetragen.
+   for (i=0; i<pllsize; i++)
+      sorted_list[POTIONMASTER->GetListByNumber(pllist[i])] += ({ pllist[i] });
+
+// Alle Unterarrays werden aneinandergehaengt.
+   pllist = ({ });
+   for (i=0; i<8; i++)
+      pllist += sorted_list[i];
+   pllist -= this_player()->QueryProp(P_KNOWN_POTIONROOMS);
+
+// Jetzt sind alle Zaubertraenke wieder in der Liste, sortiert nach dem
+// Schwierigkeitsgrad, bis auf die Zaubertraenke, die der Spieler bereits
+// kennt (d.h. wo er schon den Tip bekommen hat, sie aber noch nicht
+// gefunden hat).
+
+
+// Einer der leichtesten Zaubertraenke wird ausgewaehlt und zurueckgegeben.
+   pllsize = sizeof(pllist);
+   if (!pllsize)
+      return -1;
+   if (pllsize>10)
+      return pllist[random(10)];
+   else
+      return pllist[random(pllsize)];
+}
+
+
+string Vision()
+{
+  int	  nr;
+  string* text;
+  int*	  liste;
+
+  if (!NeuerTip())
+    return KEINTIPTEXT + "Du hast wahrscheinlich zu wenig Stufenpunkte.\n";
+
+  nr = ZTAuswahl();
+  if (nr == -1)
+    return KEINTIPTEXT + "Du hast schon alle Zaubertraenke gefunden.\n";
+
+  text = POTIONMASTER->TipLesen(nr);
+// Das Folgende kann passieren, wenn entweder die Datei zu einem ZT nicht
+// existiert oder das Einlesen sonstwie fehlschlaegt. Zur Behebung des
+// Fehlers sollte man sich als erstes die Datei <nr>.zt anschauen.
+  if (intp(text) || !sizeof(text)) 
+    return 
+  "Ploetzlich wird es totenstill im Raum, die Nebelschwaden beginnen sich\n"+
+  "um die Kugel zu drehen. Immer schneller wird der wirbelnde Tanz, bis\n"+
+  "sich das Ganze unmerklich zu einer Schrift formt:\n"+
+  "   Fehler im Raum-Zeit-Gefuege, bitte wende Dich an Rikus\n"+
+  "   und melde ihm die Zahl '"+nr+"'!\n"+
+  "Dann zerfliesst der Nebel und alles ist beim Alten.\n";
+
+  liste = this_player()->QueryProp(P_KNOWN_POTIONROOMS);
+  this_player()->AddKnownPotion(nr);
+
+//bis nach Reboot noetig!!! Rikus
+//  "/players/boing/orakel/orakel"->AddKnownPotion(nr);
+
+  return "Der Nebel ueber der Kugel beginnt sich zu bewegen, dann hoerst Du eine\ntiefe Stimme in Deinem Kopf erklingen:\n\n"+text[random(sizeof(text))];
+}
+
+string TipListe()
+{
+  int*	  pll;
+  string* tip;
+  string  ret;
+  int	  plsize, i;
+
+  ret	 = "";
+  pll	 = this_interactive()->QueryProp(P_KNOWN_POTIONROOMS);
+  plsize = sizeof(pll);
+
+  for (i=0; i<plsize; i++)
+  {
+    tip = POTIONMASTER->TipLesen(pll[i]);
+    if (sizeof(tip))
+    {
+      ret += tip[random(sizeof(tip))];
+      ret += "--------------------------------------------------------------------------\n";
+    }
+  }
+
+  if (ret=="")
+    return "Du kennst momentan keine Tips zu Zaubertraenken.\n";
+  else
+    return "--------------------------------------------------------------------------\n"+ret;
+}
+
+int trinken(string str)
+{
+  notify_fail("Was moechtest Du trinken?\n");
+  if (!str || str=="") return 0;
+  notify_fail("Das kannst Du hier nicht trinken!\n");
+  if (str!="wasser")
+    return 0;
+  write("Du trinkst einen Schluck Quellwasser und fuehlst Dich koestlich erfrischt.\n");
+  return 1;
+}
+
+meditieren()
+{
+  write(
+  "Du sammelst Deine geistigen Kraefte und verfaellst schon schnell in einen\n"+
+  "tranceartigen Zustand. Eine Vision eines Helden, der eine Muenze in den\n"+
+  "See wirft erscheint vor Deinen Augen, verschwindet aber schon schnell\n"+
+  "wieder. Als Du wieder aufwachst, ist alles wie vorher.\n");
+  return 1;
+}
+
+int werfen(string str)
+{
+  if (str=="muenze in see" || str=="muenze in wasser" ||
+      str=="muenze in quellsee")
+  {
+    if (this_player()->QueryMoney()<1)
+    {
+      write("Du hast keine Muenze.\n");
+      return 1;
+    }
+    this_player()->AddMoney(-1);
+    write("Du wirfst eine Muenze ins Wasser.\n");
+    say(capitalize(this_player()->name())+" wirft eine Muenze ins Wasser.\n");
+    write(Vision());
+    return 1;
+  }
+  return 0;
+}
