diff --git a/secure/simul_efun/simul_efun.c b/secure/simul_efun/simul_efun.c
index 6620847..b9a633a 100644
--- a/secure/simul_efun/simul_efun.c
+++ b/secure/simul_efun/simul_efun.c
@@ -191,18 +191,6 @@
 
 // * Snoopen und was dazugehoert
 
-// Findet zu einem gegegeben eingeloggten, interaktivem User <who> den von ihr
-// gesnoopten Interactive.
-private object find_snoopee(object who)
-{
-  foreach (object u: users())
-  {
-    if (who == efun::interactive_info(u, II_SNOOP_NEXT))
-      return u;
-  }
-  return 0;
-}
-
 private string Lcut(string str) {
   return str[5..11]+str[18..];
 }
@@ -210,12 +198,13 @@
 nomask varargs int snoop( object snooper, object snoopee )
 {
     int ret;
-    object snooper0, snooper1, snooper2, snooper3;
+    object snooper1, snooper2, snooper3;
 
     if( !objectp(snooper) || snooper == snoopee || !PO )
        return 0;
 
-    snooper0 = find_snoopee(snooper);
+    // Evtl. gibt es bereits einen snoopee, der von snopper gesnoopt wird?
+    object orig_snoopee = efun::interactive_info(snooper, II_SNOOP_PREV);
 
      if(snoopee)
      {
@@ -267,12 +256,12 @@
                                                snooper2,
                                                environment(snooper2) ),
                             100000 );
-                   if (snooper0)
+                   if (orig_snoopee)
                       CHMASTER->send( "Snoop", snooper1,
                                     sprintf( "%s *OFF* %s (%O)",
                                             capitalize(getuid(snooper1)),
-                                            capitalize(getuid(snooper0)),
-                                            environment(snooper0) ) );
+                                            capitalize(getuid(orig_snoopee)),
+                                            environment(orig_snoopee) ) );
 
                    CHMASTER->send( "Snoop", snooper1,
                                  sprintf("%s -> %s (%O)",
@@ -314,13 +303,13 @@
                                          snooper, snoopee, environment(snoopee) ),
                      100000 );
 
-            if (snooper0)
+            if (orig_snoopee)
             {
                CHMASTER->send( "Snoop", snooper,
                              sprintf( "%s *OFF* %s (%O).",
                                      capitalize(getuid(snooper)),
-                                     capitalize(getuid(snooper0)),
-                                     environment(snooper0) ) );
+                                     capitalize(getuid(orig_snoopee)),
+                                     environment(orig_snoopee) ) );
             }
 
             CHMASTER->send( "Snoop", snooper, sprintf( "%s -> %s (%O).",
@@ -350,28 +339,28 @@
         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 )
+              efun::interactive_info(PO, II_SNOOP_NEXT) == snooper)) && orig_snoopee )
         {
             if ( !IS_DEPUTY(snooper) )
             {
                log_file( SNOOPLOGFILE, sprintf( "%s: %O %O %O *OFF*\n",
                                             Lcut(dtime(time())), snooper,
-                                            snooper0,
-                                            environment(snooper0) ),
+                                            orig_snoopee,
+                                            environment(orig_snoopee) ),
                         100000 );
 
                 CHMASTER->send( "Snoop", snooper,
                               sprintf( "%s *OFF* %s (%O).",
                                       capitalize(getuid(snooper)),
-                                      capitalize(getuid(snooper0)),
-                                      environment(snooper0) ) );
+                                      capitalize(getuid(orig_snoopee)),
+                                      environment(orig_snoopee) ) );
             }
             else
             {
                log_file( ASNOOPLOGFILE, sprintf( "%s: %O %O %O *OFF*\n",
                                              Lcut(dtime(time())), snooper,
-                                             snooper0,
-                                             environment(snooper0) ),
+                                             orig_snoopee,
+                                             environment(orig_snoopee) ),
                         100000 );
             }
             return efun::snoop(snooper);
