diff --git a/std/thing/properties.c b/std/thing/properties.c
index c372427..25d601c 100644
--- a/std/thing/properties.c
+++ b/std/thing/properties.c
@@ -24,9 +24,16 @@
 
 
 // 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
+// no entry for most properties), therefore it is more memory-efficient to
+// store them like this than in one mapping, although it requires more
+// mapping lookups.
 private nosave mapping *prop = ({ ([]), ([]), ([]), ([]) });
 
-// the mapping that is used for saving
+// the mapping that is used for saving. During save_object/restore_object it
+// contains the properties with SAVE flag. 
+// This is empty outside of a save_object() or restore_object() call!
 private mapping properties;
 
 // security-flag
@@ -171,8 +178,6 @@
   }
 
   // _set_*-Methode vorhanden? falls ja, aufrufen.i
-  // TODO: Closurecache einfuehren und Funktionaufruf nur noch machen, wenn es
-  // die _set_* auch gibt?
   if (call_resolved(&result,this_object(),"_set_"+name,Value ))
         return result;
 
@@ -220,7 +225,6 @@
   }
   
   // _query_*-Methode vorhanden? falls ja, aufrufen.
-  // TODO: Closurecache und nur rufen, wenn es _query_* auch gibt?
   if (call_resolved(&result,this_object(),"_query_"+name))
     return result;
   
@@ -229,7 +233,10 @@
 }
 
 
-// Das gesamte Property-Mapping auf einen Schlag setzen
+// Viele Properties auf einen Schlag setzen.
+// genutzt von simul_efun zum Setzen aller Properties, welche im
+// restore_object() eingelesen wurden.
+// Andere objekt-externe Nutzung ausdruecklich **NICHT** supportet!
 public void SetProperties( mapping props )
 {
   string *names;
@@ -274,6 +281,9 @@
 
 
 // Ein Mapping mit allen Properties zurueckgeben
+// genutzt von simul_efun im save_object() zur Abfrage aller Properties, um
+// hieraus die gespeicherten zu bestimmen.
+// Andere objekt-externe Nutzung ausdruecklich **NICHT** supportet!
 public mapping QueryProperties()
 {
   mapping props;
@@ -306,9 +316,16 @@
 
 
 // mapping Properties setzen zum Speichern (per save_object())
-// Aufruf nur aus simul_efun heraus
+// Aufruf nur aus simul_efun heraus (sinnvoll). Diese fragt alle Properties
+// via QueryProperties() ab, filtert alle nicht-gespeicherten Properties aus
+// und setzt ueber diese Funktion die gespeicherten in der tatsaechlich von
+// save_object() gespeicherten Variable <properties>.
 public void  _set_save_data(mixed data) { properties = data; }
 
 // mapping Properties zum Restoren zurueckgeben
+// Aufruf nur aus simul_efun heraus (sinnvoll). Diese ruft nach dem
+// restore_object die restaurierten Properties hiermit ab und schreibt sie
+// nach Konditionierung via SetProperties() zurueck, damit die Daten (wieder)
+// in <prop> zur Verfuegung steheh.
 public mixed _get_save_data()           { return properties; }
 
diff --git a/sys/thing/properties.h b/sys/thing/properties.h
index e34c79e..9feed60 100644
--- a/sys/thing/properties.h
+++ b/sys/thing/properties.h
@@ -7,23 +7,30 @@
 #ifndef __THING_PROPERTIES_H__
 #define __THING_PROPERTIES_H__
 
-// special defines
-
+// Flags indexing <prop> and they are used as well for Set() calls
 #define F_VALUE         0
 #define F_MODE          1
 #define F_SET_METHOD    2
 #define F_QUERY_METHOD  3
+
+// Flags for Set() to modify/manipulate F_MODE of a property in bit-wise
+// manner
 #define F_MODE_AS       4
 #define F_MODE_AD       5
 
+// mode flags for Properties
 #define SAVE            64
 #define PROTECTED       128  // only this_object() can change the values
 #define SECURED         256  // like PROTECTED, but never resetable
 #define NOSETMETHOD     512  // Keine Set-Methode => Nicht mofifizierbar
-#define SETMNOTFOUND	1024 // Keine Set-Methode gefunden
-#define QUERYMNOTFOUND	2048 // Keine Query-Methode gefunden
-#define QUERYCACHED	4096
-#define SETCACHED	8192
+// Problem with the following: shadows, default methods etc. may change the
+// result at runtime and they do not save that much time (or even at all?)
+// because of the apply cache of the driver. Not used since 1995. But
+// be careful about re-using the values because of ancient (!) savefiles
+#define SETMNOTFOUND	1024 // Keine Set-Methode gefunden. Not used.
+#define QUERYMNOTFOUND	2048 // Keine Query-Methode gefunden. Not used.
+#define QUERYCACHED	4096 // Not used anymore
+#define SETCACHED	8192 // Not used anymore
 
 #endif // __THING_PROPERTIES_H__
 
@@ -34,10 +41,6 @@
 
 // prototypes
 
-// (E)UID-Methods
-//static mixed _query_uid();
-//static mixed _query_euid();
-
 // direct property access
 public varargs mixed Set(string name, mixed Value, int Type, int extern);
 public varargs mixed Query(string name, int Type);
