diff --git a/doc/master/compile_object b/doc/master/compile_object
index 1b55658..b9425bd 100644
--- a/doc/master/compile_object
+++ b/doc/master/compile_object
@@ -1,11 +1,11 @@
 SYNOPSIS
-	object compile_object(string filename)
+        object compile_object(string filename)
 
 DESCRIPTION
-	This function is caled if the interpreter cannot find the
-	file for an object to be loaded. The master object has now
-	the opportunity to return an object that will then serve as if
-	compiled from the given filename.
+        This function is caled if the interpreter cannot find the
+        file for an object to be loaded. The master object has now
+        the opportunity to return an object that will then serve as if
+        compiled from the given filename.
 
-	If 0 is returned, the usual ``Could not load descr for'' error
-	will occur.
+        If 0 is returned, the usual "Could not load descr for" error
+        will occur.
diff --git a/doc/master/connect b/doc/master/connect
index a1c7315..d98f5d5 100644
--- a/doc/master/connect
+++ b/doc/master/connect
@@ -1,13 +1,26 @@
 SYNOPSIS
-	object connect(void)
+        object connect(void)
 
 DESCRIPTION
-	Return a login object that the requested connection should be
-	bound to. Note that the connection is not bound yet.
+        Return a login object that the requested connection should be
+        bound to.
 
-	The lfun logon() will be applied to the login object after
-	binding the connection to it. That lfun has to return != 0 to
-	indicate success.
+        Note that the connection is at this time bound to the master object,
+        and will be re-bound to the returned object.
+
+        The lfun logon() will be applied to the login object after
+        binding the connection to it. That lfun has to return != 0 to
+        indicate success.
+
+        If connect() initiates a secure connection without setting a callback,
+        and the connection is still handshaking at the time connect() returns,
+        the driver will delay the call to logon() until the handshake either
+        succeeds or fails.
+
+HISTORY
+        LDMud 3.2.13/3.3.713 streamlined the handling of secure connections
+        during logon.
 
 SEE ALSO
-	logon(A), disconnect(M), interactive(E), exec(E)
+        logon(A), disconnect(M), interactive(E), exec(E),
+        net_connect(E), tls_init_connection(E)
diff --git a/doc/master/dangling_lfun_closure b/doc/master/dangling_lfun_closure
index 6bfaeb5..0bd881f 100644
--- a/doc/master/dangling_lfun_closure
+++ b/doc/master/dangling_lfun_closure
@@ -1,26 +1,30 @@
 SYNOPSIS
-	void dangling_lfun_closure()
+        void dangling_lfun_closure()
 
 DESCRIPTION
-	Handle a dangling lfun-closure.
+        Handle a dangling lfun-closure.
 
-	This is called when the gamedriver executes a closure using a
-	vanished lfun. A proper handling is to raise a runtime error.
+        This is called when the gamedriver executes a closure using a
+        vanished lfun, with previous_object() showing the originating
+        object. A proper handling is to raise a runtime error.
 
-	Technical:
-	  Upon replacing programs (see efun replace_program()), any
-	  existing lambda closures of the object are adjusted to the
-	  new environment. If a closure uses a lfun which vanished in
-	  the replacement process, the reference to this lfun is
-	  replaced by a reference to this function. The error will
-	  then occur when the execution of the adjusted lambda reaches
-	  the point of the lfun reference. There are two reasons for
-	  the delayed handling. First is that the program replacement
-	  and with it the closure adjustment happens at the end of a
-	  backend cycle, outside of any execution thread: noone would
-	  see the error at this time.  Second, smart closures might
-	  know/recognize the program replacement  and skip the call to
-	  the vanished lfun.
+        Technical:
+          Upon replacing programs (see efun replace_program()), any
+          existing lambda closures of the object are adjusted to the
+          new environment. If a closure uses a lfun which vanished in
+          the replacement process, the reference to the lfun is
+          replaced by an alien-lfun closure referencing to this function.
+          The error will then occur when the execution of the adjusted lambda
+          reaches the point of the lfun reference. There are two reasons for
+          the delayed handling. First is that the program replacement and with
+          it the closure adjustment happens at the end of a backend cycle,
+          outside of any execution thread: noone would see the error at this
+          time. Second, smart closures might know/recognize the program
+          replacement and skip the call to the vanished lfun.
+
+HISTORY
+        Since LDMud 3.2.9, all references to dangling_lfun_closure() are
+        created as alien-lfun closures.
 
 SEE ALSO
-	closures(LPC)
+        closures(LPC)
diff --git a/doc/master/disconnect b/doc/master/disconnect
index f7a9f3d..5f54c5f 100644
--- a/doc/master/disconnect
+++ b/doc/master/disconnect
@@ -1,13 +1,27 @@
 SYNOPSIS
-	void disconnect(object ob)
+        void disconnect(object ob, string remaining)
 
 DESCRIPTION
-	Handle the loss of the IP connection for the (formerly)
-	interactive object ob. The connection can be lost because the
-	the underlying transport connection was lost (``netdead''), or
-	because of a call to exec() or remove_interactive(). The
-	connection will be unbound upon return from this call.
+        Handle the loss of the IP connection for the (formerly)
+        interactive object <ob>. The connection can be lost because the
+        the underlying transport connection was lost ('netdead'), or
+        because of a call to exec() or remove_interactive().
+
+        <remaining> is a string holding the remaining unread input data from
+        the connection, if any. This data is unprocessed just as it was
+        received.
+
+        The connection will be unbound upon return from this call, so
+        for the time of this call, interactive(ob) will still
+        return TRUE even if the actual network connection has already
+        been lost.
+
+        This method is not called if the object has been destructed
+        already.
+
+HISTORY
+        LDMud 3.3.713 added the second argument for the remaining input data.
 
 SEE ALSO
-	connect(M), remove_player(M), remove_interactive(E), exec(E),
-	interactive(E)
+        connect(M), remove_player(M), remove_interactive(E), exec(E),
+        interactive(E)
diff --git a/doc/master/epilog b/doc/master/epilog
index eb51d75..b065d26 100644
--- a/doc/master/epilog
+++ b/doc/master/epilog
@@ -1,24 +1,16 @@
 SYNOPSIS
-	void epilog(void)		/* compat in 3.2 */
-	string *epilog(int eflag)	/* !compat or 3.2.1 */
+        string *epilog(int eflag)
 
 DESCRIPTION
-	Perform final actions before opening the system to users.
-	The semantics of this function differ for compat and !compat
-	mode, and between 3.2 and 3.2.1.
+        Perform final actions before opening the system to users.
 
-	Compat in 3.2: the objects from the INIT_FILE (#defined to
-	"room/init_file" at compile time in the parser) are already
-	loaded at this time. Normally there is nothing left to do for
-	this function.
+        The argument is the number of -e options that were
+        given to the parser on the commandline. Normally it is just 0
+        or 1. The function should return an array of strings, which
+        traditionally denote the objects to be preloaded with
+        master->preload(). Any other return value is interpreted as
+        "no object to preload". The resulting strings will be passed
+        one at a time as arguments to preload().
 
-	!Compat and 3.2.1: the argument is the number of -e options that were
-	given to the parser on the commandline. Normally it is just 0
-	or 1. The function should return an array of strings, which
-	traditionally denote the objects to be preloaded with
-	master->preload(). Any other return value is interpreted as
-	``no object to preload''. The resulting strings will be passed
-	one at a time as arguments to preload().
-
-SEE ALSO	
-	preload(M), master(M)
+SEE ALSO
+        preload(M), master(M)
diff --git a/doc/master/external_master_reload b/doc/master/external_master_reload
index 57913f0..8768506 100644
--- a/doc/master/external_master_reload
+++ b/doc/master/external_master_reload
@@ -1,10 +1,10 @@
 SYNOPSIS
-	void external_master_reload()
+        void external_master_reload()
 
 DESCRIPTION
-	Master was reloaded on external request by SIGUSR1.
-	It will be called after inaugurate_master() of course.
-	If you plan to do additional magic here, you're welcome.
+        Master was reloaded on external request by SIGUSR1.
+        It will be called after inaugurate_master() of course.
+        If you plan to do additional magic here, you're welcome.
 
 SEE ALSO
-	inaugurate_master(M)
+        inaugurate_master(M)
diff --git a/doc/master/flag b/doc/master/flag
index e04e91d..dccb52b 100644
--- a/doc/master/flag
+++ b/doc/master/flag
@@ -1,41 +1,41 @@
 SYNOPSIS
-	void flag(string arg)
+        void flag(string arg)
 
 DESCRIPTION
-	Evaluate an argument given as option '-f' to the driver.
-	If several '-f' options are given, this function will be
-	called sequentially with all given arguments.
-	This function can be used to pass the master commands via
-	arguments to the driver. This is useful when building a new
-	mudlib from scratch. It is called only when the system is
-	started.
+        Evaluate an argument given as option '-f' to the driver.
+        If several '-f' options are given, this function will be
+        called sequentially with all given arguments.
+        This function can be used to pass the master commands via
+        arguments to the driver. This is useful when building a new
+        mudlib from scratch. It is called only when the system is
+        started.
 
 EXAMPLE
-	// The code given implements these commands:
-	//  '-fcall <ob> <fun> <arg>': call function <fun> in object <ob> with
-	//				argument <arg>.
-	//  '-fshutdown': shutdown the system immediately.
-	// Thus, starting the driver as
-	//	 'parse "-fcall foo bar Yow!" -fshutdown' would
-	// first do foo->bar("Yow!") and then shut down the system.
+        // The code given implements these commands:
+        //  '-fcall <ob> <fun> <arg>': call function <fun> in object <ob> with
+        //                                argument <arg>.
+        //  '-fshutdown': shutdown the system immediately.
+        // Thus, starting the driver as
+        //         'parse "-fcall foo bar Yow!" -fshutdown' would
+        // first do foo->bar("Yow!") and then shut down the system.
 