diff --git a/secure/simul_efun/spare/simul_efun.c b/secure/simul_efun/spare/simul_efun.c
index 6620847..b9a633a 100644
--- a/secure/simul_efun/spare/simul_efun.c
+++ b/secure/simul_efun/spare/simul_efun.c
@@ -191,18 +191,6 @@
 
 // * Snoopen und was dazugehoert
 
-// Findet zu einem gegegeben eingeloggten, interaktivem User <who> den von ihr
-// gesnoopten Interactive.
-private object find_snoopee(object who)
-{
-  foreach (object u: users())
-  {
-    if (who == efun::interactive_info(u, II_SNOOP_NEXT))
-      return u;
-  }
-  return 0;
-}
-
 private string Lcut(string str) {
   return str[5..11]+str[18..];
 }
@@ -210,12 +198,13 @@
 nomask varargs int snoop( object snooper, object snoopee )
 {
     int ret;
-    object snooper0, snooper1, snooper2, snooper3;
+    object snooper1, snooper2, snooper3;
 
     if( !objectp(snooper) || snooper == snoopee || !PO )
        return 0;
 
-    snooper0 = find_snoopee(snooper);
+    // Evtl. gibt es bereits einen snoopee, der von snopper gesnoopt wird?
+    object orig_snoopee = efun::interactive_info(snooper, II_SNOOP_PREV);
 
      if(snoopee)
      {
@@ -267,12 +256,12 @@
                                                snooper2,
                                                environment(snooper2) ),
                             100000 );
-                   if (snooper0)
+                   if (orig_snoopee)
                       CHMASTER->send( "Snoop", snooper1,
                                     sprintf( "%s *OFF* %s (%O)",
                                             capitalize(getuid(snooper1)),
-                                            capitalize(getuid(snooper0)),
-                                            environment(snooper0) ) );
+                                            capitalize(getuid(orig_snoopee)),
+                                            environment(orig_snoopee) ) );
 
                    CHMASTER->send( "Snoop", snooper1,
                                  sprintf("%s -> %s (%O)",
@@ -314,13 +303,13 @@
                                          snooper, snoopee, environment(snoopee) ),
                      100000 );
 
-            if (snooper0)
+            if (orig_snoopee)
             {
                CHMASTER->send( "Snoop", snooper,
                              sprintf( "%s *OFF* %s (%O).",
                                      capitalize(getuid(snooper)),
-                                     capitalize(getuid(snooper0)),
-                                     environment(snooper0) ) );
+                                     capitalize(getuid(orig_snoopee)),
+                                     environment(orig_snoopee) ) );
             }
 
             CHMASTER->send( "Snoop", snooper, sprintf( "%s -> %s (%O).",
@@ -350,28 +339,28 @@
         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 )
+              efun::interactive_info(PO, II_SNOOP_NEXT) == snooper)) && orig_snoopee )
         {
             if ( !IS_DEPUTY(snooper) )
             {
                log_file( SNOOPLOGFILE, sprintf( "%s: %O %O %O *OFF*\n",
                                             Lcut(dtime(time())), snooper,
-                                            snooper0,
-                                            environment(snooper0) ),
+                                            orig_snoopee,
+                                            environment(orig_snoopee) ),
                         100000 );
 
                 CHMASTER->send( "Snoop", snooper,
                               sprintf( "%s *OFF* %s (%O).",
                                       capitalize(getuid(snooper)),
-                                      capitalize(getuid(snooper0)),
-                                      environment(snooper0) ) );
+                                      capitalize(getuid(orig_snoopee)),
+                                      environment(orig_snoopee) ) );
             }
             else
             {
                log_file( ASNOOPLOGFILE, sprintf( "%s: %O %O %O *OFF*\n",
                                              Lcut(dtime(time())), snooper,
-                                             snooper0,
-                                             environment(snooper0) ),
+                                             orig_snoopee,
+                                             environment(orig_snoopee) ),
                         100000 );
             }
             return efun::snoop(snooper);
