diff --git a/src/language.yacc b/src/language.yacc
index b9e2f54b4548ee5a36aaa8d1bd543a53793a405f..4ec773649ab5ff720da0269af875fd47f19bcbed 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -156,7 +156,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.18 1997/01/19 09:08:00 hubbe Exp $");
+RCSID("$Id: language.yacc,v 1.19 1997/01/27 01:18:01 hubbe Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -391,7 +391,7 @@ import: modifiers F_IMPORT idents ';'
     resolv_constant($3);
     free_node($3);
     use_module(sp-1);
-    sp--;
+    pop_stack();
   }
   ;
 
@@ -1153,8 +1153,6 @@ low_idents: F_IDENTIFIER
     }else if(find_module_identifier($1)){
       $$=mkconstantsvaluenode(sp-1);
       pop_stack();
-    }else if((f=lookup_efun($1))){
-      $$=mkconstantsvaluenode(&f->function);
     }else{
       $$=0;
       if( get_master() )
@@ -1184,15 +1182,13 @@ low_idents: F_IDENTIFIER
   }
   | F_PREDEF F_COLON_COLON F_IDENTIFIER
   {
-    struct efun *f;
-    f=lookup_efun($3);
-    if(!f)
-    {
-      my_yyerror("Unknown efun: %s.",$3->str);
-      $$=mkintnode(0);
-    }else{
-      $$=mksvaluenode(&f->function);
-    }
+    struct svalue tmp;
+    node *tmp2;
+    tmp.type=T_MAPPING;
+    tmp.u.mapping=get_builtin_constants();
+    tmp2=mkconstantsvaluenode(&tmp);
+    $$=index_node(tmp2, $3);
+    free_node(tmp2);
     free_string($3);
   }
   | F_IDENTIFIER F_COLON_COLON F_IDENTIFIER
@@ -1222,21 +1218,21 @@ low_idents: F_IDENTIFIER
     setup_fake_program();
     for(e=1;e<(int)fake_program.num_inherits;e++)
     {
-	 if(fake_program.inherits[e].inherit_level!=1) continue;
-	 i=low_reference_inherited_identifier(e,$2);
-	 if(i==-1) continue;
-	 if($$)
-	 {
-	   $$=mknode(F_ARG_LIST,$$,mkidentifiernode(i));
-	 }else{
-	   $$=mkidentifiernode(i);
-	 }
+      if(fake_program.inherits[e].inherit_level!=1) continue;
+      i=low_reference_inherited_identifier(e,$2);
+      if(i==-1) continue;
+      if($$)
+      {
+	$$=mknode(F_ARG_LIST,$$,mkidentifiernode(i));
+      }else{
+	$$=mkidentifiernode(i);
+      }
     }
     if(!$$)
     {
-	 $$=mkintnode(0);
+      $$=mkintnode(0);
     }else{
-	 if($$->token==F_ARG_LIST) $$=mkefuncallnode("aggregate",$$);
+      if($$->token==F_ARG_LIST) $$=mkefuncallnode("aggregate",$$);
     }
     free_string($2);
   }
diff --git a/src/las.c b/src/las.c
index 1fa17efff8171f9e15b32b9931b7bec783cd6ffc..8ba9388532c5bad1284308456a67c86677d6add5 100644
--- a/src/las.c
+++ b/src/las.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: las.c,v 1.13 1997/01/22 05:19:45 hubbe Exp $");
+RCSID("$Id: las.c,v 1.14 1997/01/27 01:19:01 hubbe Exp $");
 
 #include "language.h"
 #include "interpret.h"
@@ -363,22 +363,17 @@ node *mkapplynode(node *func,node *args)
 
 node *mkefuncallnode(char *function, node *args)
 {
-  struct efun *fun;
   struct pike_string *name;
+  node *n;
   name = findstring(function);
-  if(!name)
+  if(!name || !find_module_identifier(name))
   {
     my_yyerror("Internally used efun undefined: %s",function);
     return mkintnode(0);
   }
-      
-  fun = lookup_efun(name);
-  if(!fun)
-  {
-    my_yyerror("Internally used efun undefined: %s",function);
-    return mkintnode(0);
-  }
-  return mkapplynode(mksvaluenode(&fun->function), args);
+  n=mkapplynode(mksvaluenode(sp-1), args);
+  pop_stack();
+  return n;
 }
 
 node *mkopernode(char *oper_id, node *arg1, node *arg2)