diff --git a/secure/simul_efun/simul_efun.c b/secure/simul_efun/simul_efun.c
index 10cdc1d..fc16a4b 100644
--- a/secure/simul_efun/simul_efun.c
+++ b/secure/simul_efun/simul_efun.c
@@ -45,7 +45,7 @@
 string dtime(int wann);
 varargs int log_file(string file, string txt, int size_to_break);
 int query_wiz_level(mixed player);
-nomask varargs int snoop(object me, object you);
+nomask varargs int snoop(object snooper, object snoopee);
 varargs string country(mixed ip, string num);
 int query_wiz_grp(mixed wiz);
 public varargs object deep_present(mixed what, object ob);
@@ -205,74 +205,76 @@
   return str[5..11]+str[18..];
 }
 
-nomask varargs int snoop( object me, object you )
+nomask varargs int snoop( object snooper, object snoopee )
 {
     int ret;
-    object snooper0, snooper, snooper2, snooper3;
+    object snooper0, snooper1, snooper2, snooper3;
 
-    if( !objectp(me) || me == you || !PO )
+    if( !objectp(snooper) || snooper == snoopee || !PO )
        return 0;
 
-    snooper0 = find_snooped(me);
+    snooper0 = find_snooped(snooper);
 
-     if(you){
-        if ( PO != me && query_wiz_grp(me) >= query_wiz_grp(geteuid(PO)) )
+     if(snoopee)
+     {
+        if ( PO != snooper
+             && query_wiz_grp(snooper) >= query_wiz_grp(geteuid(PO)) )
             return 0;
 
-        if ( query_wiz_grp(me) <= query_wiz_grp(you) &&
-             !(you->QueryAllowSnoop(me)) )
+        if ( query_wiz_grp(snooper) <= query_wiz_grp(snoopee) &&
+             !(snoopee->QueryAllowSnoop(snooper)) )
         {
-            if ( !IS_DEPUTY(me) || IS_ARCH(you) )
+            if ( !IS_DEPUTY(snooper) || IS_ARCH(snoopee) )
                return 0;
         }
 
-        if ( (snooper = efun::interactive_info(you, II_SNOOP_NEXT)) &&
-             query_wiz_grp(snooper) >= query_wiz_grp(me) )
+        if ( (snooper1 = efun::interactive_info(snoopee, II_SNOOP_NEXT)) &&
+             query_wiz_grp(snooper1) >= query_wiz_grp(snooper) )
         {
-            if ( snooper->QueryProp(P_SNOOPFLAGS) & SF_LOCKED )
+            if ( snooper1->QueryProp(P_SNOOPFLAGS) & SF_LOCKED )
                return 0;
 
-            tell_object( snooper, sprintf( "%s snooped jetzt %s.\n",
-                                       me->name(WER), you->name(WER) ) );
+            tell_object( snooper1, sprintf( "%s snooped jetzt %s.\n",
+                                       snooper->name(WER), snoopee->name(WER) ) );
 
-            snooper2 = me;
+            snooper2 = snooper;
 
             while ( snooper3 = interactive_info(snooper2, II_SNOOP_NEXT) )
             {
-               tell_object( snooper,
+               tell_object( snooper1,
                            sprintf( "%s wird seinerseits von %s gesnooped.\n"
                                    ,snooper2->name(WER),
                                    snooper3->name(WEM) ) );
                snooper2 = snooper3;
             }
 
-            efun::snoop( snooper, snooper2 );
+            efun::snoop( snooper1, snooper2 );
 
-            if ( efun::interactive_info(snooper2, II_SNOOP_NEXT) != snooper )
-               tell_object( snooper, sprintf( "Du kannst %s nicht snoopen.\n",
+            if ( efun::interactive_info(snooper2, II_SNOOP_NEXT) != snooper1 )
+               tell_object( snooper1, sprintf( "Du kannst %s nicht snoopen.\n",
                                           snooper2->name(WEN) ) );
             else
             {
-               tell_object( snooper, sprintf( "Du snoopst jetzt %s.\n",
+               tell_object( snooper1, sprintf( "Du snoopst jetzt %s.\n",
                                           snooper2->name(WEN) ) );
-               if ( !IS_DEPUTY(snooper) )
+               if ( !IS_DEPUTY(snooper1) )
                {
                    log_file( SNOOPLOGFILE, sprintf("%s: %O %O %O\n",
                                                dtime(time()),
-                                               snooper,
+                                               snooper1,
                                                snooper2,
                                                environment(snooper2) ),
                             100000 );
                    if (snooper0)
-                      CHMASTER->send( "Snoop", snooper,
+                      CHMASTER->send( "Snoop", snooper1,
                                     sprintf( "%s *OFF* %s (%O)",
-                                            capitalize(getuid(snooper)),
+                                            capitalize(getuid(snooper1)),
                                             capitalize(getuid(snooper0)),
                                             environment(snooper0) ) );
 
-                   CHMASTER->send( "Snoop", snooper,
+                   CHMASTER->send( "Snoop", snooper1,
                                  sprintf("%s -> %s (%O)",
-                                        capitalize(getuid(snooper)),
+                                        capitalize(getuid(snooper1)),
                                         capitalize(getuid(snooper2)),
                                         environment(snooper2)));
                }
@@ -280,7 +282,7 @@
                {
                    log_file( ASNOOPLOGFILE, sprintf( "%s: %O %O %O\n",
                                                  dtime(time()),
-                                                 snooper,
+                                                 snooper1,
                                                  snooper2,
                                                  environment(snooper2) )
                             ,100000 );
@@ -289,87 +291,88 @@
         }
         else
         {
-            if (snooper)
+            if (snooper1)
             {
-               if ( !me->QueryProp(P_SNOOPFLAGS) & SF_LOCKED )
+               if ( !snooper->QueryProp(P_SNOOPFLAGS) & SF_LOCKED )
                {
                    printf( "%s wird bereits von %s gesnooped. Benutze das "
                           "\"f\"-Flag, wenn du dennoch snoopen willst.\n",
-                          you->name(WER), snooper->name(WEM) );
+                          snoopee->name(WER), snooper1->name(WEM) );
                    return 0;
                }
             }
         }
-        ret = efun::snoop( me, you );
+        ret = efun::snoop( snooper, snoopee );
 
-        if ( !IS_DEPUTY(me) && efun::interactive_info(you, II_SNOOP_NEXT) == me)
+        if ( !IS_DEPUTY(snooper)
+            && efun::interactive_info(snoopee, II_SNOOP_NEXT) == snooper)
         {
             log_file( SNOOPLOGFILE, sprintf( "%s: %O %O %O\n",
                                          Lcut(dtime(time())),
-                                         me, you, environment(you) ),
+                                         snooper, snoopee, environment(snoopee) ),
                      100000 );
 
             if (snooper0)
             {
-               CHMASTER->send( "Snoop", me,
+               CHMASTER->send( "Snoop", snooper,
                              sprintf( "%s *OFF* %s (%O).",
-                                     capitalize(getuid(me)),
+                                     capitalize(getuid(snooper)),
                                      capitalize(getuid(snooper0)),
                                      environment(snooper0) ) );
             }
 
-            CHMASTER->send( "Snoop", me, sprintf( "%s -> %s (%O).",
-                                             capitalize(getuid(me)),
-                                             capitalize(getuid(you)),
-                                             environment(you) ) );
+            CHMASTER->send( "Snoop", snooper, sprintf( "%s -> %s (%O).",
+                                             capitalize(getuid(snooper)),
+                                             capitalize(getuid(snoopee)),
+                                             environment(snoopee) ) );
         }
         else
         {
-            if ( efun::interactive_info(you, II_SNOOP_NEXT) == me )
+            if ( efun::interactive_info(snoopee, II_SNOOP_NEXT) == snooper )
             {
                log_file( ASNOOPLOGFILE, sprintf( "%s: %O %O %O\n",
                                              Lcut(dtime(time())),
-                                             me, you, environment(you) ),
+                                             snooper, snoopee, environment(snoopee) ),
                         100000 );
             }
         }
 
-        if ( ret && query_wiz_grp(me) <= query_wiz_grp(you) &&
-             !IS_DEPUTY(me) )
-            tell_object( you, "*** " + NAME(me) + " snoopt Dich!\n" );
+        if ( ret && query_wiz_grp(snooper) <= query_wiz_grp(snoopee) &&
+             !IS_DEPUTY(snooper) )
+            tell_object( snoopee, "*** " + NAME(snooper) + " snoopt Dich!\n" );
 
         return ret;
      }
      else
      {
-        if ( (me == PO ||
-              query_wiz_grp(geteuid(PO)) > query_wiz_grp(me) ||
-              (query_wiz_grp(geteuid(PO)) == query_wiz_grp(me) &&
-              efun::interactive_info(PO, II_SNOOP_NEXT) == me)) && snooper0 )
+        if ( (snooper == PO ||
+              query_wiz_grp(geteuid(PO)) > query_wiz_grp(snooper) ||
+              (query_wiz_grp(geteuid(PO)) == query_wiz_grp(snooper) &&
+              efun::interactive_info(PO, II_SNOOP_NEXT) == snooper)) && snooper0 )
         {
-            if ( !IS_DEPUTY(me) )
+            if ( !IS_DEPUTY(snooper) )
             {
                log_file( SNOOPLOGFILE, sprintf( "%s: %O %O %O *OFF*\n",
-                                            Lcut(dtime(time())), me,
+                                            Lcut(dtime(time())), snooper,
                                             snooper0,
                                             environment(snooper0) ),
                         100000 );
 
-                CHMASTER->send( "Snoop", me,
+                CHMASTER->send( "Snoop", snooper,
                               sprintf( "%s *OFF* %s (%O).",
-                                      capitalize(getuid(me)),
+                                      capitalize(getuid(snooper)),
                                       capitalize(getuid(snooper0)),
                                       environment(snooper0) ) );
             }
             else
             {
                log_file( ASNOOPLOGFILE, sprintf( "%s: %O %O %O *OFF*\n",
-                                             Lcut(dtime(time())), me,
+                                             Lcut(dtime(time())), snooper,
                                              snooper0,
                                              environment(snooper0) ),
                         100000 );
             }
-            return efun::snoop(me);
+            return efun::snoop(snooper);
         }
      }
      return 0;
