diff --git a/secure/simul_efun/set_is_wizard.c b/secure/simul_efun/set_is_wizard.c
new file mode 100644
index 0000000..001ccdb
--- /dev/null
+++ b/secure/simul_efun/set_is_wizard.c
@@ -0,0 +1,137 @@
+/* These are the special commands from the driver that are activated with
+ * set_is_wizard(). These functions must be added to the player object.
+ * Also set_is_wizard() must be called in the corresponding player object,
+ * not as an (simul-)efun.
+ */
+
+#include <commands.h>
+#include <driver_info.h>
+
+/* is_wizard:
+ *  1: has actions,
+ *  0: never had actions,
+ * -1: had actions once.
+ */
+private nosave int is_wizard;
+
+private int driver_malloc(string str)
+{
+    if(is_wizard <= 0)
+        return 0;
+
+    if(!sizeof(str))
+    {
+        write(efun::driver_info(DI_STATUS_TEXT_MALLOC));
+        return 1;
+    }
+
+    if(str == "extstats")
+    {
+        write(efun::driver_info(DI_STATUS_TEXT_MALLOC_EXTENDED));
+        return 1;
+    }
+
+    return 0;
+}
+
+private int driver_dumpallobj(string str)
+{
+    if(is_wizard <= 0 || sizeof(str))
+        return 0;
+
+    write("Dumping to /OBJ_DUMP ... ");
+    efun::dump_driver_info(DDI_OBJECTS);
+    efun::dump_driver_info(DDI_OBJECTS_DESTRUCTED);
+    write("done\n");
+    return 1;
+}
+
+private int driver_opcdump(string str)
+{
+    if(is_wizard <= 0 || sizeof(str))
+        return 0;
+
+    efun::dump_driver_info(DDI_OPCODES);
+    return 1;
+}
+
+private int driver_status(string str)
+{
+    int opt;
+    if(is_wizard <= 0)
+        return 0;
+
+    switch(str || "")
+    {
+        case "":
+            opt = DI_STATUS_TEXT_MEMORY;
+            break;
+
+        case "tables":
+        case " tables":
+            opt = DI_STATUS_TEXT_TABLES;
+            break;
+
+        case "swap":
+        case " swap":
+            opt = DI_STATUS_TEXT_SWAP;
+            break;
+
+        case "malloc":
+        case " malloc":
+            opt = DI_STATUS_TEXT_MALLOC;
+            break;
+
+        case "malloc extstats":
+        case " malloc extstats":
+            opt = DI_STATUS_TEXT_MALLOC_EXTENDED;
+            break;
+
+        default:
+            return 0;
+    }
+
+    write(efun::driver_info(opt));
+    return 1;
+}
+
+int set_is_wizard(varargs <object|int>* args)
+{
+    int oldval = is_wizard;
+
+    if(!sizeof(args))
+        raise_error("Too few arguments to set_is_wizard\n");
+    if(sizeof(args) > 2)
+        raise_error("Too many arguments to set_is_wizard\n");
+    if(!objectp(args[0]))
+        raise_error("Bad arg 1 to set_is_wizard()\n");
+    if(args[0] != this_object())
+        raise_error("Only set_is_wizard for the current object supported\n");
+    if(this_player() != this_object())
+        raise_error("The current object must be this_player() for set_is_wizard()\n");
+    if(sizeof(args) == 2 && !intp(args[1]))
+        raise_error("Bad arg 2 to set_is_wizard()\n");
+
+    if(sizeof(args) == 2 && !args[1])
+    {
+        if(is_wizard > 0)
+            is_wizard = -1;
+    }
+    else if(sizeof(args) == 2 && args[1]<0)
+    {
+         // Just return the old value.
+    }
+    else
+    {
+        if(!is_wizard)
+        {
+            add_action(#'driver_malloc, "malloc");
+            add_action(#'driver_dumpallobj, "dumpallobj");
+            add_action(#'driver_opcdump, "opcdump");
+            add_action(#'driver_status, "status", AA_NOSPACE);
+        }
+        is_wizard = 1;
+    }
+
+    return oldval > 0;
+}
