diff --git a/std/thing/properties.c b/std/thing/properties.c
index 4f5e18b..d910b41 100644
--- a/std/thing/properties.c
+++ b/std/thing/properties.c
@@ -140,40 +140,90 @@
   switch(Type)
   {
     // Je nach Modus Flags veraendern
-    case F_MODE_AS:  prop[F_MODE][name]|= Value;
-                     return prop[F_MODE][name];
-    case F_MODE_AD:  prop[F_MODE][name]&= ~Value;
-                     if (!prop[F_MODE][name]) prop[F_MODE]-=([name]);
-                     return prop[F_MODE][name];
-    case F_MODE:     prop[F_MODE][name]^= Value;
-                     if (!prop[F_MODE][name]) prop[F_MODE]-=([name]);
-                     return prop[F_MODE][name];
+    case F_MODE_AS:
+        prop[F_MODE][name]|= Value;
+        return prop[F_MODE][name];
+    case F_MODE_AD:
+        prop[F_MODE][name]&= ~Value;
+        if (!prop[F_MODE][name]) prop[F_MODE]-=([name]);
+        return prop[F_MODE][name];
+    case F_MODE:
+        prop[F_MODE][name]^= Value;
+        if (!prop[F_MODE][name]) prop[F_MODE]-=([name]);
+        return prop[F_MODE][name];
 
-    // Query- und Setmethoden laufen ab hier durch.
     case F_SET_METHOD:
-    case F_SET_MAPPER:
-      // SETMAPPED passend setzen
-      if (Type==F_SET_METHOD)
-        prop[F_MODE][name] &= ~SETMAPPED;
-      else
-        prop[F_MODE][name] |= SETMAPPED;
-      // Ab hier alles gleich
-      // -1 als Setz-Methode: Nosetmethod setzen
+      if (!Value)
+      {
+        prop[Type]-=([name]);
+        break;
+      }
+      // Ungebundene Lambda_Closure? Heutzutage ein Fehler.
+      if (closurep(Value) && !query_closure_object(Value))
+      {
+        raise_error("Ungebundene Lambdas sind als Setmethoden "
+                    "nicht mehr unterstuetzt.\n");
+      }
+      // -1 als Setz-Methode: Stattdessen NOSETMETHOD setzen (deprecated!)
       if (Value == -1)
       {
         prop[F_SET_METHOD]-=([name]);
         prop[F_MODE][name] |= NOSETMETHOD;
         return 0;
       }
-      // Kein break! Rest wie Querymethod
+      // Zur Sicherheit SETMAPPED loeschen
+      prop[F_MODE][name] &= ~SETMAPPED;
+      prop[Type][name] = Value;
+      break;
+
+    case F_SET_MAPPER:
+      // Als Type F_SET_METHOD speichern/eintragen.
+      Type = F_SET_METHOD;
+      if (!Value)
+      {
+        prop[F_MODE][name] &= ~SETMAPPED;
+        prop[Type]-=([name]);
+        break;
+      }
+      // Da wir hier keine Ruecksicht auf historischen Kram nehmen muessen,
+      // werden nur Closures akzeptiert. Und auch keine -1 als Alias fuer
+      // NOSETMETHOD.
+      if (!closurep(Value))
+      {
+        raise_error("Fuer F_SET_MAPPER werden nur Closures unterstuetzt.\n");
+      }
+      // Und keine ungebundenen Lambda-Closures.
+      if (!query_closure_object(Value))
+      {
+        raise_error("Ungebundene Lambdas sind als Mapper "
+                    "nicht unterstuetzt.\n");
+      }
+      // SETMAPPED setzen
+      prop[F_MODE][name] |= SETMAPPED;
+      prop[Type][name] = Value;
+      break;
+
     case F_QUERY_METHOD:
-      // Ungebundene Lambda_Closure? Heutzutage ein Fehler.
-      if (closurep(Value) && !query_closure_object(Value))
+      if (!Value)
+      {
+        prop[Type]-=([name]);
+        break;
+      }
+      // Jetzt wirklich mal nen Fehler werfen und den Zopf abschneiden.
+      if (!closurep(Value))
+      {
+        raise_error("Fuer F_QUERY_METHOD werden nur noch Closures "
+                    "unterstuetzt.\n");
+      }
+      // Ungebundene Lambda-Closure? Heutzutage ein Fehler.
+      if (!query_closure_object(Value))
       {
         raise_error("Ungebundene Lambdas sind als Querymethoden "
                     "nicht mehr unterstuetzt.\n");
       }
-      // Kein break!
+      prop[Type][name] = Value;
+      break;
+
     default:
       if (!Value) prop[Type]-=([name]);
       else prop[Type][name] = Value;
