diff --git a/secure/debug.c b/secure/debug.c
new file mode 100644
index 0000000..f5a07ec
--- /dev/null
+++ b/secure/debug.c
@@ -0,0 +1,86 @@
+// MorgenGrauen MUDlib
+/** \file /file.c
+* Kurzbeschreibung.
+* Langbeschreibung...
+* \author <Autor>
+* \date <date>
+* \version $Id$
+*/
+/* Changelog:
+*/
+#pragma strict_types,save_types,rtt_checks
+#pragma no_clone
+#pragma no_inherit
+#pragma no_shadow
+#pragma pedantic
+#pragma range_check
+
+#include <functionlist.h>
+#include <lpctypes.h>
+
+#include <defines.h>
+#include <wizlevels.h>
+
+/** \def DEBUG
+  Outputs debug message to Maintainer, if Mainteiner is logged in. 
+*/
+#ifndef DEBUG
+#define DEBUG(x)  if (find_player("zesstra"))\
+            tell_object(find_player("zesstra"),\
+                                      "DDBG: "+x+"\n")
+#endif
+
+/** \fn set_object_next_reset(ob,zeit)
+  \brief setzt den naechsten Reset auf 'zeit'
+  \details setzt in Objekten den naechsten Reset - nur fuer EM+
+  \param[in] ob
+  (object) Objekt des Reset geaendert wird.
+  \param[in] zeit
+  (int) Zeit bis zum naechsten Reset.
+  \return (string) Gibt die uebergebene Zeit bis zum bisherigen Reset.
+  \author Zesstra
+  \date 06.10.2007
+  \sa set_object_heart_beat()
+*/
+// * Reset eines Objektes ein/ausschalten
+int set_object_next_reset(mixed ob, int zeit) {
+
+  if (stringp(ob))
+    ob=find_object(ob);
+
+  if (objectp(ob) && ELDER_SECURITY)
+  //if (objectp(ob) && SPECIAL_SECURITY && !clonep(ob))
+      return funcall(bind_lambda(#'efun::set_next_reset,ob),zeit);
+
+  return -2;
+}
+
+mixed query_variable(object ob, string var)
+{
+  if (!previous_object() || !IS_ARCH(geteuid(previous_object())) 
+      || !this_interactive() || !IS_ARCH(this_interactive())
+      || getuid(ob)==ROOTID )
+  {
+    write("Du bist kein EM oder Gott!\n");
+    return 0;
+  }
+
+  log_file("ARCH/QV", sprintf("%s: %O inquires var %s in %O\n",
+                              ctime(time()),this_interactive(),var,ob));
+  
+  mixed res = variable_list(ob, RETURN_FUNCTION_NAME|RETURN_FUNCTION_FLAGS|
+                                RETURN_FUNCTION_TYPE|RETURN_VARIABLE_VALUE);
+  int index = member(res,var);
+  if (index > -1)
+  {
+    return ({res[index],res[index+1],res[index+2],res[index+3]});
+  }
+
+  return 0;
+}
+
+protected void create() {
+  // secure_level() in *_SECURITY() prueft auf die EUID
+  seteuid(getuid(ME));
+}
+
