diff --git a/obj/misc/bonbon.c b/obj/misc/bonbon.c
new file mode 100644
index 0000000..43bf7f5
--- /dev/null
+++ b/obj/misc/bonbon.c
@@ -0,0 +1,102 @@
+// Asrahel
+
+inherit "std/thing" ;
+
+#include <properties.h>
+#include <moving.h>
+#include <defines.h>
+#include <language.h>
+
+void geschmack()
+{
+	int num;
+	num = random (8);
+	switch(num)
+	{
+		case 0 :	
+			SetProp(P_SHORT,"Ein Orangenbonbon");
+			SetProp(P_LONG,"Ein gefuelltes Bonbon mit Orangengeschmack.\n");
+			SetProp(P_NAME,"Orangenbonbon");
+			AddId(({"orangenbonbon"}));
+			break;
+		case 1 :
+			SetProp(P_SHORT,"Ein Zitronenbonbon");
+			SetProp(P_LONG,"Ein gefuelltes Bonbon mit Zitronengeschmack.\n");
+			SetProp(P_NAME,"Zitronenbonbon");
+			AddId(({"zitronenbonbon"}));
+			break;
+                case 2 :
+			SetProp(P_SHORT,"Ein Schokoladenbonbon");
+			SetProp(P_LONG,"Ein Schokoladenbonbon, pass auf, dass es nicht schmilzt.\n");
+			SetProp(P_NAME,"Schokoladenbonbon");
+			AddId(({"schokobonbon","schokoladenbonbon"}));
+			break;
+                case 3 :
+			SetProp(P_SHORT,"Ein Pfefferminzbonbon");
+			SetProp(P_LONG,"Pfefferminze befreit den Hals und kitzelt in der Nase.\n");
+			SetProp(P_NAME,"Pfefferminzbonbon");
+			AddId(({"pfefferminzbonbon","minze","pfefferminz"}));
+			break;
+                case 4 :
+			SetProp(P_SHORT,"Ein Sahnebonbon");
+			SetProp(P_LONG,"Sehr suess und sehr klebrig.\n");
+			SetProp(P_NAME,"Sahnebonbon");
+			AddId(({"sahnebonbon"}));
+			break;
+                case 5 :
+			SetProp(P_SHORT,"Ein Karamelbonbon");
+			SetProp(P_LONG,"Ein Karamelbonbon, der Rest von Karneval?\n");
+			SetProp(P_NAME,"Karamelbonbon");
+			AddId(({"karamelbonbon"}));
+			break;
+		case 6 :
+			SetProp(P_SHORT,"Ein Anananasbonbon");
+			SetProp(P_LONG,"Ein dreieckiges Anananasbonbon, das schmeckt bestimmt ganz ananassig.\n");
+			SetProp(P_NAME,"Ananasbonbon");
+			AddId(({"ananasbonbon"}));
+			break;
+		case 7 :
+			SetProp(P_SHORT,"Ein Himbeerdrops");
+			SetProp(P_LONG,"Dieses himbeerige Fruchtbonbon ist viel groesser als eine Himbeere.\n");
+			SetProp(P_NAME,"Himbeerdrops");
+			AddId(({"drops","himbeerdrops","fruchtbonbon"}));
+			break;
+                default :
+			SetProp(P_SHORT,"Ein Multivitaminbonbon");
+			SetProp(P_LONG,"Ein Multivitaminbonbon, sehr gesund (besonders bei dem Wetter in Muenster).\n");
+			SetProp(P_NAME,"Multivitaminbonbon");
+			AddId(({"vitaminbonbon","multivitaminbonbon"}));
+			break;
+    }
+}
+
+void create()
+{
+  if (!clonep(this_object())) return;
+	::create();
+	SetProp(P_WEIGHT, 25);
+	SetProp(P_VALUE, 0);
+	SetProp(P_GENDER, NEUTER );
+	AddId("bonbon");
+	geschmack();
+}
+
+
+void init()
+{
+	::init();
+	add_action("essen","esse");
+	add_action("essen","iss");
+	add_action("essen","lutsche");
+}
+
+int essen(string str)
+{
+	notify_fail("Was moechtest Du essen?\n");
+	if ( !str || !id(str) )
+	    return 0;
+	write("Du lutschst genuesslich " + name(WEN,0) + ".\n");
+	say( PL->Name(WER,2) + " lutscht " + name(WEN,0) + ".\n");
+	remove();
+	return 1;
+}
diff --git a/obj/misc/kissen.c b/obj/misc/kissen.c
new file mode 100644
index 0000000..33c365b
--- /dev/null
+++ b/obj/misc/kissen.c
@@ -0,0 +1,128 @@
+inherit "std/thing";
+#include <properties.h>
+#include <language.h>
+
+string cstr;  
+
+init()
+{
+  int colour;
+  ::init();
+  colour = random(8);
+  if (colour==0) cstr = "gruenes";
+  if (colour==1) cstr = "rotes";
+  if (colour==2) cstr = "blaues";
+  if (colour==3) cstr = "gelbes";
+  if (colour==4) cstr = "schwarz-weiss-kariertes";
+  if (colour==5) cstr = "orange-pink-gestreiftes";
+  if (colour==6) cstr = "lila-gruen-getuepfeltes";
+  if (colour==7) cstr = "silbergraues";
+  add_action("throw_it","wirf"); 
+  add_action("ww", "ww");
+}
+
+short()
+{
+  return "Ein " + cstr + " Kissen\n";
+}
+
+long()
+{
+  return "Dies ist ein wunderschoenes, " + cstr + " Kissen.\n"+
+          "Du kannst versuchen es zu werfen.\n";
+}
+
+create()
+{
+  ::create();
+  cstr = "von Boing handgenaehtes";
+  AddId("kissen");
+  SetProp(P_WEIGHT, 1);
+  SetProp(P_VALUE, 1);
+  SetProp(P_NAME, "Kissen");
+  SetProp(P_GENDER, 0);
+}
+
+ww(str)
+{
+  if (str)
+    return throw_it("kissen nach "+str);
+  else
+  {
+    object *all, *liv;
+    int i;
+
+    all=all_inventory(environment(this_player()));
+    for (i=0; i<sizeof(all); i++)
+      if (query_once_interactive(all[i]))
+        if (!liv)
+	  liv = ({all[i]});
+        else
+          liv = liv+({all[i]});
+    i = random(sizeof(liv));
+    return throw_it("kissen nach "+lower_case(liv[i]->query_real_name()));
+  }
+}
+
+throw_it(str)
+{
+  int treffer;
+  string werfer_name;
+  string victim_string,werfer_string;
+  string was,at,wen;
+  int fehler;
+  object victim;
+
+  if (!str) return 0;
+  fehler = 0;
+  if (sscanf(str,"%s %s %s",was,at,wen) != 3)
+    fehler = 1;
+  if (!id(was) || at != "nach")
+    fehler = 1;
+  if (fehler)
+  { 
+     notify_fail("Zum Werfen: wirf kissen nach <spielername>\n");
+     return 0;
+  }
+  victim = present(wen,environment(this_player()));
+  if (!victim)
+  { 
+     write("Dieser Spieler ist nicht hier!\n");                                
+     return 1;                                                                 
+  }                                                                           
+  werfer_name = this_player()->name();
+  treffer = random(5);
+  write("Du schmeisst ein Kissen nach " + victim->name(WEM) +".\n");
+  say(werfer_name + " wirft ein Kissen nach " + victim->name(WEM) + ".\n");
+  if (treffer==0)
+  {
+    werfer_string = "Du verfehlst " + victim->name(WEN) + " meilenweit.\n";
+    victim_string = werfer_name + " verfehlt Dich meilenweit.\n";
+    this_object()->move(environment(this_player()));
+  }
+  if (treffer==1)
+  {
+    werfer_string = "Das Kissen streift " + victim->name(WEN)+ " am Ohrlaeppchen.\n";
+    victim_string = "Das Kissen streift Dich am Ohrlaeppchen.\n";
+  }
+  if (treffer==2)
+  {
+    werfer_string = "PAFF! Du triffst " + victim->name(WEN) + " mitten ins Gesicht.\n";
+    victim_string = "PAFF! Das Kissen trifft Dich mitten im Gesicht!\n";
+  }
+  if (treffer==3)
+  {
+    werfer_string = "WUSCH! Das Kissen trifft " + victim->name(WESSEN) + " Bauch mit voller Wucht.\n";
+    victim_string = "WUSCH! Das Kissen fliegt mit voller Wucht gegen Deinen Bauch.\n";
+  }
+  if (treffer==4)
+  {
+    werfer_string =  victim->name() + " versucht wegzurennen, doch das Kissen trifft den Hinterkopf.\n";
+    victim_string = "Du versuchst wegzurennen, aber das Kissen trifft Dich am Hinterkopf.\n";
+  }
+  write(werfer_string);
+  tell_object(victim,victim_string);
+  if (treffer) this_object()->move(victim);
+  return 1;
+}
+
diff --git a/obj/misc/lolli.c b/obj/misc/lolli.c
new file mode 100644
index 0000000..6b8278e
--- /dev/null
+++ b/obj/misc/lolli.c
@@ -0,0 +1,29 @@
+inherit "std/thing";
+#include <properties.h>
+#include <language.h>
+
+void create()
+{
+   // Laeden erwarten Short und Value in der Blueprint.
+   SetProp(P_SHORT, "Ein Lolli");
+   SetProp(P_VALUE, 5);
+   
+  if (!clonep(this_object())) return;
+   ::create();
+   SetProp(P_SHORT, "Ein Lolli");
+   SetProp(P_NAME, "Lolli");
+   SetProp(P_GENDER, MALE);
+   SetProp(P_LONG, "Ein leckerer Lolli, Du kannst ihn schlecken.\n");
+   AddId("lolli");
+   SetProp(P_WEIGHT, 10);
+   AddCmd( ({"schleck","schlecke","leck","lecke"}), "schleck" );
+}
+
+int schleck(string str)
+{
+   notify_fail("Was moechtest Du schlecken?\n");
+   if (!str || !id(str)) return 0;
+   write("Du schleckst an Deinem Lolli. Er schmeckt ausgezeichnet.\n");
+   say(this_player()->name()+" schleckt an "+this_player()->QueryPossPronoun(this_object(), WEM)+" Lolli.\n");
+   return 1;
+}
diff --git a/obj/misc/tuete.c b/obj/misc/tuete.c
new file mode 100644
index 0000000..e7173bd
--- /dev/null
+++ b/obj/misc/tuete.c
@@ -0,0 +1,47 @@
+//Asrahel
+
+inherit "std/thing" ;
+
+#include <properties.h>
+#include <moving.h>
+#include <defines.h>
+#include <language.h>
+
+void create()
+{
+  if (!clonep(this_object())) return;
+  ::create() ;
+
+  SetProp( P_SHORT, "Eine Tuete Bonbons" ) ;
+  SetProp( P_LONG, "Eine magische Bonbontuete. So oft Du auch hineingreifst, sie wird niemals leer\n"
+		+  "und enthaelt immer eine bunte Mischung.\n");
+
+  SetProp( P_WEIGHT, 0 ) ;
+  SetProp( P_NOBUY, 1) ;
+  SetProp( P_NODROP, "Nein, Du willst doch nicht dieses Geschenk weggeben !?\n");
+  SetProp( P_NEVERDROP, 1) ;
+  SetProp( P_NAME, "Tuete") ;
+  SetProp( P_GENDER, FEMALE ) ;
+  AddId( ({ "bonbontuete","tuete", "bonbons" }) ) ;
+  SetProp(P_AUTOLOADOBJ, 1);
+
+}
+
+void init()
+{
+	::init();
+	add_action("naschen","greife");
+	add_action("naschen","greif");
+}
+
+int naschen (string str)
+{
+  notify_fail("Wohinein moechtest Du greifen ?\n");
+	if ( str != "tuete" && str != "in tuete" && str != "bonbons" && str != "in bonbontuete")
+		 return 0;
+	write("Du greifst in Deine Tuete und holst ein Bonbon heraus.\n");
+	say( PL->name(WER,2) + " holt ein Bonbon aus einer Tuete.\n");
+	clone_object("obj/misc/bonbon")->move(PL);
+	return 1;
+}
+
diff --git a/obj/misc/wuerfel.c b/obj/misc/wuerfel.c
new file mode 100644
index 0000000..d5ccb69
--- /dev/null
+++ b/obj/misc/wuerfel.c
@@ -0,0 +1,30 @@
+inherit "std/thing";
+
+#include <language.h>
+#include <properties.h>
+
+void create()
+{
+  // Short und Value werden von Laeden in der Blueprint erwartet
+  SetProp(P_SHORT, "Ein Wuerfel");
+  SetProp(P_VALUE, 1);
+  
+  if (!clonep(this_object())) return;
+  ::create();
+  SetProp(P_LONG, "Ein Wuerfel mit 6 Seiten.\n");
+  SetProp(P_NAME, "Wuerfel");
+  SetProp(P_GENDER, MALE);
+  SetProp(P_WEIGHT, 1);
+  AddId("wuerfel");
+	AddCmd("wuerfel","wuerfel");
+}
+
+int wuerfel(string str)
+{
+  int zahl;
+
+  zahl = random(6) + 1;
+  write("Du wuerfelst eine " + zahl + ".\n");
+  say(this_player()->name() + " wuerfelt eine " + zahl + ".\n");
+  return 1;
+}
