diff --git a/doc/sphinx/lfun/AddToProp.rst b/doc/sphinx/lfun/AddToProp.rst
new file mode 100644
index 0000000..9fbaaae
--- /dev/null
+++ b/doc/sphinx/lfun/AddToProp.rst
@@ -0,0 +1,49 @@
+AddToProp()
+=========
+
+FUNKTION
+--------
+
+public varargs int AddToProp(string propname, <int|float|string|mixed*|mapping|bytes> summand)
+
+DEFINIERT IN
+------------
+
+     /std/thing/properties.c
+     /sys/thing/properties.h (Prototyp)
+
+ARGUMENTE
+---------
+
+  - propname: Die Property, die veraendert wird
+  - summand: Was auf den aktuellen Wert "aufaddiert" werden soll
+
+BESCHREIBUNG
+------------
+
+  Die Funktion ruft den aktuellen Wert der Property mittels QueryProp() ab, addiert <summand> drauf und setzt den neuen Wert mit SetProp() wieder. Damit ist sie einfach eine Abkuerzung fuer SetProp(pname, QueryProp(pname)+ summand).
+
+  Erlaubte Typen fuer <summand> sind nur solche, mit denen += etwas anfangen kann und welche zum aktuellen Wert der Property passen. Alles andere loest ggf. einen (Laufzeit-)Fehler auf.
+
+RUeCKGABEWERT
+-------------
+
+     Der Wert der Property nach der Aenderung.
+
+BEISPIELE
+---------
+
+     // einen Int aufaddieren
+     AddToProp(P_WC, 42);
+     // ein Element an ein Array in der Property anhaengen
+     AddToProp(P_WAITFOR, ({"zesstra"}));
+     // Ein Mappingkey in ein Mapping in einer Property anhaengen (sollte der Key bereits existieren, wird dessen Wert damit ueberschrieben)
+     AddToProp(P_M_HEALTH_MOD, ([P_HP:5]))
+
+SIEHE AUCH
+----------
+
+     :doc:`QueryProp`, :doc:`SetProp`
+     Konzept: properties, /std/thing/properties.c
+
+19.06.2025, Zesstra
diff --git a/doc/sphinx/lfun/SubFromProp.rst b/doc/sphinx/lfun/SubFromProp.rst
new file mode 100644
index 0000000..e70fa47
--- /dev/null
+++ b/doc/sphinx/lfun/SubFromProp.rst
@@ -0,0 +1,50 @@
+SubFromProp()
+=========
+
+FUNKTION
+--------
+
+public varargs int SubFromProp(string propname, <int|float|string|mixed*|mapping|bytes> subtrahend)
+
+DEFINIERT IN
+------------
+
+     /std/thing/properties.c
+     /sys/thing/properties.h (Prototyp)
+
+ARGUMENTE
+---------
+
+  - propname: Die Property, die veraendert wird
+  - subtrahend: Was auf den aktuellen Wert "substrahiert" werden soll
+
+BESCHREIBUNG
+------------
+
+  Die Funktion ruft den aktuellen Wert der Property mittels QueryProp() ab, "subtrahiert" <subtrahend> davon und setzt den neuen Wert mit SetProp() wieder. Damit ist sie einfach eine Abkuerzung fuer SetProp(pname, QueryProp(pname) - subtrahend).
+
+  Erlaubte Typen fuer <subtrahend> sind nur solche, mit denen +- etwas anfangen kann und welche zum aktuellen Wert der Property passen. Alles andere loest ggf. einen (Laufzeit-)Fehler auf.
+
+RUeCKGABEWERT
+-------------
+
+     Der Wert der Property nach der Aenderung.
+
+BEISPIELE
+---------
+
+     // einen Int subtrahieren
+     SubFromProp(P_WC, 42);
+     // alle entsprechenden Elemente aus einem Array in der Property loeschen
+     // Achtung: erzeugt ein neues Array!
+     SubFromProp(P_WAITFOR, ({"zesstra"}));
+     // Ein Mappingkey aus einem Mapping in einer Property loeschen
+     SubFromProp(P_M_HEALTH_MOD, ([P_HP]))
+
+SIEHE AUCH
+----------
+
+     :doc:`QueryProp`, :doc:`AddProp`
+     Konzept: properties, /std/thing/properties.c
+
+19.06.2025, Zesstra
diff --git a/std/thing/properties.c b/std/thing/properties.c
index fb70913..5852704 100644
--- a/std/thing/properties.c
+++ b/std/thing/properties.c
@@ -22,7 +22,6 @@
 #include "/sys/thing/properties.h"
 #include "/secure/wizlevels.h"
 
-
 // the mapping where the actual properties are stored. Direct initialization.
 // Indexed with F_VALUE, F_MODE, F_SET_METHOD and F_QUERY_METHOD
 // F_MODE, F_SET_METHOD and F_QUERY_METHOD are usually 'sparse' (i.e. there is
@@ -237,6 +236,35 @@
   return prop[F_VALUE][name];
 }
 
+// Addiert einen Wert zu einer Prop. Eigentlich ist es nur ein Short-Cut fuer
+// QueryProp und += und SetProp. Dementsprechend gehen auch hier nur
+// Typ-Kombinationen, die += auch kann.
+public mixed AddToProp(string pname,
+                       <int|float|string|mixed*|mapping|bytes> add_value)
+{
+  mixed value = QueryProp(pname);
+  string err = catch(value += add_value; nolog);
+  if (err)
+    raise_error(sprintf("Nicht unterstuetzter Typ des Summanden: %s\n",
+                        err[strstr(err,":")+2..]));
+
+  return SetProp(pname, value, extern_call());
+}
+
+// "subtrahiert" einen Wert von einer Prop. Eigentlich ist es nur ein
+// Short-Cut fuer QueryProp und -= und SetProp. Dementsprechend gehen auch
+// hier nur Typ-Kombinationen, die -= auch kann.
+public mixed SubFromProp(string pname,
+                       <int|float|string|mixed*|mapping|bytes> sub_value)
+{
+  mixed value = QueryProp(pname);
+  string err = catch(value -= sub_value; nolog);
+  if (err)
+    raise_error(sprintf("Nicht unterstuetzter Typ des Subtrahenden: %s\n",
+                        err[strstr(err,":")+2..]));
+
+  return SetProp(pname, value, extern_call());
+}
 
 // Viele Properties auf einen Schlag setzen.
 // genutzt von simul_efun zum Setzen aller Properties, welche im
diff --git a/sys/thing/properties.h b/sys/thing/properties.h
index 2ccf20e..c472af5 100644
--- a/sys/thing/properties.h
+++ b/sys/thing/properties.h
@@ -49,6 +49,10 @@
 // filtered property access
 public mixed SetProp(string name, mixed Value, int drop_priv = extern_call());
 public mixed QueryProp(string name);
+public mixed AddToProp(string pname,
+                       <int|float|string|mixed*|mapping|bytes> add_value);
+public mixed SubFromProp(string pname,
+                       <int|float|string|mixed*|mapping|bytes> sub_value);
 
 // global property handling
 public void SetProperties(mapping props);