-	{
-	  string obj, fun, rest;
+        {
+          string obj, fun, rest;
 
-	  if (arg == "shutdown")
-	  {
-	    shutdown();
-	    return;
-	  }
-	  if (sscanf(arg, "call %s %s %s", obj, fun, rest) >= 2)
-	  {
-	    write(obj+"->"+fun+"(\""+rest+"\") = ");
-	    write(call_other(obj, fun, rest));
-	    write("\n");
-	    return;
-	  }
-	  write("master: Unknown flag "+arg+"\n");
-	}
+          if (arg == "shutdown")
+          {
+            shutdown();
+            return;
+          }
+          if (sscanf(arg, "call %s %s %s", obj, fun, rest) >= 2)
+          {
+            write(obj+"->"+fun+"(\""+rest+"\") = ");
+            write(call_other(obj, fun, rest));
+            write("\n");
+            return;
+          }
+          write("master: Unknown flag "+arg+"\n");
+        }
 
 SEE ALSO
-	master(M)
+        master(M)
diff --git a/doc/master/get_bb_uid b/doc/master/get_bb_uid
index 5a4dc8b..2be9c89 100644
--- a/doc/master/get_bb_uid
+++ b/doc/master/get_bb_uid
@@ -1,18 +1,18 @@
 SYNOPSIS
-	string get_bb_uid(void)
+        string get_bb_uid(void)
 
 DESCRIPTION
-	Is called to get the ``backbone id''. Objects whose creator is
-	the backbone id are ``trusted'', and will automagically get
-	the uid and euid of the object that caused to load or clone
-	them.
+        This method is called when efun process_string() is used without a
+        current object (e.g. from notify_fail method). The current object
+        will be set to the current command giver, and will receive the euid
+        returned from this function.
 
-	The backbone id is also temporary given to objects while being
-	called via process_string().
+        If strict-euids, this function must exist and return a string.
+        Otherwise the function is optional and/or may return 0.
 
 HISTORY
-	Since 3.2.1, get_bb_uid() is needed just for process_string()
-	if no this_object() is present.
+        Since 3.2.1, get_bb_uid() is needed just for process_string()
+        if no this_object() is present.
 
 SEE ALSO
-	uids(C), creator_file(M), creator(E), get_root_id(M)
+        uids(C), creator_file(M), creator(E), get_master_uid(M)
diff --git a/doc/master/get_ed_buffer_save_file_name b/doc/master/get_ed_buffer_save_file_name
index 50a23c3..e13e66b 100644
--- a/doc/master/get_ed_buffer_save_file_name
+++ b/doc/master/get_ed_buffer_save_file_name
@@ -1,22 +1,22 @@
 SYNOPSIS
-	string get_ed_buffer_save_object_name(string edited_file)
+        string get_ed_buffer_save_file_name(string edited_file)
 
 DESCRIPTION
-	This function is called when an interactive user object is
-	destructed or looses connection through remove_interactive()
-	while editing with ed() the file edite_file (emergency save).
-	this_player() is set to the object that loosing connection.
-	The function should return a file name for the emergency save
-	file.
+        This function is called when an interactive user object is
+        destructed or loses connection through remove_interactive()
+        while editing with ed() the file edited_file (emergency save).
+        this_player() is set to the object that lost connection.
+        The function should return a file name for the emergency save
+        file.
 
 EXAMPLE
-	string get_ed_buffer_save_object_name(string file) {
-	  return "/players/"+getuid(this_player())+"/.dead_ed_files/"
-		 + explode(file, "/")[<1];
-	}
+        string get_ed_buffer_save_file_name(string file) {
+          return "/players/"+getuid(this_player())+"/.dead_ed_files/"
+                 + explode(file, "/")[<1];
+        }
 
-	This breaks up file into its components and stores it in the
-	user's emergency save directory under the file's basename.
+        This breaks up file into its components and stores it in the
+        user's emergency save directory under the file's basename.
 
 SEE ALSO
-	ed(E), destruct(E), remove_interactive(E), valid_write(M)
+        ed(E), destruct(E), remove_interactive(E), valid_write(M)
diff --git a/doc/master/get_master_uid b/doc/master/get_master_uid
index a0c6737..3cc7985 100644
--- a/doc/master/get_master_uid
+++ b/doc/master/get_master_uid
@@ -1,12 +1,12 @@
 SYNOPSIS
-	string get_master_uid(void)
+        string get_master_uid(void)
 
 DESCRIPTION
-	Return the string to be used as root-uid.
-	Under !native, the function is expendable.
+        Return the string to be used as root-uid.
+        Under !strict_euids, the function is expendable.
 
 HISTORY
-	Introduced in 3.2.1@40 replacing get_root_uid().
+        Introduced in 3.2.1@40 replacing get_root_uid().
 
 SEE ALSO
-	get_bb_uid(M), get_master_uid(M), uids(C), creator_file(M), creator(E)
+        get_bb_uid(M), get_master_uid(M), uids(C), creator_file(M), creator(E)
diff --git a/doc/master/get_simul_efun b/doc/master/get_simul_efun
index 88adba0..ac6f582 100644
--- a/doc/master/get_simul_efun
+++ b/doc/master/get_simul_efun
@@ -1,24 +1,20 @@
 SYNOPSIS
-	mixed get_     simul_efun(void)      // 3.2
-	string|string* get_simul_efun(void)  // 3.2.1
+        string|string* get_simul_efun(void)
 
 DESCRIPTION
-	Load the simul_efun object(s) and return one or more paths of it.
-// Note that the object(s) must be loaded by this function!
-//
-// When you return an array of strings, the first string is taken as path
-// to the simul_efun object, and all other paths are used for backup
-// simul_efun objects to call simul_efuns that are not present in the
-// main simul_efun object. This allows to remove simul_efuns at runtime 
-// without getting errors from old compiled programs that still use the 
-// obsolete simul_efuns. A side use of this mechanism is to provide 
-// a 'spare' simul_efun object in case the normal one fails to load.
-//
-	Should return either the object_name of the simul_efun object as
-	a string, or an array containing as first element a string
-	with the file name of the simul_efun object and the following
-	elements strings with file names of alternate simul_efun
-	objects that will be used if the first one cannot be loaded.
+        Load the simul_efun object(s) and return one or more paths of it.
+
+        Note that the object(s) must be loaded by this function!
+
+        When you return an array of strings, the first string is taken as path
+        to the simul_efun object, and all other paths are used for backup
+        simul_efun objects to call simul_efuns that are not present in the
+        main simul_efun object. This allows the removal of simul_efuns at
+        runtime without getting errors from old compiled programs that still
+        use the obsolete simul_efuns.
+
+        The additional simul-efun objects can not serve as backups for
+        the primary one!
 
 SEE ALSO
-	simul_efun(C)
+        simul_efun(C)
diff --git a/doc/master/get_wiz_name b/doc/master/get_wiz_name
index 6056965..81befb7 100644
--- a/doc/master/get_wiz_name
+++ b/doc/master/get_wiz_name
@@ -1,13 +1,12 @@
 SYNOPSIS
-	string get_wiz_name(string file)
+        string get_wiz_name(string file)
 
 DESCRIPTION
-	Argument is a file name, which we want to get the owner of.
-	This used for the wizlist, to determine who gets the score for
-	the file being used.
+        Argument is a file name, which we want to get the owner of.
+        This used for the wizlist, to determine who gets the score for
+        the file being used.
 
-	For 3.2.1, it is used only to score errors to the right wizard.
+        This call is used only to score errors to the right wizard.
 
 SEE ALSO
-	wizlist(E), get_wiz_info(E), query_real_name(A),
-	query_creator(M), getuid(E)
+        wizlist(E), get_wiz_info(E), query_creator(M), getuid(E)
diff --git a/doc/master/heart_beat_error b/doc/master/heart_beat_error
index d4d15f2..11985b8 100644
--- a/doc/master/heart_beat_error
+++ b/doc/master/heart_beat_error
@@ -1,24 +1,30 @@
 SYNOPSIS
-	mixed heart_beat_error(object culprit, string err, string prg,
-			       string curobj, int line)
+        mixed heart_beat_error(object culprit, string err, string prg,
+                               string curobj, int line, int caught)
 
 DESCRIPTION
-	This function is called when a runtime error occurs while
-	executing the heart_beat() function of the object culprit. prg
-	is program where the actual error happened, in object curobj
-	at the given line.
+        This function is called when a runtime error occurs while
+        executing the heart_beat() function of the object culprit. prg
+        is program where the actual error happened, in object curobj
+        at the given line.
 
-	At time of call, the heart_beat has been turned off.
-	Return anything != 0 to restart the heart_beat in culprit.
+        At time of call, the heart_beat has been turned off.
+        Return anything != 0 to restart the heart_beat in culprit.
 
-	If culprit is a user, it should at least get the message ``You
-	have no heartbeat''. A more advanced handling would destruct
-	the offending object curobj and and allow the heartbeat to
-	restart.
+        If culprit is a user, it should at least get the message "You
+        have no heartbeat". A more advanced handling would destruct
+        the offending object curobj and and allow the heartbeat to
+        restart.
 
-	Note that prg denotes the program actually executed (which
-	might be an inherited one) whereas curobj is just the
-	offending object.
+        If the error is caught on a higher level, <caught> is non-zero;
+        otherwise it is 0.
+
+        Note that prg denotes the program actually executed (which
+        might be an inherited one) whereas curobj is just the
+        offending object.
+
+HISTORY
+        LDMud 3.2.12/3.3.705 added the <caught> argument.
 
 SEE ALSO
-	set_heart_beat(E), heart_beat(A), runtime_error(M)
+        set_heart_beat(E), heart_beat(A), runtime_error(M)
diff --git a/doc/master/inaugurate_master b/doc/master/inaugurate_master
index 85c9526..2cf612b 100644
--- a/doc/master/inaugurate_master
+++ b/doc/master/inaugurate_master
@@ -1,30 +1,29 @@
 SYNOPSIS
