diff --git a/secure/simul_efun/simul_efun.c b/secure/simul_efun/simul_efun.c
index a4b654a..680f4d5 100644
--- a/secure/simul_efun/simul_efun.c
+++ b/secure/simul_efun/simul_efun.c
@@ -208,11 +208,6 @@
      // soll jemand neues gesnoopt werden?
      if(snoopee)
      {
-#if __BOOT_TIME__ < 1588106971
-        // Diese Uptime duerfen nur EM+ und Sheriff snoopen.
-        if (!ARCH_SECURITY && !IS_DEPUTY(snooper))
-          return 0;
-#endif
         // Jemand mit niedrigerem Level kann keinen hoeherleveligen snoopen
         // lassen.
         if ( PO != snooper
@@ -437,44 +432,6 @@
   return "/secure/master"->query_wiz_level(player);
 }
 
-#ifdef __ALISTS__
-// * Element aus Alist loeschen (by key)
-mixed *remove_alist(mixed key,mixed *alist)
-{
-  int i,j;
-
-  if (!pointerp(alist) || !sizeof(alist))
-    return alist;
-  if (!pointerp(alist[0]))
-  {
-    if ((i=assoc(key,alist))<0)
-      return alist;
-    return alist[0..i-1]+alist[i+1..];
-  }
-  i = assoc(key,alist[0]);
-  if ((i=assoc(key,alist[0]))<0)
-    return alist;
-  alist=alist[0..];
-  for (j=sizeof(alist)-1;j>=0;j--)
-    alist[j]=alist[j][0..i-1]+alist[j][i+1..];
-  return alist;
-}
-
-// * Element aus Alist loeschen (by pos)
-mixed *exclude_alist(int i,mixed *alist)
-{
-  int j;
-  if (!pointerp(alist) || !sizeof(alist) || i<0)
-    return alist;
-  if (!pointerp(alist[0]))
-    return alist[0..i-1]+alist[i+1..];
-  alist=alist[0..]; /* Create PHYSICAL copy of alist */
-  for (j=sizeof(alist)-1;j>=0;j--)
-    alist[j]=alist[j][0..i-1]+alist[j][i+1..];
-  return alist; /* order_alist is NOT necessary - see /doc/LPC/alist */
-}
-#endif // __ALISTS__
-
 // * German version of ctime()
 #define TAGE ({"Son","Mon","Die","Mit","Don","Fre","Sam"})
 #define MONATE ({"Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug",\
@@ -759,12 +716,6 @@
   raise_error("Available only for root\n");
 }
 
-#if __EFUN_DEFINED__(export_uid)
-nomask void export_uid(object ob) {
-  raise_error("Available only for root\n");
-}
-#endif
-
 // * Jetzt auch closures
 int process_flag;
 
diff --git a/secure/simul_efun/spare/simul_efun.c b/secure/simul_efun/spare/simul_efun.c
index a4b654a..680f4d5 100644
--- a/secure/simul_efun/spare/simul_efun.c
+++ b/secure/simul_efun/spare/simul_efun.c
@@ -208,11 +208,6 @@
      // soll jemand neues gesnoopt werden?
      if(snoopee)
      {
-#if __BOOT_TIME__ < 1588106971
-        // Diese Uptime duerfen nur EM+ und Sheriff snoopen.
-        if (!ARCH_SECURITY && !IS_DEPUTY(snooper))
-          return 0;
-#endif
         // Jemand mit niedrigerem Level kann keinen hoeherleveligen snoopen
         // lassen.
         if ( PO != snooper
@@ -437,44 +432,6 @@
   return "/secure/master"->query_wiz_level(player);
 }
 
-#ifdef __ALISTS__
-// * Element aus Alist loeschen (by key)
-mixed *remove_alist(mixed key,mixed *alist)
-{
-  int i,j;
-
-  if (!pointerp(alist) || !sizeof(alist))
-    return alist;
-  if (!pointerp(alist[0]))
-  {
-    if ((i=assoc(key,alist))<0)
-      return alist;
-    return alist[0..i-1]+alist[i+1..];
-  }
-  i = assoc(key,alist[0]);
-  if ((i=assoc(key,alist[0]))<0)
-    return alist;
-  alist=alist[0..];
-  for (j=sizeof(alist)-1;j>=0;j--)
-    alist[j]=alist[j][0..i-1]+alist[j][i+1..];
-  return alist;
-}
-
-// * Element aus Alist loeschen (by pos)
-mixed *exclude_alist(int i,mixed *alist)
-{
-  int j;
-  if (!pointerp(alist) || !sizeof(alist) || i<0)
-    return alist;
-  if (!pointerp(alist[0]))
-    return alist[0..i-1]+alist[i+1..];
-  alist=alist[0..]; /* Create PHYSICAL copy of alist */
-  for (j=sizeof(alist)-1;j>=0;j--)
-    alist[j]=alist[j][0..i-1]+alist[j][i+1..];
-  return alist; /* order_alist is NOT necessary - see /doc/LPC/alist */
-}
-#endif // __ALISTS__
-
 // * German version of ctime()
 #define TAGE ({"Son","Mon","Die","Mit","Don","Fre","Sam"})
 #define MONATE ({"Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug",\
@@ -759,12 +716,6 @@
   raise_error("Available only for root\n");
 }
 
-#if __EFUN_DEFINED__(export_uid)
-nomask void export_uid(object ob) {
-  raise_error("Available only for root\n");
-}
-#endif
-
 // * Jetzt auch closures
 int process_flag;
 
