diff --git a/std/player/base.c b/std/player/base.c
index 0d5de1e..785a0b6 100644
--- a/std/player/base.c
+++ b/std/player/base.c
@@ -855,8 +855,9 @@
   if (str=="keine") 
     SetProp(P_HOMEPAGE, 0);
   else {
-    tmp = filter(regexplode(str, "[<][^>]*[>]"),
-                       lambda(({'e}), ({#'!=, ({#'[, 'e, 0}), '<'})));
+    tmp = filter(regexplode(str, "[<][^>]*[>]"), function int (string e) {
+              return (e[0] != '<');
+            });
     write("Sie lautet jetzt: "+(str = implode(tmp, ""))+"\n");
     SetProp(P_HOMEPAGE, str);
   }
diff --git a/std/player/channel.c b/std/player/channel.c
index 9f8512a..3a11661 100644
--- a/std/player/channel.c
+++ b/std/player/channel.c
@@ -544,11 +544,9 @@
       SetProp(P_CHANNEL_SHORT, DEFAULT_SHORTCUTS
               + (IS_LEARNER(this_object()) ? WIZARD_SHORTCUTS : ([])));
     }
-    walk_mapping(QueryProp(P_CHANNEL_SHORT),
-                 lambda(({'i/*'*/, 'c, 'r}),
-                        ({#'+=, 'r/*'*/,
-                          ({#'sprintf/*'*/, "%5.5s = %s\n", 'i, 'c})})),
-                 &txt);
+    foreach(string abk, string ch_name : QueryProp(P_CHANNEL_SHORT)) {
+      txt += sprintf("%5.5s = %s\n", abk, ch_name);
+    }
     txt = sprintf("Folgende Abkuerzungen sind definiert:\n%-78#s\n",
                   implode(sort_array(old_explode(txt, "\n"), #'>/*'*/), "\n"));
     More(txt);
diff --git a/std/player/invmaster/invmaster.c b/std/player/invmaster/invmaster.c
index 5b6d599..6ecac91 100644
--- a/std/player/invmaster/invmaster.c
+++ b/std/player/invmaster/invmaster.c
@@ -119,20 +119,14 @@
   // it just checks every word of the name, if it does not begin
   // with a capital letter, it is abbreviated
   // this happens only if the name length exceeds 20 chars...
-  abbreviate=lambda(({'x}), 
-      ({#'?, ({#'>, ({#'member, quote(({"der", "des"})), 'x}), 0}),
-        "d.",
-        ({#'?, ({#'>, ({#'sizeof, 'x}), 3}), 
-          ({#'?, ({#',, ({#'=, 'a, ({#'allocate, 1}) }),
-                        ({#'=, ({#'[, 'a, 0}), 'x }), 
-                        ({#'sizeof, ({#'regexp, 'a, "^[a-z].*"}) }) 
-                 }), 
-            ({#'+, ({#'[..], 'x, 0, 1}), "."}),
-            'x
-          }), 
-          'x
-        })
-      }));
+  abbreviate = function string (string x) {
+      if ( member(({"der","des"}), x) > 0 )
+        return "d.";
+      else if ( sizeof(x) > 3)
+        return regreplace(x, "^[a-z].+", x[0..0]+".", 0x1);
+      else
+        return x;
+    };
 }
 
 // function that tries to guess a good item name and use abbrevations
diff --git a/std/player/travel.c b/std/player/travel.c
index 3e07c0a..6b55957 100644
--- a/std/player/travel.c
+++ b/std/player/travel.c
@@ -233,8 +233,9 @@
            +"reisen.\n");
  
 
-      dstr = filter( filter_objects(ship,"short"), lambda( ({'x}),
-             ({ #'==, ({#'environment, 'x}), environment() }) ) );
+      dstr = filter(ship, function int (object x) {
+                return (environment(x) == environment() && x->short());
+              });
 
       if (sizeof(dstr))
       {
@@ -365,8 +366,9 @@
       write(break_string("Dahin kannst Du mit "
            +_traveller(map_objects(ship, "name", WEM))+" gelangen.",78));
 
-      dstr = filter(filter_objects(ship,"short"),lambda( ({'x}),
-            ({ #'==, ({#'environment, 'x}), environment() }) ) );
+      dstr = filter(ship, function int (object x) {
+                return (environment(x) == environment() && x->short());
+              });
 
       if (sizeof(dstr))
       {
@@ -462,8 +464,9 @@
       write("'"+capitalize(mit)+"' koennte "
                +_traveller(map_objects(ship,"name",WER))+" sein.\n");
 
-      dstr = filter(filter_objects(ship,"short"),lambda( ({'x}),
-            ({ #'==, ({#'environment, 'x}), environment() }) ) );
+      dstr = filter(ship, function int (object x) {
+                return (environment(x) == environment() && x->short());
+              });
 
       if (sizeof(dstr))
       {