-	void inaugurate_master(int arg)
+        void inaugurate_master(int arg)
 
 DESCRIPTION
-	This function is called in the master object after it has been
-	created and is fully functional. Note that the create()
-	function is of little use in the master object, because at the
-	time it is called there is no simul_efun object yet, and the
-	interpreter does not know anything about the user-ids and
-	access permissions.
+        This function is called in the master object after it has been
+        created and is fully functional. Note that the create()
+        function is of little use in the master object, because at the
+        time it is called there is no simul_efun object yet, and the
+        interpreter does not know anything about the user-ids and
+        access permissions.
 
-	The argument <arg> denotes why this function is called:
-	  arg = 0: the mud just started, this is the first master of all.
-	      = 1: the master was destructed and then reactivated
-	           (because a new one couldn't be loaded).
-	      = 2: the master was destructed and then reactivated, but
-	           additionally lost all variable contents.
-	      = 3: this is a reloaded master.
+        The argument <arg> denotes why this function is called:
+          arg = 0: the mud just started, this is the first master of all.
+              = 1: the master was destructed and then reactivated
+                   (because a new one couldn't be loaded).
+              = 2: the master was destructed and then reactivated, but
+                   additionally lost all variable contents.
+              = 3: this is a reloaded master.
 
-	This function has at least to set up the driverhooks to use
-	(in 3.2.1). Also, any mudwho or wizlist handling has to be
-	initialized here.
+        This function has to at least set up the driverhooks to use
+        (in 3.2.1). Also, any mudwho or wizlist handling has to be
+        initialized here.
 
-	Besides that, do whatever you feel you need to do, 
-	e.g. set_auto_include_string(), or give the master a decent euid.
+        Besides that, do whatever you feel you need to do,
+        e.g. set_auto_include_string(), or give the master a decent euid.
 
 SEE ALSO
-	initialisation(M), create(M), simul_efun(C), get_bb_id(M),
-	get_root_id(M), get_master_uid(M), flag(M),
-	reactivate_destructed_master(M)
+        initialisation(M), create(A), simul_efun(C), get_master_uid(M),
+        flag(M), reactivate_destructed_master(M)
diff --git a/doc/master/initialisation b/doc/master/initialisation
index e08d34a..89def0a 100644
--- a/doc/master/initialisation
+++ b/doc/master/initialisation
@@ -1,16 +1,15 @@
 SYNOPSIS
-	Initialization of the master object (since 3.2.1).
+        Initialization of the master object.
 
-	As since 3.2.1 the lfuns which are called to initialize
-	objects after a load are defined through driver hooks, and
-	these hooks are cleared prior to a master (re)load, the first
-	function called is inaugurate_master(). Anyway it's not very
-	sensible to do anything earlier as the master is not
-	recognized as such at that time, and so a number of
-	(important) things would not work.
-	Which lfun is called during runtime to reset the master is also
-	depending on the driverhook settings. Arbitrary actions may be done
-	on a reset.
+DESCRIPTION
+        As the lfuns which are called to initialize objects after a load
+        are defined through driver hooks, and these hooks are cleared
+        prior to a master (re)load, the first function called is
+        inaugurate_master(). It's not very sensible to do anything earlier
+        as the master is not recognized as such at that time, and so a
+        number of (important) things would not work. Which lfun is called
+        during runtime to reset the master also depends on the driverhook
+        settings. Arbitrary actions may be done on a reset.
 
 SEE ALSO
-	inaugurate_master(M)
+        inaugurate_master(M)
diff --git a/doc/master/log_error b/doc/master/log_error
index afc3385..9a0fd0c 100644
--- a/doc/master/log_error
+++ b/doc/master/log_error
@@ -1,11 +1,16 @@
 SYNOPSIS
-	void log_error(string file, string err)
+        void log_error(string file, string err, int warn)
 
 DESCRIPTION
-	Announce a compiler-time error in the named file. Whenever the
-	LPC compiler detects an error, this function is called. It
-	should at least log the error in a file, and also announce it
-	to the active user.
+        Announce a compiler-time error (warn == 0) or warning (warn != 0)
+        in the named file.
+
+        Whenever the LPC compiler detects an error or issues a warning,
+        this function is called. It should at least log the error in a file,
+        and also announce it to the active user.
+
+HISTORY
+        LDMud 3.2.8 added the 'warn' argument and the warnings in general.
 
 SEE ALSO
-	runtime_error(M)
+        runtime_error(M)
diff --git a/doc/master/low_memory b/doc/master/low_memory
new file mode 100644
index 0000000..0621925
--- /dev/null
+++ b/doc/master/low_memory
@@ -0,0 +1,56 @@
+SYNOPSIS
+        void low_memory(int what, int limitvalue, int memory, int reservestate)
+
+DESCRIPTION
+        This efun is called when there is a (potential) low-memory situation.
+        Two different limits for the amount of allocated memory can be
+        configured: a soft limit and a hard limit. If the soft limit is
+        exceeded, the driver calls low_memory() but does nothing else.
+        If the hard limit is exceeded, the driver calls low_memory() as well,
+        but initiates a garbage collection directly after the call. The efun
+        is called as well directly before a user-initiated garbage collection
+        is started.
+
+        <what> denotes the type of limit which was exceeded:
+        - NO_MALLOC_LIMIT_EXCEEDED   (0)
+            No limit was exceeded, but a garbage collection was requested by a
+            call to garbage_collection() and it will begin right after
+            low_memory() returns.
+        - SOFT_MALLOC_LIMIT_EXCEEDED (1)
+            The soft limit was exceeded.
+        - HARD_MALLOC_LIMIT_EXCEEDED (2)
+            The hard limit was exceeded. A garbage collection will begin right
+            after low_memory() returns.
+
+        <limit> specifies the numerical value of the limit which was exceeded.
+        It is 0 in case of NO_MALLOC_LIMIT_EXCEEDED.
+
+        <memory> specifies the amount of allocated memory right now.
+
+        <reservestate> specifies the current state of the memory reserves of
+        the driver. The states of the 3 different reserves are OR'ed together.
+        - USER_RESERVE_AVAILABLE   (1)
+          The user reserve is available.
+        - MASTER_RESERVE_AVAILABLE (2)
+          The master reserve is available.
+        - SYSTEM_RESERVE_AVAILABLE (4)
+          The system reserve is available.
+
+        This efun might be used to inform users about the garbage collection
+        and the expected long lag.
+
+        Another possibility is to initiate a garbage collection deliberately
+        at a suitable time (e.g. during the following night) after the soft
+        limit was hit.
+
+REMARKS
+        If in a low_memory condition when the memory reserves have been used
+        already and they could not be re-allocated after a garbage collection
+        slow_shut_down() is called instead of calling this function again.
+
+HISTORY
+        Introduced in 3.3.719
+
+SEE ALSO
+        debug_info(E), garbage_collection(E), slow_shut_down(M), memory(C)
+        malloc(D)
diff --git a/doc/master/make_path_absolute b/doc/master/make_path_absolute
index e0a0019..6093b1a 100644
--- a/doc/master/make_path_absolute
+++ b/doc/master/make_path_absolute
@@ -1,10 +1,10 @@
 SYNOPSIS
-	string make_path_absolute(string str)
+        string make_path_absolute(string str)
 
 DESCRIPTION
-	Absolutize a relative filename str given to the editor. Should
-	return the full pathname of the file to use. Any non-string
-	result will act as ``bad file name''.
+        Absolutize a relative filename str given to the editor. Should
+        return the full pathname of the file to use. Any non-string
+        result will act as "bad file name".
 
 SEE ALSO
-	ed(E), valid_write(M)
+        ed(E), valid_write(M)
diff --git a/doc/master/master b/doc/master/master
index 7d88855..f94f1f7 100644
--- a/doc/master/master
+++ b/doc/master/master
@@ -1,30 +1,30 @@
 NAME
-	master
+        master
 
 DESCRIPTION
-	This directory contains descriptions for the functions that
-	Amylaar's version of the LPC parser, expects to find in the
-	master object (similar to lfuns, but for the master object
-	only). The name of the master object is hardcoded in the
-	parser (to "secure/master").
+        This directory contains descriptions for the functions that
+        Amylaar's version of the LPC parser, expects to find in the
+        master object (similar to lfuns, but for the master object
+        only). The name of the master object is hardcoded in the
+        parser (to "secure/master").
 
-	The master is the gateway between the interpreter and the
-	mudlib to perform actions with mudlib specific effects. Calls
-	to the master by the interpreter have an automatic catch() in
-	effect.
+        The master is the gateway between the interpreter and the
+        mudlib to perform actions with mudlib specific effects. Calls
+        to the master by the interpreter have an automatic catch() in
+        effect. Functions to be called by the driver can be public
+        or static, but not private.
 
-	Note that the master is loaded first of all objects. Thus you
-	shouldn't inherit an other object, nor is the compiler able to
-	search include files (read: they must be specified with full
-	path).
+        Note that the master is loaded first of all objects. Thus you
+        shouldn't inherit an other object, nor is the compiler able to
+        search include files (read: they must be specified with full
+        path).
 
-	Amylaar says: actually, you can inherit, but the file will be
-	loaded then before the master, which isn't good for most
-	files.
+        Amylaar says: actually, you can inherit, but the file will be
+        loaded then before the master, which isn't good for most
+        files.
 
-	Refer to 'master-3.2' and 'master-3.2.1' for the surveys of
-	the masters internals. 
+        Refer to 'master-all' for the survey of the masters internals.
 
 SEE ALSO
-	master-3.2(M), master-3.2.1(M)
-	efun(E), applied(A), concepts(C), driver(D), lpc(LPC)
+        master-all(M)
+        efun(E), applied(A), concepts(C), driver(D), lpc(LPC)
diff --git a/doc/master/master-all b/doc/master/master-all
new file mode 100644
index 0000000..0a325bc
--- /dev/null
+++ b/doc/master/master-all
@@ -0,0 +1,234 @@
+NAME
+        master for LDMud 3.3
+
+DESCRIPTION
+        This directory contains descriptions for the functions that
+        LDMud expects to find in the master object (similar to lfuns,
+        but for the master object only). The name of the master object
+        is hardcoded in the parser, but can also be specified on
+        the commandline (usually to "secure/master").
+
+        The master is the gateway between the interpreter and the
+        mudlib to perform actions with mudlib specific effects. Calls
+        to the master by the interpreter have an automatic catch() in
+        effect. Functions to be called by the driver can be public
+        or static, but not private.
+
+        Note that the master is loaded first of all objects. Thus you
+        shouldn't inherit an other object, nor is the compiler able to
+        search include files (read: they must be specified with full
+        path).
+
+        Amylaar says: actually, you can inherit, but the file will be
+        loaded then before the master, which isn't good for most
+        files.
+
+        A short survey of the things that happen at system startup
+        time:
+
+        The Initialisation functions are called after (re)loading the
+        master to establish the most basic operation parameters.
+
+        The initialisation of the mud on startup follows this schedule:
+          - The interpreter evaluates the commandline options and
+            initializes itself.
+          - The master is loaded, but since the driverhooks are not set yet,
+            no standard initialisation lfun is called.
+          - get_master_uid() is called. If the result is valid, it becomes the
+            masters uid.
+          - inaugurate_master() is called.
+          - flag() is called for each given '-f' commandline option.
+          - get_simul_efun() is called.
+          - the WIZLIST is read in.
+          - epilog() is called. If it returns an array of strings,
+            they are given one at a time as argument to preload().
+            Traditionally, these strings are the filenames of the objects to
+            pre-load, which preload() then does.
+          - The interpreter sets up the IP communication and enters
+            the backend loop.
+
+        If the master is reloaded during system operation, these
+        actions are taken:
+          - The master is loaded, and its initialisation lfun is
+            called according to the settings of the driverhooks (if set).
+          - Any auto-include string and all driverhooks are cleared.
+          - get_master_uid() is called. If the result is valid, it becomes the
+            masters uid and euid.
+          - inaugurate_master() is called.
+
+        If the master was destructed, but couldn't be reloaded, the old
+        master object could be reactivated. In that case:
+          - reactivate_destructed_master() is called.
+          - inaugurate_master() is called.
+
+
+        Security hint: most of these functions are not useful to be
+        called directly from other objects and can be made private or
+        static. Unlike create(), these functions that are applied to
+        the master object are found by the interpreter even if not
+        publicly accessible.
+
+
+
+        A short reference to all expected master functions...
+        ----------------------------------------------------------------
+            Initialisation
+
+        void inaugurate_master ()
+          Perform mudlib specific setup of the master.
+
+        string get_master_uid ()
+          Return the string to be used as uid (and -euid) of a
+          (re)loaded master.
+
+        void flag (string arg)
+          Evaluate an argument given as option '-f' to the driver.
+
+        string *epilog (int eflag)
+          Perform final actions before opening the system to users.
+
+        void preload (string file)
+          Preload a given object.
+
+        void external_master_reload ()
+          Called after a reload of the master on external request.
+
+        void reactivate_destructed_master (int removed)
+          Reactivate a formerly destructed master.
+
+        string|string * get_simul_efun ()
+          Load the simul_efun object and return one or more paths of it.
+
+        ----------------------------------------------------------------
+            Handling of user connections
+
+        object connect ()
+          Handle the request for a new connection.
+
+        void disconnect (object obj)
+          Handle the loss of an IP connection.
+
+        void remove_player (object user)
+          Remove a user object from the system.
+
+        void stale_erq (closure callback)
+          Notify the loss of the erq demon.
+
+        -----------------------------------------------------------------
+            Runtime Support
+
+        object compile_object (string filename)
+          Compile a virtual object.
+
+        mixed include_file (string file, string compiled_file, int sys_include)
+          Return the full pathname for an included file. // 3.2.8 and later
+
+        mixed inherit_file (string file, string compiled_file)
+          Return the full pathname for an inherited object. // 3.2.8 and later
+
+        string get_wiz_name (string file)
+          Return the author of a file.
+
+        string printf_obj_name (object obj)  // 3.2.6 and later
+        string object_name (object obj)      // 3.2.1 .. 3.2.5
+          Return a printable name for an object.
+
+        mixed prepare_destruct (object obj)
+          Prepare the destruction of the given object.
+
+        void quota_demon (void)
+          Handle quotas in times of memory shortage.
+
+        void receive_imp (string host, string msg, int port)
+          Handle a received IMP message.
+
+        void slow_shut_down (int minutes)
+          Schedule a shutdown for the near future.
+
+        void notify_shutdown ()
+          Notify the master about an immediate shutdown.
+
+        -----------------------------------------------------------------
+            Error Handling
+
+        void dangling_lfun_closure ()
+          Handle a dangling lfun-closure.
+
+        void log_error (string file, string err, int warn)
+          Announce a compiler-time error or warning.
+
+        mixed heart_beat_error (object culprit, string err,
+                                string prg, string curobj, int line)
+          Announce an error in the heart_beat() function.
+
+        void runtime_error (string err, string prg, string curobj, int line)
+          Announce a runtime error.
+
+        void runtime_warning (string msg, string curobj, string prg, int line)
+          Announce a runtime warning.
+
+        -----------------------------------------------------------------
+            Security and Permissions
+
+        int privilege_violation (string op, mixed who, mixed arg3, mixed arg4)
+          Validate the execution of a privileged operation.
+
+        int query_allow_shadow (object victim)
+          Validate a shadowing.
+
+        int valid_exec (string name)
+          Validate the rebinding of an IP connection by usage of efun
+          exec().
+
+        int valid_query_snoop (object obj)
+          Validate if the snoopers of an object may be revealed by
+          usage of the efun query_snoop().
+
+        int valid_snoop (object snoopee, object snooper)
+          Validate the start/stop of a snoop.
+
+        ------------------------------------------------------------------
+            Userids and depending Security
+
+        string get_bb_uid()
+          Return the string to be used as root-uid.
+
+        int|string valid_read (string path, string euid, string fun, object caller)
+        int|string valid_write (string path, string euid, string fun, object caller)
+          Validate a reading/writing file operation.
+
+        -----------------------------------------------------------------
+            ed() Support
+
+        string make_path_absolute (string str)
+          Absolutize a relative filename given to the editor.
+
+        int save_ed_setup (object who, int code)
+          Save individual settings of ed for a wizard.
+
+        int retrieve_ed_setup (object who)
+          Retrieve individual settings of ed for a wizard.
+
+        string get_ed_buffer_save_file_name (string file)
+          Return a filename for the ed buffer to be saved into.
+
+        ----------------------------------------------------------------
+            parse_command() Support  (!compat, SUPPLY_PARSE_COMMAND defined)
+
+        string *parse_command_id_list ()
+          Return generic singular ids.
+
+        string *parse_command_plural_id_list ()
+          Return generic plural ids.
+
+        string *parse_command_adjectiv_id_list ()
+          Return generic adjective ids.
+
+        string *parse_command_prepos_list ()
+          Return common prepositions.
+
+        string parse_command_all_word()
+          Return the one(!) 'all' word.
+
+SEE ALSO
+        master(M), efun(E), applied(A), concepts(C), driver(D), lpc(LPC)
diff --git a/doc/master/notify_shutdown b/doc/master/notify_shutdown
index d23cd98..7fd24cc 100644
--- a/doc/master/notify_shutdown
+++ b/doc/master/notify_shutdown
@@ -11,7 +11,7 @@
         done when remove_player() is called because the udp connectivity is
         already gone then.
 
-        If the gamedriver shuts down normally , this is the last function
+        If the gamedriver shuts down normally, this is the last function
         called before the mud shuts down the udp connections and the accepting
         socket for new players.
 
diff --git a/doc/master/parse_command_adjectiv_id_list b/doc/master/parse_command_adjectiv_id_list
new file mode 100644
index 0000000..a27d475
--- /dev/null
+++ b/doc/master/parse_command_adjectiv_id_list
@@ -0,0 +1,14 @@
+SYNOPSIS
+        string *parse_command_adjectiv_id_list(void)
+
+DESCRIPTION
+        Used by parse_command(). Return an array of common
+        adjectives in the installation's native language.
+
+EXAMPLE
+        string * parse_command_adjectiv_id_list() {
+            return ({ "iffish" });
+        }
+
+SEE ALSO
+        parse_command(E)
diff --git a/doc/master/parse_command_all_word b/doc/master/parse_command_all_word
index b57ab05..bf182f0 100644
--- a/doc/master/parse_command_all_word
+++ b/doc/master/parse_command_all_word
@@ -1,9 +1,14 @@
 SYNOPSIS
-	string *parse_command_all_word(void)
+        string parse_command_all_word(void)
 
 DESCRIPTION
-	Used by parse_command(). Return the word for ``all'' in the
-	installations native language.
+        Used by parse_command(). Return the word for "all" in the
+        installation's native language.
+
+EXAMPLE
+        string parse_command_all_word() {
+            return "all";
+        }
 
 SEE ALSO
-	parse_command(E)
+        parse_command(E)
diff --git a/doc/master/parse_command_id_list b/doc/master/parse_command_id_list
new file mode 100644
index 0000000..a7b1a33
--- /dev/null
+++ b/doc/master/parse_command_id_list
@@ -0,0 +1,14 @@
+SYNOPSIS
+        string *parse_command_id_list(void)
+
+DESCRIPTION
+        Used by parse_command(). Return an array of common
+        singular 'thing' ids in the installation's native language.
+
+EXAMPLE
+        string *parse_command_id_list() {
+            return ({ "one", "thing" });
+        }
+
+SEE ALSO
+        parse_command(E)
diff --git a/doc/master/parse_command_plural_id_list b/doc/master/parse_command_plural_id_list
new file mode 100644
index 0000000..5beab22
--- /dev/null
+++ b/doc/master/parse_command_plural_id_list
@@ -0,0 +1,14 @@
+SYNOPSIS
+        string *parse_command_plural_id_list(void)
+
+DESCRIPTION
+        Used by parse_command(). Return an array of common
+        plural 'thing' ids in the installation's native language.
+
+EXAMPLE
+        string *parse_command_pural_id_list() {
+            return: ({ "ones", "things", "them" });
+        }
+
+SEE ALSO
+        parse_command(E)
diff --git a/doc/master/parse_command_prepos_list b/doc/master/parse_command_prepos_list
index 24706ce..0f71a61 100644
--- a/doc/master/parse_command_prepos_list
+++ b/doc/master/parse_command_prepos_list
@@ -1,9 +1,14 @@
 SYNOPSIS
-	string *parse_command_prepos_list(void)
+        string *parse_command_prepos_list(void)
 
 DESCRIPTION
-	Used by parse_command(). Return an array of common
-	prepositions in the installations native language.
+        Used by parse_command(). Return an array of common
+        prepositions in the installation's native language.
+
+EXAMPLE
+        string *parse_command_prepos_list() {
+            return ({ "in", "on", "under", "behind", "beside" });
+        }
 
 SEE ALSO
-	parse_command(E)
+        parse_command(E)
diff --git a/doc/master/preload b/doc/master/preload
index 95f27d7..1eea4a4 100644
--- a/doc/master/preload
+++ b/doc/master/preload
@@ -1,18 +1,18 @@
 SYNOPSIS
-	void preload(string file)
+        void preload(string file)
 
 DESCRIPTION
-	Load the object with the given file name, that was returned by
-	epilog(). It is task of the epilog()/preload() pair to ensure
-	the validity of the given strings (e.g. filtering out comments
-	and blank lines). For preload itself a call_other(file, "???")
-	s sufficient, but it should be guarded by a catch() to avoid
-	premature blockings. Also it is wise to change the master's
-	euid from root_uid to something less privileged for the time
-	of the preload.
+        Load the object with the given file name (which was returned by
+        epilog()). It is the task of the epilog()/preload() pair to ensure
+        the validity of the given strings (e.g. filtering out comments
+        and blank lines). For preload itself a call_other(file, "???")
+        is sufficient, but it should be guarded by a catch() to avoid
+        premature blockings. Also it is wise to change the master's
+        euid from root_uid to something less privileged for the time
+        of the preload.
 
-	You can of course do anything else with the passed strings -
-	preloading is just the traditional task.
+        You can of course do anything else with the passed strings -
+        preloading is just the traditional task.
 
 SEE ALSO
-	epilog(M), master(M)
+        epilog(M), master(M)
diff --git a/doc/master/prepare_destruct b/doc/master/prepare_destruct
index 3121b88..f24391f 100644
--- a/doc/master/prepare_destruct
+++ b/doc/master/prepare_destruct
@@ -1,22 +1,31 @@
 SYNOPSIS
-	mixed prepare_destruct(object obj)
+        mixed prepare_destruct(object obj)
 
 DESCRIPTION
-	Prepare the destruction of the object obj. Return 0 if the
-	object is ready for destruction, any other value will abort
-	the attempt. If a string is returned, an error with the string
-	as message will be issued.
+        Prepare the destruction of the object obj. Return 0 if the
+        object is ready for destruction; any other value will abort
+        the attempt. If a string is returned, an error with the string
+        as message will be issued.
 
-	The interpreter calls this function whenever an object shall
-	be destructed. It expects, that this function cleans the
-	inventory of the object, or the destruct will fail.
-	Furthermore, the function could notify the former inventory
-	objects that their holder is under destruction (useful to move
-	users out of rooms which re updated); and it could announce
-	systemwide the destruction(quitting) of users.
+        The interpreter calls this function whenever an object shall
+        be destructed. It expects that this function cleans the
+        inventory of the object, or the destruct will fail. It is also
+        recommended to clean up all shadows on obj at this point.
 
-	Strange things will happen if the mastor object does not
-	provide this function.
+        Furthermore, the function could notify the former inventory
+        objects that their holder is under destruction (useful to move
+        users out of rooms which are updated); and it could announce
+        systemwide the destruction(quitting) of users.
+
+        Another use for this apply is to take care of any other
+        'cleanup' work needed to be done, like adjusting weights,
+        light levels, and such. Alternatively and traditionally this
+        is done by calling an lfun 'remove()' in the object, which
+        then calls the efun destruct() after performing all the
+        adjustments.
+
+        Strange things will happen if the master object does not
+        provide this function.
 
 SEE ALSO
-	remove_player(M), destruct(E)
+        remove_player(M), destruct(E)
diff --git a/doc/master/printf_obj_name b/doc/master/printf_obj_name
new file mode 100644
index 0000000..401e446
--- /dev/null
+++ b/doc/master/printf_obj_name
@@ -0,0 +1,14 @@
+SYNOPSIS
+        string printf_obj_name(object ob)
+
+DESCRIPTION
+        Return a printable name for an object. This function is called
+        by sprintf() to print a meaningful name in addition to the
+        normal object_name().
+
+HISTORY
+        Renamed in LDMud 3.2.6 from object_name() due to the introduction
+        of an efun with this name.
+
+SEE ALSO
+        sprintf(E), object_name(E)
diff --git a/doc/master/privilege_violation b/doc/master/privilege_violation
index 957a4b9..2918663 100644
--- a/doc/master/privilege_violation
+++ b/doc/master/privilege_violation
@@ -1,63 +1,106 @@
 SYNOPSIS
-	int privilege_violation(string op, mixed who, mixed arg3, mixed arg4)
+        int privilege_violation(string op, mixed who, mixed arg, mixed arg2, mixed arg3)
 
 DESCRIPTION
-	Validate the execution of a privileged operation.
-	op denotes the requested operation, who is the object
-	requesting the operation (object_name or object pointer), arg3
-	and arg4 are additional arguments, depending on the operation.
+        Validate the execution of a privileged operation.
+        op denotes the requested operation, who is the object
+        requesting the operation (file_name or object pointer), <arg>
+        and <arg2> are additional arguments, depending on the operation.
 
-	The function should return >0 to grant the privilege, 0 to
-	indicate that the caller was probably misleaded and the error
-	might be fixed, and anything else to indicate a real
-	violation, that will be handled as run time error.
+        The function should return >0 to grant the privilege, 0 to
+        indicate that the caller was probably misled and the error
+        might be fixed, and anything else to indicate a real
+        violation that will be handled as run time error.
 
-	The privileged operations are:
-	attach_erq_demon  Attach the erq demon to object <arg> with
-	                  flag <args>. 
-	bind_lambda	  Bind a lambda-closure to object arg3.
-	call_out_info	  Return an array with all call_out
-			  informations.
-	nomask simul_efun Attempt to get an efun <arg> via efun:: when
-	                  it is shadowed by a nomask type simul_efun.
-	rename_object	  The object who tries to rename the object
-			  arg3 to the name arg4.
-	send_udp	  Send UDP-data to host arg3.
-	set_auto_include_string Set the string automatically included
-			  by the compiler into every object.
-	get_extra_wizinfo Get the additional wiz-list info for user
-			  arg3.
-	set_extra_wizinfo Set the additional wiz-list info for user
-			  arg3.
-	set_extra_wizinfo_size Set the size of the additional user
-			  info in the wiz-list to arg3.
-	set_driver_hook   : Set hook <arg> to <arg2>.
-	set_this_object	  Set this_object() to arg3.
-	shadow_add_action Add an action to function arg4 that is
-			  shadowed by the object arg3.
-	symbol_variable	  Attempt to make a symbol from a hidden
-			  inherited variable. arg3 is the object in
-			  question, arg4 the number of the variable in
-			  the variable table.
-	wizlist_info	  Return an array with all wiz-list
-			  information.
+        The privileged operations are:
+        attach_erq_demon       : Attach the erq demon to object <arg> with
+                                 flag <arg2>.
+        bind_lambda            : Bind a lambda-closure to object <arg>.
+        call_out_info          : Return an array with all call_out
+                                 informations.
+        configure_interactive  : Set option <arg2> with value <arg3> as
+                                 default (<arg>==0) or for object <arg>.
+        configure_object       : Set option <arg2> with value <arg3> for
+                                 object <arg>.
+        configure_driver       : Set option <arg1> to value(s) <arg2>.
+        enable_telnet          : Enable/disable telnet (<arg2>) for object
+                                 <arg>.
+        execute_command        : Execute command string <arg2> for the object
+                                 <arg>.
+        erq                    : At the request <arg2> is to be sent to the
+                               : erq-demon by the object <who>.
+        garbage_collection     : Object <who> calls the efun
+                                 garbage_collection() with <arg> as filename
+                                 and <arg2> as flag.
+        input_to               : Object <who> redirects the next input from
+                                 commandgiver <arg>, using <arg2> as value
+                                 for the flags. This is used for flag values
+                                 including the 'no bang' option.
+        limited                : Execute <arg> with reduced/changed limits
+                                 1<arg2> (as return by query_limits()).
+        mysql                  : Object <who> attempted to execute mySQL efun
+                                 <arg>.
+        pgsql                  : Object <who> attempted to execute Postgres efun
+                                 <arg>.
+        net_connect            : Attempt to open a connection to host <arg>,
+                                 port <arg2>.
+        nomask simul_efun      : Attempt to get an efun <arg> via efun:: when
+                                 it is shadowed by a nomask type simul_efun.
+        rename_object          : The object <who> tries to rename the object
+                                 <arg> to the name <arg2>.
+        send_udp               : Send UDP-data to host <arg>.
+        get_extra_wizinfo      : Get the additional wiz-list info for user
+                                 <arg>.
+        set_extra_wizinfo      : Set the additional wiz-list info for user
+                                 <arg>.
+        set_extra_wizinfo_size : Set the size of the additional user
+                                 info in the wiz-list to <arg>.
+        set_driver_hook        : Set hook <arg> to <arg2>.
+        set_limits             : Set limits to <arg> (as returned by
+                                 query_limits()).
+        set_max_commands       : Set the max. number of commands interactive
+                                 object <arg> can issue per second to <arg2>.
+        set_this_object        : Set this_object() to <arg>.
+        shadow_add_action      : Add an action to function <arg2> of object
+                                 <arg> from the shadow <who> which is shadowing
+                                 <arg>.
+        shutdown               : Object <who> calls the efun shutdown with <arg>
+                                 as argument.
+        sqlite_pragma          : Execute pragma statement in SQLite.
+        symbol_variable        : Attempt to make a symbol from a hidden
+                                 inherited variable. <arg> is the object in
+                                 question, <arg2> the number of the variable in
+                                 the variable table.
+        variable_list          : An attempt to return the variable values of
+                                 object <arg> is made from a different object
+                                 <who>.
+        wizlist_info           : Return an array with all wiz-list
+                                 information.
 
-	call_out_info() can return the arguments to functions and
-	lambda closures to be called by call_out(); you should
-	consider that read access to closures, mappings and arrays
-	means write access and/or other privileges. 
-	wizlist_info() will return an array which holds, among others,
-	the extra wizlist field. While a toplevel array, if found,
-	will be copied, this does not apply to nested arrays or to any
-	mappings. You might also have some sensitive closures there.
-	send_udp() should be watched as it could be abused to mess up
-	the IMP.
-	The xxx_extra_wizinfo operations are necessary for a proper
-	wizlist and should therefore be restricted to admins.
-	All other operations are potential sources for direct security
-	breaches - any use of them should be scrutinized closely.
+        call_out_info() can return the arguments to functions and
+        lambda closures to be called by call_out(); you should
+        consider that read access to closures, mappings and arrays
+        means write access and/or other privileges.
+        wizlist_info() will return an array which holds, among others,
+        the extra wizlist field. While a toplevel array, if found,
+        will be copied, this does not apply to nested arrays or to any
+        mappings. You might also have some sensitive closures there.
+        send_udp() should be watched as it could be abused.
+        The xxx_extra_wizinfo operations are necessary for a proper
+        wizlist and should therefore be restricted to admins.
+        All other operations are potential sources for direct security
+        breaches - any use of them should be scrutinized closely.
 
-SEE ALSO	
-	simul_efun(C), call_out_info(E), shadow(E), add_action(E),
-	wizlist(E), set_this_object(E), rename_object(E),
-	bind_lambda(E), send_udp(E), set_auto_include_string(E)
+HISTORY
+        LDMud 3.2.10 added the "enable_telnet", "net_connect",
+           "set_max_commands" and "variable_list" violations.
+        LDMud 3.3.563 added the passing of the limits to the "limited"
+           and "set_limits".
+        LDMud 3.2.11/3.3.640 added the "mysql" violation.
+        LDMud 3.3.717 added the "sqlite_pragma" violation.
+
+SEE ALSO
+        net_connect(E), send_erq(E), set_this_object(E), rename_object(E),
+        simul_efun(C), call_out_info(E), shadow(E), add_action(E),
+        bind_lambda(E), send_udp(E), input_to(E), execute_command(E),
+        variable_list(E), enable_telnet(E), mysql(C)
diff --git a/doc/master/query_allow_shadow b/doc/master/query_allow_shadow
index 47d2e95..a331a47 100644
--- a/doc/master/query_allow_shadow
+++ b/doc/master/query_allow_shadow
@@ -1,23 +1,14 @@
-query_allow_shadow(M)
-FUNKTION:
-     int query_allow_shadow(object victim)
+SYNOPSIS
+        int query_allow_shadow(object victim)
 
-DEFINITION:
-     /secure/master.c
+DESCRIPTION
+        Return 1 if previous_object() is allowed to use efun shadow()
+        on object victim, 0 if it is not.
 
-BESCHREIBUNG:
-     Gibt 1 zurueck, wenn das Objekt victim von previous_object() beschattet 
-     werden darf, 0 sonst.
+        The function should deny shadowing on all root objects, else
+        it might query the victim for clearance. Most installations
+        seem to use victim->prevent_shadow(previous_object()) to
+        check if the victim denies being shadowed.
 
-     Die Funktion prueft, ob das Objekt victim ein Root-Objekt ist, oder
-     ob es beim Aufruf von query_prevent_shadow() 1 zurueckgibt.
-
-BEMERKUNGEN:
-     Wird automatisch bei shadow() ausgefuehrt.
-
-SIEHE AUCH:
-     Rechte:	     query_prevent_shadow(L)
-     Generell:	     shadow(E), unshadow(E)
-     Informationen:  query_shadowing(E)
-
-20. Mai 2004 Gloinson
\ No newline at end of file
+SEE ALSO
+        shadow(E)
diff --git a/doc/master/quota_demon b/doc/master/quota_demon
index f7f8d95..08f76fd 100644
--- a/doc/master/quota_demon
+++ b/doc/master/quota_demon
@@ -1,18 +1,18 @@
 SYNOPSIS
-	void quota_demon(void)
+        void quota_demon(void)
 
 DESCRIPTION
-	Handle quotas in times of memory shortage.
+        Handle quotas in times of memory shortage.
 
-	This function is called during the final phase of a garbage
-	collection if the reserved user area couldn't be reallocated.
-	This function (or a called demon) has now the opportunity to
-	remove some (still active) objects from the system. If this does
-	not free enough memory to reallocate the user reserve,
-	slow_shut_down() will be called to start Armageddon.
+        This function is called during the final phase of a garbage
+        collection if the reserved user area couldn't be reallocated.
+        This function (or a called demon) has now the opportunity to
+        remove some (still active) objects from the system. If this does
+        not free enough memory to reallocate the user reserve,
+        slow_shut_down() will be called to start Armageddon.
 
-	Up to now, the wizlist lacks various informations needed to
-	detect the memory-hungriest users.
+        Up to now, the wizlist lacks various informations needed to
+        detect the memory-hungriest users.
 
 SEE ALSO
-	slow_shut_down(M), wizlist(E)
+        slow_shut_down(M)
diff --git a/doc/master/reactivate_destructed_master b/doc/master/reactivate_destructed_master
index e90d2a1..64f68b5 100644
--- a/doc/master/reactivate_destructed_master
+++ b/doc/master/reactivate_destructed_master
@@ -1,15 +1,15 @@
 SYNOPSIS
-	void reactivate_destructed_master(int flag)
+        void reactivate_destructed_master(int flag)
 
 DESCRIPTION
-	This function is called in an already destructed master object
-	if no new master object could be loaded. flag will be 1 if the
-	old master object could be reclaimed form the list of objects
-	that were marked for destruction but not yet terminated. If
-	flag is 0, all variables of the object have been set to 0 and
-	must be re-initialized.
+        This function is called in an already destructed master object
+        if no new master object could be loaded. flag will be 1 if the
+        old master object could be reclaimed from the list of objects
+        that were marked for destruction but not yet terminated. If
+        flag is 0, all variables of the object have been set to 0 and
+        must be re-initialized.
 
-	After this function, inaugurate_master() will be applied again.
+        After this function, inaugurate_master() will be applied again.
 
 SEE ALSO
-	destruct(E), inaugurate_master(M), master(M)
+        destruct(E), inaugurate_master(M), master(M)
diff --git a/doc/master/receive_udp b/doc/master/receive_udp
index a1b58c5..60cb80f 100644
--- a/doc/master/receive_udp
+++ b/doc/master/receive_udp
@@ -1,17 +1,16 @@
 SYNOPSIS
-	void receive_udp(string host, string msg, int hostport)
+        void receive_udp(string host, bytes msg, int hostport)
 
 DESCRIPTION
-	Handle a received IMP message.
+        Handle a received UDP message.
 
-	This function is called for every message received on the IMP
-	port. Usually it is passed on to some object that handles
-	inter mud communications.
+        This function is called for every message received on the UDP
+        port. Usually it is passed on to some object that handles
+        inter-mud communications.
 
 HISTORY
-	The 'hostport' argument was added in 3.2.1.
+        The 'hostport' argument was added in 3.2.1.
+        LDMud 3.2.9 renamed this method from receive_imp().
 
 SEE ALSO
-	send_udp(E), query_udp_port(E)
-
-29.10.2006 Zesstra
+        send_udp(E), query_udp_port(E)
diff --git a/doc/master/remove_player b/doc/master/remove_player
index b70a1fb..10ffd22 100644
--- a/doc/master/remove_player
+++ b/doc/master/remove_player
@@ -1,14 +1,14 @@
 SYNOPSIS
-	void remove_player(object ob)
+        void remove_player(object ob)
 
 DESCRIPTION
-	Remove an interactive user object ob from the system. This
-	function is called by the interpreter to expell remaining
-	users from the system on shutdown in a polite way. If this
-	functions fails to quit/destruct the user, he will be
-	destructed the hard way by the interpreter.
+        Remove an interactive user object ob from the system. This
+        function is called by the interpreter to expell remaining
+        users from the system on shutdown in a polite way. If this
+        functions fails to quit/destruct the user, he will be
+        destructed the hard way by the interpreter.
 
-	This function must not cause runtime errors.
+        This function must not cause runtime errors.
 
 SEE ALSO
-	remove_interactive(E), slow_shut_down(M)
+        remove_interactive(E), slow_shut_down(M)
diff --git a/doc/master/retrieve_ed_setup b/doc/master/retrieve_ed_setup
index 4d92ef0..77213d0 100644
--- a/doc/master/retrieve_ed_setup
+++ b/doc/master/retrieve_ed_setup
@@ -1,9 +1,9 @@
 SYNOPSIS
-	int retrieve_ed_setup(object command_giver)
+        int retrieve_ed_setup(object command_giver)
 
 DESCRIPTION
-	Should return an integer that gives the ed setup flags for the
-	user that is denoted by command_giver.
+        Should return an integer that gives the ed setup flags for the
+        user that is denoted by command_giver.
 
 SEE ALSO
-	save_ed_setup(M)
+        save_ed_setup(M)
diff --git a/doc/master/runtime_error b/doc/master/runtime_error
index d109df8..835d6a5 100644
--- a/doc/master/runtime_error
+++ b/doc/master/runtime_error
@@ -1,16 +1,57 @@
 SYNOPSIS
-	void runtime_error(string err, string prg, string curobj, int line)
+        void runtime_error( string err, string prg, string curobj, int line
+                          , mixed culprit, int caught)
 
 DESCRIPTION
-	This function has to announce a runtime error to the active
-	user. If the user has enough privileges, it might give him the
-	full error message together with the source line. Else it
-	should issue a decent message ("Your sensitive mind notices a
-	wrongness in the fabric of space").
+        This function has to announce a runtime error to the active
+        user. If the user has enough privileges, it might give him the
+        full error message together with the source line. Else it
+        should issue a decent message ("Your sensitive mind notices a
+        wrongness in the fabric of space").
 
-	Note that prg denotes the program actually executed (which
-	might be an inherited one) whereas curobj is just the
-	offending object.
+        <err> is the error message, <prg> is the program executed (which
+        might be an inherited program), <curobj> is the current object at
+        the time of the error. <line> is the linenumber within the program.
+
+        If the error is a normal runtime error, <culprit> is -1. Otherwise,
+        the error occurred during a heartbeat and <culprit> is the object which
+        heart_beat() function was executed. Also, in case of a heartbeat error,
+        the heartbeat for the <culprit> has been turned off.
+
+        If the error is caught on a higher level, <caught> is non-zero;
+        otherwise it is 0.
+
+        Note that any of the the objects or programs might be destructed, ie.
+        might be passed as 0.
+
+        One common pitfall in the implementation of runtime_error() is
+        that runtime_error() itself could run out of evaluation ticks,
+        causing a runtime error itself. The workaround is to use
+        limited() like this:
+
+          static void
+          handle_runtime_error ( string err, string prg, string curobj
+                               , int line)
+          { ... the actual error handler ... }
+
+          static void
+          call_runtime_error (string err, string prg, string curobj, int line)
+          {
+              limited(#'handle_runtime_error, ({ 200000 }), err, prg, curobj
+                     , line);
+          }
+
+          void
+          runtime_error (string err, string prg, string curobj, int line)
+          {
+              limited(#'call_runtime_error, ({ LIMIT_UNLIMITED })
+                     , err, prg, curobj, line);
+          }
+
+HISTORY
+        LDMud 3.2.9 added the <culprit> argument.
+        LDMud 3.2.12/3.3.705 added the <caught> argument.
 
 SEE ALSO
-	log_error(M), heart_beat_error(M), raise_error(E)
+        log_error(M), heart_beat_error(M), runtime_warning(M),
+        raise_error(E), expand_define(E)
diff --git a/doc/master/runtime_warning b/doc/master/runtime_warning
index 80864ab..82e6226 100644
--- a/doc/master/runtime_warning
+++ b/doc/master/runtime_warning
@@ -11,7 +11,7 @@
               (the object itself might already be destructed), or 0 if there
               is none.
         <prog>, <line> determine the name of the program and the line where
-              the error occured if the current object exists, otherwise
+              the error occurred if the current object exists, otherwise
               they are 0.
         <inside_catch> : != 0 if the warning occurs inside a catch().
 
diff --git a/doc/master/save_ed_setup b/doc/master/save_ed_setup
index feaaf71..3e5d0db 100644
--- a/doc/master/save_ed_setup
+++ b/doc/master/save_ed_setup
@@ -1,33 +1,33 @@
 SYNOPSIS
-	int save_ed_setup(object who, int code)
+        int save_ed_setup(object who, int code)
 
 DESCRIPTION
-	Save individual option settings of the builtin ed, encoded
-	into code, for the user denoted by who. These functions are
-	located in the master object so that the local gods can decide
-	what strategy they want to use. suggestions:
-	A setup file for every user.
-		advantages:	transparent to the user
-				independent of user count
-		disadvantage:	extra file access at ed invocation
-	An array in the master object, users are searched by member_array
-		advantage:	easy to implement
-		disadvantage:	performance degradation with high user counts
-	An AVL-tree to access users by name
-		advantage:	can fit any need
-		disadvantage:	hard to implement, will need more
-				overhead on small and medium
-				installations than it can ever make
-				good by lg(usercount) complexity
-	Dedicated flags in every user object.
-		advantages:	easy to implement
-				independent of user count
-				Will also work for nusers w/o file
-				access privileges.
-		disadvantage:	care has to be taken to avoid
-				collision with other uses of the flags
-				in the user object
+        Save individual option settings of the builtin ed, encoded
+        into code, for the user denoted by who. These functions are
+        located in the master object so that the local gods can decide
+        what strategy they want to use. suggestions:
+        A setup file for every user.
+                advantages:        transparent to the user
+                                   independent of user count
+                disadvantage:      extra file access at ed invocation
+        An array in the master object, users are searched by member_array
+                advantage:         easy to implement
+                disadvantage:      performance degradation with high user counts
+        An AVL-tree to access users by name
+                advantage:         can fit any need
+                disadvantage:      hard to implement, will need more
+                                     overhead on small and medium
+                                     installations than it can ever make
+                                     good by lg(usercount) complexity
+        Dedicated flags in every user object.
+                advantages:        easy to implement
+                                   independent of user count
+                                   Will also work for nusers w/o file
+                                     access privileges.
+                disadvantage:      care has to be taken to avoid
+                                     collision with other uses of the flags
+                                     in the user object
 
 SEE ALSO
-	ed(E), retrieve_ed_setup(M), valid_write(M),
-	get_ed_buffer_save_object_name(M)
+        ed(E), retrieve_ed_setup(M), valid_write(M),
+        get_ed_buffer_save_file_name(M)
diff --git a/doc/master/slow_shut_down b/doc/master/slow_shut_down
index 9a7fe8d..3c72869 100644
--- a/doc/master/slow_shut_down
+++ b/doc/master/slow_shut_down
@@ -1,40 +1,44 @@
 SYNOPSIS
-	void slow_shut_down(int minutes)
+        void slow_shut_down(int minutes)
 
 DESCRIPTION
-	Schedule a shutdown for the near future. minutes is the
-	desired time in minutes till the shutdown:
-	 six, if just the user reserve has been put into use.
-	 one, if the (smaller) master reserve has been put into use as
-	      well.
+        Schedule a shutdown for the near future. minutes is the
+        desired time in minutes till the shutdown:
+         six, if just the user reserve has been put into use.
+         one, if the (smaller) master reserve has been put into use as
+              well.
 
-	The interpreter calls this function when it runs low on
-	memory. At this time, it has freed its reserve, but since it
-	won't last long, the interpreter needs to be shut down. The
-	delay is to give the users the opportunity to finish their
-	current tasks, but don't take the 'minutes' for granted, just
-	deduce the urgency from it. 
-	It is possible that the driver may reallocate some memory
-	after the function has been called, and then run again into a
-	low memory situation, calling this function again.
-	This function might load an 'Armageddon' object and tell it
-	what to do. It is the Armageddon object then which performs
-	the shutdown.
+        The interpreter calls this function when it runs low on
+        memory. At this time, it has freed its reserve, but since it
+        won't last long, the interpreter needs to be shut down. The
+        delay is to give the users the opportunity to finish their
+        current tasks, but don't take the 'minutes' for granted, just
+        deduce the urgency from it.
 
-	Technical: The memory handling of the interpreter includes
-	three reserved areas: user, system and master. All three are
-	there to insure that the system shuts down gracefully when the
-	memory runs out: the user area to give the users time to
-	quit normally, the others to enable emergency-logouts when the
-	user reserve is used up as well.
-	The areas are allocated at start of the interpreter, and
-	released when no more memory could be obtained from the host.
-	In such a case, one of the remaining areas is freed (so the
-	operation can continue a short while) and a garbage collection
-	is initiated. If the garbage collection recycles enough memory
-	(either true garbage or by the aid of the quota_demon) to
-	reallocate the areas, all is fine, else the system shut down
-	is invoked by a call to this function. 
+        It is possible that the driver may reallocate some memory
+        after the function has been called, and then run again into a
+        low memory situation, calling this function again.
+
+        This function might load an 'Armageddon' object and tell it
+        what to do. It is the Armageddon object then which performs
+        the shutdown.
+
+        Technical: The memory handling of the interpreter includes
+        three reserved areas: user, system and master. All three are
+        there to insure that the system shuts down gracefully when the
+        memory runs out: the user area to give the users time to
+        quit normally, the others to enable emergency-logouts when the
+        user reserve is used up as well.
+
+        The areas are allocated at start of the interpreter, and
+        released when no more memory could be obtained from the host.
+        In such a case, one of the remaining areas is freed (so the
+        operation can continue a short while) and a garbage collection
+        is initiated. If the garbage collection recycles enough memory
+        (either true garbage or by the aid of the quota_demon) to
+        reallocate the areas, all is fine, else the system shut down
+        is invoked by a call to this function.
 
 SEE ALSO
-	quota_demon(M), notify_shutdown(M), shutdown(E), malloc(D), memory(C)
+        quota_demon(M), notify_shutdown(M), shutdown(E), malloc(D), memory(C)
+        low_memory(M)
diff --git a/doc/master/stale_erq b/doc/master/stale_erq
index a05ca31..8a5bcff 100644
--- a/doc/master/stale_erq
+++ b/doc/master/stale_erq
@@ -1,17 +1,17 @@
 SYNOPSIS
-	void stale_erq (closure callback)
+        void stale_erq (closure callback)
 
 DESCRIPTION
-	Notify the loss of the erq demon.
-	Argument is the callback closure set for an erq request.
+        Notify the loss of the erq demon.
+        Argument is the callback closure set for an erq request.
 
-	If the erq connection dies prematurely, the driver will call
-	this lfun for every pending request with set callback. This
-	function should notify the originating object that the answer
-	will never arrive. 
+        If the erq connection dies prematurely, the driver will call
+        this lfun for every pending request with set callback. This
+        function should notify the originating object that the answer
+        will never arrive.
 
 HISTORY
-	Introduced in 3.2.1@61.
+        Introduced in 3.2.1@61.
 
 SEE ALSO
-	erq(C)
+        erq(C)
diff --git a/doc/master/valid_exec b/doc/master/valid_exec
index 2c0b67b..04f2c62 100644
--- a/doc/master/valid_exec
+++ b/doc/master/valid_exec
@@ -1,15 +1,15 @@
 SYNOPSIS
-	int valid_exec(string name, object ob, object obfrom)
+        int valid_exec(string name, object ob, object obfrom)
 
 DESCRIPTION
-	Validate the rebinding of an IP connection by usage of efun
-	exec(). Arguments are the <name> of the _program_ attempting
-	to rebind the connection, the object <ob> to receive the
-	connection, and the object <obfrom> giving the connection.
-	Note that the program name is not the object_name() of the
-	object, and has no leading slash.
+        Validate the rebinding of an IP connection by usage of efun
+        exec(). Arguments are the <name> of the _program_ attempting
+        to rebind the connection, the object <ob> to receive the
+        connection, and the object <obfrom> giving the connection.
+        Note that the program name is not the file_name() of the
+        object, and has no leading slash.
 
-	Return 0 to disallow the action, any other value to allow it.
+        Return 0 to disallow the action, any other value to allow it.
 
 SEE ALSO
-	exec(E)
+        exec(E)
diff --git a/doc/master/valid_query_snoop b/doc/master/valid_query_snoop
index e92378a..9be180f 100644
--- a/doc/master/valid_query_snoop
+++ b/doc/master/valid_query_snoop
@@ -1,12 +1,12 @@
 SYNOPSIS
-	valid_query_snoop(object ob)
+        int valid_query_snoop(object ob)
 
 DESCRIPTION
-	Should return 1 if previous_object() (the one that called the
-	efun query_snoop()) is allowed to query wether ob is being
-	snooped, 0 if not.
+        Should return 1 if previous_object() (the one that called the
+        efun query_snoop()) is allowed to query whether ob is being
+        snooped, 0 if not.
 
-	The master object is always allowed to use query_snoop().
+        The master object is always allowed to use query_snoop().
 
 SEE ALSO
-	valid_snoop(M), query_snoop(E), snoop(E)
+        valid_snoop(M), query_snoop(E), snoop(E)
diff --git a/doc/master/valid_read b/doc/master/valid_read
index 2dafbae..45f0bb6 100644
--- a/doc/master/valid_read
+++ b/doc/master/valid_read
@@ -1,32 +1,40 @@
 SYNOPSIS
-	string valid_read(string path, string uid, string func, object ob)
+        string valid_read(string path, string uid, string func, object ob)
 
 DESCRIPTION
-	This function is called to check if the object ob with the
-	user-id uid has read permissions for the file given by path
-	for the operation named by func. It should return 0 if
-	permission is denied, or the normalized path if permission is
-	granted. You can also return 1 to indicate that the path can
-	be used unchanged.
+        This function is called to check if the object ob with the
+        user-id uid has read permissions for the file given by path
+        for the operation named by func. It should return 0 if
+        permission is denied, or the normalized path if permission is
+        granted. You can also return 1 to indicate that the path can
+        be used unchanged.
 
-	The returned pathname must not contain ``..'', a leading /
-	will be stripped by the interpreter.
+        The returned pathname must not contain "..", a leading /
+        will be stripped by the interpreter. By default, the returned
+        path must also not contain space characters; if the driver
+        is instructed to allow them, the preprocessor macro
+        __FILENAME_SPACES__ is defined.
 
-	Func denotes the efun call or other operation that caused
-	valid_read() to be called:
-	ed_start (check if the file to be edited is readable),
-	file_size,
-	get_dir,
-	print_file (efun cat()),
-	read_bytes,
-	read_file,
-	restore_object,
-	tail.
+        Func denotes the efun call or other operation that caused
+        valid_read() to be called:
 
-	Note that this function is called in compat mode as well. If
-	you need to be compatible with the old 2.4.5-mudlib, redirect
-	these calls to the valid_read/valid_write in the user
-	object.
+          copy_file
+          ed_start (check if the file to be edited is readable),
+          file_size,
+          get_dir,
+          print_file (efun cat()),
+          read_bytes,
+          read_file,
+          restore_object,
+          tail.
+
+        For restore_object(), the <path> passed is the filename as given
+        in the efun call.
+
+        This function is called in compat mode as well. If
+        you need to be compatible with the old 2.4.5-mudlib, redirect
+        these calls to the valid_read/valid_write in the user
+        object.
 
 SEE ALSO
-	valid_write(M), make_path_absolute(M)
+        valid_write(M), make_path_absolute(M)
diff --git a/doc/master/valid_snoop b/doc/master/valid_snoop
index 5bff987..0b8d195 100644
--- a/doc/master/valid_snoop
+++ b/doc/master/valid_snoop
@@ -1,8 +1,8 @@
 SYNOPSIS
-	int valid_snoop(object me, object you)
+        int valid_snoop(object me, object you)
 
 DESCRIPTION
-	Should return 1 if me is allowed to snoop you, 0 if not.
+        Should return 1 if me is allowed to snoop you, 0 if not.
 
 SEE ALSO
-	snoop(E), query_snoop(E), valid_query_snoop(M)
+        snoop(E), query_snoop(E), valid_query_snoop(M)
diff --git a/doc/master/valid_trace b/doc/master/valid_trace
new file mode 100644
index 0000000..a3776e8
--- /dev/null
+++ b/doc/master/valid_trace
@@ -0,0 +1,16 @@
+SYNOPSIS
+        int valid_trace(string what, int|string arg)
+
+DESCRIPTION
+        Check if the interactive user is allowed to use tracing.
+
+        The argument <what> denotes the action for which permission is to be
+        checked, <arg> is the argument given to the traceing efun:
+
+        "trace"        Is the user allowed to use tracing?
+                       <arg> is the tracelevel argument given.
+        "traceprefix"  Is the user allowed to set a traceprefix?
+                       <arg> is the prefix given.
+
+SEE ALSO
+        trace(E), showsmallnewmalloced(D), malloc(D), status(D), memory(C)
diff --git a/doc/master/valid_write b/doc/master/valid_write
index 31fe43b..3f73ca3 100644
--- a/doc/master/valid_write
+++ b/doc/master/valid_write
@@ -1,33 +1,52 @@
 SYNOPSIS
-	string valid_write(string path, string uid, string func, object ob)
+        string valid_write(string path, string uid, string func, object ob)
 
 DESCRIPTION
-	This function is called to check if the object ob with the
-	user-id uid has write permissions to the file given by path
-	for the operation named by func. It should return 0 if
-	permission is denied, or the normalized path if permission is
-	granted. You can also return 1 to indicate that the path can
-	be used unchanged.
+        This function is called to check if the object ob with the
+        user-id uid has write permissions to the file given by path
+        for the operation named by func. It should return 0 if
+        permission is denied, or the normalized path if permission is
+        granted. You can also return 1 to indicate that the path can
+        be used unchanged.
 
-	The returned pathname must not contain ``..'', a leading /
-	will be stripped by the interpreter.
+        The returned pathname must not contain "..", a leading /
+        will be stripped by the interpreter. By default, the returned
+        path must also not contain space characters; if the driver
+        is instructed to allow them, the preprocessor macro
+        __FILENAME_SPACES__ is defined.
 
-	Func denotes the efun call or other operation that caused
-	valid_write() to be called:
-	cindent,
-	do_rename (efun rename(), for the old and then for the new name),
-	ed_start (whenever the builtin ed tries to write to a file),
-	mkdir,
-	remove_file (efun rm()),
-	rmdir,
-	save_object,
-	write_bytes,
-	write_file.
+        Func denotes the efun call or other operation that caused
+        valid_write() to be called:
 
-	Note that this function is called in compat mode as well. If
-	you need to be compatible with the old 2.4.5-mudlib, redirect
-	these calls to the valid_read/valid_write in the user
-	object.
+          copy_file          : for the target file or directory name
+          rename_from        : efun rename(), for the original name
+          rename_to          : efun rename(), for the new name
+          ed_start           : whenever the builtin ed tries to write to a file
+          garbage_collection
+          mkdir
+          memdump
+          objdump
+          opcdump
+          remove_file        : efun rm()
+          rmdir
+          save_object
+          write_bytes
+          write_file
+
+        For save_object(), the <path> passed is the filename as given
+        in the efun call. If for this efun a filename ending in ".c" is
+        returned, the ".c" will be stripped from the filename.
+
+        This function is called in compat mode as well. If
+        you need to be compatible with the old 2.4.5-mudlib, redirect
+        these calls to the valid_read/valid_write in the user
+        object.
+
+HISTORY
+        LDMud 3.2.8 adds operation "copy_file", and replaces "do_rename"
+        by "rename_from" and "rename_to".
+        LDMud 3.2.9 adds operation "garbage_collection".
+        LDMud 3.3.526 adds operation "memdump".
 
 SEE ALSO
-	valid_read(M), make_path_absolute(M)
+        valid_read(M), make_path_absolute(M)
