diff --git a/secure/pubmaster.c b/secure/pubmaster.c
new file mode 100644
index 0000000..a124889
--- /dev/null
+++ b/secure/pubmaster.c
@@ -0,0 +1,307 @@
+// MorgenGrauen MUDlib
+//
+// Pubmaster.c -- Registrating the heal-values of pubs
+//
+// $Id: pubmaster.c 9373 2015-10-22 19:02:42Z Zesstra $
+
+#include <pub.h>
+
+#define SAVEFILE "/secure/ARCH/pub"
+#define CLOGFILE "/log/ARCH/pubchange"
+#define DUMPFILE "/log/ARCH/PUBS"
+#define DUMPLIST "/log/ARCH/PUBLIST"
+
+#define DUMPF(str) write_file(DUMPFILE,str)
+#define DUMPL(str) write_file(DUMPLIST,str)
+
+#pragma strong_types
+
+#include <properties.h>
+#include <wizlevels.h>
+#include <health.h>
+
+mapping pubs;
+nosave string  *watchprops;
+nosave int     watchsize;
+
+void create()
+{
+    seteuid(getuid(this_object()));
+    if (clonep(this_object()))
+    {
+        destruct(this_object());
+        return;
+    }
+    if (!restore_object(SAVEFILE))
+        pubs = ([]);
+
+    watchprops = ({ P_HP, P_SP, P_ALCOHOL, P_DRINK, P_FOOD, P_VALUE,
+                    "rate", "delay" });
+    watchsize  = sizeof(watchprops);
+}
+
+void save_data()
+{
+    save_object(SAVEFILE);
+}
+
+int CalcMax(mapping info, string fn)
+{   float heal,delay,factor;
+
+    if (!info || !mappingp(info))
+        return 0;
+    if ( (info[P_ALCOHOL]+info[P_DRINK]+info[P_FOOD])<=0     ||
+         (info[P_ALCOHOL] && !(info[P_DRINK]||info[P_FOOD])) )
+        return 0;
+
+    delay = to_float(info["delay"]);
+    if (delay>PUB_MAXDELAY)
+        delay=PUB_MAXDELAY;
+
+    if (!stringp(fn) || !member(pubs,fn)) // External query?
+        factor=1.0;
+    else
+        factor=pubs[fn,1];
+
+    heal = to_float( info[P_ALCOHOL]*ALCOHOL_DELAY +
+                     info[P_DRINK]  *DRINK_DELAY   +
+                     info[P_FOOD]   *FOOD_DELAY    ) 
+           * PUB_SOAKMULT
+           / to_float( ALCOHOL_DELAY + DRINK_DELAY + FOOD_DELAY );
+    heal = heal + 
+           to_float(info[P_VALUE])/(PUB_VALUEDIV+to_float(info["rate"])) -
+           exp(to_float(info["rate"])/PUB_RATEDIV1)/PUB_RATEDIV2;
+    heal = heal * factor *
+           (PUB_WAITOFFS + (exp(delay/PUB_WAITDIV1)/PUB_WAITDIV2));
+
+    return to_int(heal);
+}
+
+int RegisterItem(string item, mapping info)
+{   object pub;
+    string fn;
+    int    i,c,cmax,max,heal;
+
+    if (!objectp(pub=previous_object()))
+        return -1;
+    if (member(inherit_list(pub), "/std/room/pub.c") == -1)
+        return -1;
+    if (!item || !stringp(item) || !info || !mappingp(info))
+        return -2;
+
+    if (info["rate"]<1)
+        info["rate"]=1;
+    if (info["delay"]<0)
+        info["delay"]=0;
+
+    // Loadname, weil VCs als ein Pub zaehlen sollen (das Tutorial hat ein
+    // VC-Pub fuer jeden Spieler. Die sollen nicht alle einzeln hier erfasst
+    // werden.
+    fn = load_name(pub);
+    c = 0;
+
+    heal=info[P_HP]+info[P_SP];
+
+    if (!member(pubs,fn))
+        pubs += ([ fn : ([]); 1.0 ]);
+
+    if (!member(pubs[fn],item))
+    {
+        max=CalcMax(info,fn);
+        pubs[fn] += ([ 
+            item : ([
+                P_HP            : info[P_HP],
+                P_SP            : info[P_SP],
+                P_VALUE         : info[P_VALUE],
+                P_DRINK         : info[P_DRINK],
+                P_ALCOHOL       : info[P_ALCOHOL],
+                P_FOOD          : info[P_FOOD],
+                "rate"          : info["rate"],
+                "delay"         : info["delay"],
+                "maxheal"       : heal,
+                "maxrate"       : 10
+                ])
+            ]);
+        c=1;
+    }
+    else
+    {
+        for (i=watchsize-1;i>=0;i--)
+            if (info[watchprops[i]]!=pubs[fn][item][watchprops[i]])
+            {
+                pubs[fn][item][watchprops[i]]=info[watchprops[i]];
+                c=1;
+            }
+        if (heal>pubs[fn][item]["maxheal"])
+        {
+            pubs[fn][item]["maxheal"]=heal;
+            c=1;
+        }
+        max=pubs[fn][item]["maxset"];
+        cmax=CalcMax(info,fn);
+        if (cmax>max)
+            max=cmax;
+    }
+
+    if (c)
+        save_data();
+
+    if ( heal>max || info["rate"]>pubs[fn][item]["maxrate"] )
+        return 0;
+
+    return 1;
+}
+
+private int allowed()
+{
+  if (previous_object() && geteuid(previous_object())==ROOTID)
+    return 1;
+  if (!process_call() && previous_object() && ARCH_SECURITY)
+    return 1;
+  return 0;
+}
+
+
+
+int SetMaxHeal(string pub, string item, int new)
+{   int old;
+
+    if (!allowed())
+        return -2;
+    if (!pub || !stringp(pub) || !item || !stringp(item) || !new)
+        return -1;
+    if (!member(pubs,pub) || !member(pubs[pub],item))
+        return 0;
+    old=pubs[pub][item]["maxset"];
+    pubs[pub][item]["maxset"]=new;
+    write_file(CLOGFILE,
+        sprintf("%s - %s\n%s:%s HEAL %d > %d\n",
+            dtime(time()),
+            (this_interactive() ? getuid(this_interactive()) : "???"),
+            pub,item,old,new));
+    save_data();
+    return 1;
+}
+
+int SetMaxRate(string pub, string item, int new)
+{   int old;
+
+    if (!allowed())
+        return -2;
+    if (!pub || !stringp(pub) || !item || !stringp(item) || !new)
+        return -1;
+    if (!member(pubs,pub) || !member(pubs[pub],item))
+        return 0;
+    old=pubs[pub][item]["maxrate"];
+    pubs[pub][item]["maxrate"]=new;
+    write_file(CLOGFILE,
+        sprintf("%s - %s\n%s:%s RATE %d > %d\n",
+            dtime(time()),
+            (this_interactive() ? getuid(this_interactive()) : "???"),
+            pub,item,old,new));
+    save_data();
+    return 1;
+}
+
+int SetPubFactor(string pub, float new)
+{   float old;
+
+    if (!allowed())
+        return -2;
+    if (!pub || !stringp(pub) || !new || !floatp(new) || new<1.0 || new>1.5)
+        return -1;
+    if (!member(pubs,pub))
+        return 0;
+    old=pubs[pub,1];
+    pubs[pub,1]=new;
+    write_file(CLOGFILE,
+        sprintf("%s - %s\n%s FACT %6.4f > %6.4f\n",
+            dtime(time()),
+            (this_interactive() ? getuid(this_interactive()) : "???"),
+            pub,old,new));
+    save_data();
+    return 1;
+}
+
+varargs int ClearPub(string pub, string item)
+{
+    if (!allowed())
+        return -2;
+    if (!pub || !stringp(pub) || (item && !stringp(item)))
+        return -1;
+    if (!member(pubs,pub))
+        return 0;
+    if (!item)
+        m_delete(pubs,pub);
+    else if (!member(pubs[pub],item))
+        return 0;
+    else
+      m_delete(pubs[pub],item);
+    save_data();
+    return 1;
+}
+
+int DumpPubs()
+{   string *publist,*itemlist;
+    int    pubi,itemi;
+
+    if (!allowed())
+        return -2;
+    if (file_size(DUMPFILE)>1)
+        rm(DUMPFILE);
+    if (file_size(DUMPLIST)>1)
+        rm(DUMPLIST);
+    DUMPF(sprintf("Kneipen-Menu-Liste vom %s:\n\n",dtime(time())));
+    DUMPL(sprintf("Kneipenliste vom %s:\n\n",dtime(time())));
+    publist=sort_array(m_indices(pubs),#'</*'*/);
+    if ((pubi=sizeof(publist))<1)
+    {
+        DUMPF("No pubs in List\n");
+        DUMPL("No pubs in List\n");
+        return -1;
+    }
+    for (--pubi;pubi>=0;pubi--)
+    {
+        DUMPL(sprintf("%-'.'70s %6.4f\n",
+            publist[pubi],pubs[publist[pubi],1]));
+        DUMPF(sprintf("PUB: %s\nFAC: %6.4f\n\n",
+            publist[pubi],pubs[publist[pubi],1]));
+        itemlist=sort_array(m_indices(pubs[publist[pubi]]),#'</*'*/);
+        if ((itemi=sizeof(itemlist))<1)
+        {
+            DUMPF("  No items in list\n\n");
+            continue;
+        }
+        DUMPF(sprintf(
+            "  %|'_'30.30s %5s %3s %3s %3s %3s %3s %2s %2s %3s %3s\n",
+            "ITEM","VALUE","HPH","SPH","DRI","ALC","FOO","RA","MR","MAX",
+            "FND"));
+        for (--itemi;itemi>=0;itemi--)
+            DUMPF(sprintf(
+                "  %-'.'30.30s %5d %3d %3d %3d %3d %3d %2d %2d %3d %3d\n",
+                itemlist[itemi],
+                (int)pubs[publist[pubi]][itemlist[itemi]][P_VALUE],
+                (int)pubs[publist[pubi]][itemlist[itemi]][P_HP],
+                (int)pubs[publist[pubi]][itemlist[itemi]][P_SP],
+                (int)pubs[publist[pubi]][itemlist[itemi]][P_DRINK],
+                (int)pubs[publist[pubi]][itemlist[itemi]][P_ALCOHOL],
+                (int)pubs[publist[pubi]][itemlist[itemi]][P_FOOD],
+                (int)pubs[publist[pubi]][itemlist[itemi]]["rate"],
+                (int)pubs[publist[pubi]][itemlist[itemi]]["maxrate"],
+                (int)pubs[publist[pubi]][itemlist[itemi]]["maxset"],
+                (int)pubs[publist[pubi]][itemlist[itemi]]["maxheal"] ));
+        DUMPF("\n");
+    }
+    return sizeof(publist);
+}
+
+// bereinigt die Kneipenliste von allen Kneipen, die auf der Platte nicht mehr
+// existieren.
+public void CleanPublist() {
+  foreach(string pub: pubs) {
+    if (file_size(pub+".c") <= 0)
+      m_delete(pubs,pub);
+  }
+  save_data();
+}
+
