diff --git a/src/builtin.cmod b/src/builtin.cmod
index 00140873dc882b0e4f62e1a64a50b0274a7820d9..1195c1bb56fdf8cd000ac19188e1794635639881 100644
--- a/src/builtin.cmod
+++ b/src/builtin.cmod
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: builtin.cmod,v 1.177 2005/01/08 20:11:57 grubba Exp $
+|| $Id: builtin.cmod,v 1.178 2005/05/06 00:41:40 nilsson Exp $
 */
 
 #include "global.h"
@@ -1878,7 +1878,7 @@ PIKECLASS Buffer
 	}
       }
     }
-    push_text("");
+    push_empty_string();
     return;
   }
 
@@ -1900,7 +1900,7 @@ PIKECLASS Buffer
       RETURN s;
     }
     pop_n_elems(args);
-    push_text("");
+    push_empty_string();
     return;
   }
 
diff --git a/src/language.yacc b/src/language.yacc
index 1b19b3c51c93e508af8b06864821e0a7b0bd9b4c..0b22267e1ffcb32528298495bccf05e85a1ab241 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: language.yacc,v 1.357 2005/02/28 12:55:46 grubba Exp $
+|| $Id: language.yacc,v 1.358 2005/05/06 00:41:54 nilsson Exp $
 */
 
 %pure_parser
@@ -412,7 +412,7 @@ low_program_ref: string_constant
     {
       ref_push_string(Pike_compiler->last_identifier);
     }else{
-      push_constant_text("");
+      push_empty_string();
     }
     $$=$1;
 
@@ -4007,7 +4007,7 @@ void low_yyerror(struct pike_string *str)
       /* yyerror() can be called from define_function(), which
        * can be called by the C module initialization code.
        */
-      push_constant_text("");
+      push_empty_string();
     }
     push_int(lex.current_line);
     ref_push_string(str);
diff --git a/src/modules/HTTPLoop/requestobject.c b/src/modules/HTTPLoop/requestobject.c
index 66ece6b7f627006cb48c3eb172e4d8cf39cd5b8d..da3309b4d202f90f59162e284a8c8d0ec71dc98d 100644
--- a/src/modules/HTTPLoop/requestobject.c
+++ b/src/modules/HTTPLoop/requestobject.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: requestobject.c,v 1.29 2004/03/10 16:31:41 nilsson Exp $
+|| $Id: requestobject.c,v 1.30 2005/05/06 00:48:32 nilsson Exp $
 */
 
 #include "global.h"
@@ -617,7 +617,7 @@ void f_aap_index_op(INT32 args)
       f_index( 2 );
       ref_push_string(s_client);
       f_aap_index_op( 1 );
-      push_constant_text("");
+      push_empty_string();
       f_multiply( 2 );
       apply_svalue( sp-2, 1 );
       push_string(s_supports);
diff --git a/src/modules/Image/encodings/iff.c b/src/modules/Image/encodings/iff.c
index 58a4fb19f9eae1aaa7838254b7111f22c00c9ae4..2cfd16bfc228f34c683bd7942b6c1546f591ac8a 100644
--- a/src/modules/Image/encodings/iff.c
+++ b/src/modules/Image/encodings/iff.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: iff.c,v 1.15 2004/10/07 22:49:57 nilsson Exp $
+|| $Id: iff.c,v 1.16 2005/05/06 00:48:09 nilsson Exp $
 */
 
 #include "global.h"
@@ -109,7 +109,7 @@ struct pike_string *make_iff(char *id, struct array *chunks)
     if(chunks->size > 1)
       f_add(chunks->size);
   } else
-    push_text("");
+    push_empty_string();
   f_add(2);
   f_aggregate(2);
   res = low_make_iff(&sp[-1]);
diff --git a/src/modules/Image/encodings/ras.c b/src/modules/Image/encodings/ras.c
index d09c59f736558e6e12deb7d3b8838f32b51230b9..392ecbc8b2dde5190a4d0b6698598f3e3bb5538e 100644
--- a/src/modules/Image/encodings/ras.c
+++ b/src/modules/Image/encodings/ras.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: ras.c,v 1.24 2005/01/23 13:30:04 nilsson Exp $
+|| $Id: ras.c,v 1.25 2005/05/06 00:48:09 nilsson Exp $
 */
 
 /*
@@ -492,7 +492,7 @@ static void img_ras_encode(INT32 args)
     image_colortable_initiate_dither(ct, &dith, img->xsize);
     ctfunc = image_colortable_index_8bit_function(ct);
   } else
-    push_text("");
+    push_empty_string();
 
   if(!rs.ras_depth) {
     INT32 px = img->xsize * img->ysize;
diff --git a/src/modules/Image/encodings/xwd.c b/src/modules/Image/encodings/xwd.c
index 03a211c1140a2a57721c8b952a332dad3c9ec5a6..68345a557d17ba8f71a4f894008ae236f10f237f 100644
--- a/src/modules/Image/encodings/xwd.c
+++ b/src/modules/Image/encodings/xwd.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: xwd.c,v 1.28 2005/01/23 13:30:05 nilsson Exp $
+|| $Id: xwd.c,v 1.29 2005/05/06 00:48:09 nilsson Exp $
 */
 
 /*
@@ -304,7 +304,7 @@ void img_xwd__decode(INT32 args,int header_only,int skipcmap)
       push_text("image");
 
       if (s->len-(int)(header.header_size+header.ncolors*12)<0)
-	 push_text("");
+	 push_empty_string();
       else
 	 push_string(make_shared_binary_string(
 	    s->str+(header.header_size+header.ncolors*12),
diff --git a/src/modules/Image/font.c b/src/modules/Image/font.c
index fa08d42b92d7fe3b692fc76688baa74cb2028604..9929c020dfb7abe4ff11e3dde00734e45e6fefd8 100644
--- a/src/modules/Image/font.c
+++ b/src/modules/Image/font.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: font.c,v 1.84 2004/05/19 00:10:10 nilsson Exp $
+|| $Id: font.c,v 1.85 2005/05/06 00:47:42 nilsson Exp $
 */
 
 #include "global.h"
@@ -536,7 +536,7 @@ void font_write(INT32 args)
 
    if (args==0)
    {
-      push_text("");
+      push_empty_string();
       args=1;
    }
 
@@ -756,7 +756,7 @@ void font_text_extents(INT32 args)
 
   if (args==0)
   {
-     push_text("");
+     push_empty_string();
      args=1;
   }
 
diff --git a/src/modules/Mysql/mysql.c b/src/modules/Mysql/mysql.c
index 80124cdc0dd1376af0ddf1d794b00e72f0a52516..3b483840af2e649b527edab0fa2f4fa27b2a2280 100644
--- a/src/modules/Mysql/mysql.c
+++ b/src/modules/Mysql/mysql.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: mysql.c,v 1.89 2005/04/02 20:45:21 nilsson Exp $
+|| $Id: mysql.c,v 1.90 2005/05/06 00:47:26 nilsson Exp $
 */
 
 /*
@@ -658,9 +658,10 @@ static void mysql__sprintf(INT32 args)
       if (PIKE_MYSQL->mysql->options.use_ssl) {
 	push_text("using SSL");
       }
-      else push_text("");
+      else
+	push_empty_string();
 #else
-      push_text("");
+      push_empty_string();
 #endif /* HAVE_MYSQL_SSL */
 
       f_sprintf(3);
diff --git a/src/modules/Odbc/odbc.c b/src/modules/Odbc/odbc.c
index f4752cb298424f71e08633cff98c2eab2eb95734..0babe61a61a58e47f715cbf6b2e56b748d8b76e3 100644
--- a/src/modules/Odbc/odbc.c
+++ b/src/modules/Odbc/odbc.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: odbc.c,v 1.37 2005/01/26 18:50:43 grubba Exp $
+|| $Id: odbc.c,v 1.38 2005/05/06 00:47:01 nilsson Exp $
 */
 
 /*
@@ -221,12 +221,12 @@ static void f_create(INT32 args)
     }
   }
   if (!user) {
-    push_constant_text("");
+    push_empty_string();
     user = sp[-1].u.string;
     args++;
   }
   if (!pwd) {
-    push_constant_text("");
+    push_empty_string();
     pwd = sp[-1].u.string;
     args++;
   }
diff --git a/src/modules/Odbc/odbc_result.c b/src/modules/Odbc/odbc_result.c
index c805f8f311f67e091f2474e76fc1c472ba8eeae7..6078737f133ac9fe55a02ff39244ce7b8561c977 100644
--- a/src/modules/Odbc/odbc_result.c
+++ b/src/modules/Odbc/odbc_result.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: odbc_result.c,v 1.39 2005/01/20 10:47:55 nilsson Exp $
+|| $Id: odbc_result.c,v 1.40 2005/05/06 00:47:01 nilsson Exp $
 */
 
 /*
@@ -425,7 +425,7 @@ static void f_fetch_row(INT32 args)
 #endif /* ODBC_DEBUG */
 	    if (!num_strings) {
 	      num_strings++;
-	      push_constant_text("");
+	      push_empty_string();
 	    }
 	    break;
 	  }
diff --git a/src/modules/_Image_GIF/image_gif.c b/src/modules/_Image_GIF/image_gif.c
index 65e3d286031ebbb3432f87ad95bdf374ee5b17a0..a68071a36c079cef5b08811edc9051c97adb7914 100644
--- a/src/modules/_Image_GIF/image_gif.c
+++ b/src/modules/_Image_GIF/image_gif.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: image_gif.c,v 1.21 2004/10/07 22:49:58 nilsson Exp $
+|| $Id: image_gif.c,v 1.22 2005/05/06 00:46:32 nilsson Exp $
 */
 
 /*
@@ -1328,7 +1328,7 @@ static void _decode_get_extension(unsigned char **s,
    if (*len) { (*len)-=1; (*s)+=1; }
 
    if (!n)
-      push_string(make_shared_binary_string("",0));
+      push_empty_string();
    else
       f_add(DO_NOT_WARN(n));
 
@@ -1414,7 +1414,7 @@ static void _decode_get_render(unsigned char **s,
    if (*len) { (*len)-=1; (*s)+=1; }
 
    if (!n)
-      push_string(make_shared_binary_string("",0));
+      push_empty_string();
    else
       f_add(n);
 
@@ -2544,7 +2544,7 @@ static void image_gif_lzw_decode(INT32 args)
    if (len<1)
    {
       pop_n_elems(args);
-      push_string(make_shared_binary_string("",0));
+      push_empty_string();
       return;
    }
 
diff --git a/src/modules/_Roxen/roxen.c b/src/modules/_Roxen/roxen.c
index a68afa03c81d2e4553513a5fce1fcd14c4231a3c..33fec90ec7f9af422c29b477200f1288ff3beed0 100644
--- a/src/modules/_Roxen/roxen.c
+++ b/src/modules/_Roxen/roxen.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: roxen.c,v 1.44 2005/04/09 10:35:53 grubba Exp $
+|| $Id: roxen.c,v 1.45 2005/05/06 00:46:06 nilsson Exp $
 */
 
 #define NO_PIKE_SHORTHAND
@@ -135,7 +135,7 @@ static void f_hp_feed( INT32 args )
      */
     if( (spc < 2) && tot_slash_n )
     {
-      push_constant_text( "" );
+      push_empty_string();
       /* This includes (all eventual) \r\n etc. */
       push_text((char *)hp->headers); 
       f_aggregate_mapping( 0 );
diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index 362f23a3ffd1f5a7d2c2b9289b71730d5651f330..1b49c2ba2b050ddc7db0e1ea58ddd7e588389058 100644
--- a/src/modules/files/efuns.c
+++ b/src/modules/files/efuns.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: efuns.c,v 1.163 2005/04/30 15:14:18 grubba Exp $
+|| $Id: efuns.c,v 1.164 2005/05/06 00:45:46 nilsson Exp $
 */
 
 #include "global.h"
@@ -200,7 +200,7 @@ static void f_listxattr(INT32 args)
   ptr[0]=0;
   push_string( make_shared_binary_string( ptr, 1 ) );
   o_divide();
-  push_text( "" );
+  push_empty_string();
   f_aggregate(1);
   o_subtract();
 
@@ -1031,7 +1031,7 @@ void f_get_dir(INT32 args)
 
   if(!str) {
 #if defined(__amigaos4__)
-    push_constant_text("");
+    push_empty_string();
 #else
     push_constant_text(".");
 #endif
diff --git a/src/modules/files/file.c b/src/modules/files/file.c
index 0a54055e6a6578e24b59393e86bcc33af87c92d0..c0cc3d2d2a2962eafa1afd2dc63f77631e5f7382 100644
--- a/src/modules/files/file.c
+++ b/src/modules/files/file.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: file.c,v 1.349 2005/04/30 13:51:33 grubba Exp $
+|| $Id: file.c,v 1.350 2005/05/06 00:45:46 nilsson Exp $
 */
 
 #define NO_PIKE_SHORTHAND
@@ -1106,7 +1106,7 @@ static void file_write(INT32 args)
     if (args > 1) {
 #endif /* HAVE_WRITEV */
       ref_push_array(a);
-      push_constant_text("");
+      push_empty_string();
       o_multiply();
       Pike_sp--;
       dmalloc_touch_svalue(Pike_sp);
@@ -2173,7 +2173,7 @@ static void file_listxattr(INT32 args)
   ptr[0]=0;
   push_string( make_shared_binary_string( ptr, 1 ) );
   o_divide();
-  push_text( "" );
+  push_empty_string();
   f_aggregate(1);
   o_subtract();
 
diff --git a/src/modules/spider/spider.c b/src/modules/spider/spider.c
index f0f4d2380de0c9b0f1156652061dcbe4d500f527..e131df59c7974b54f02b6cca04766395010558c2 100644
--- a/src/modules/spider/spider.c
+++ b/src/modules/spider/spider.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: spider.c,v 1.129 2005/04/09 10:39:22 grubba Exp $
+|| $Id: spider.c,v 1.130 2005/05/06 00:45:14 nilsson Exp $
 */
 
 #include "global.h"
@@ -196,7 +196,7 @@ void f_parse_html(INT32 args)
   if(!ss->len)
   {
     pop_n_elems(args);
-    push_text("");
+    push_empty_string();
     return;
   }
 
@@ -237,7 +237,7 @@ void f_parse_html(INT32 args)
   if(strings > 1)
     f_add(strings);
   else if(!strings)
-    push_text("");
+    push_empty_string();
 }
 
 
@@ -263,7 +263,7 @@ void f_parse_html_lines(INT32 args)
   if(!ss->len)
   {
     pop_n_elems(args);
-    push_text("");
+    push_empty_string();
     return;
   }
 
@@ -303,7 +303,7 @@ void f_parse_html_lines(INT32 args)
   if(strings > 1)
     f_add(strings);
   else if(!strings)
-    push_text("");
+    push_empty_string();
 /*   fprintf(stderr, "sp=%p (strings=%d)\n", sp, strings); */
 }
 
@@ -404,7 +404,7 @@ done:
   if(strs > 1)
     f_add(strs);
   else if(!strs)
-    push_text("");
+    push_empty_string();
 
   SKIP_SPACE();
   return i;
@@ -627,7 +627,7 @@ void do_html_parse(struct pike_string *ss,
 	  do_html_parse(ss2,cont,single,strings,recurse_left-1,extra_args);
 	  continue;
 	} else if (sp[-1].type==T_ARRAY) {
-	  push_text("");
+	  push_empty_string();
 	  f_multiply(2);
 	  copy_shared_string(ss2,sp[-1].u.string);
 	  pop_stack();
@@ -710,7 +710,7 @@ void do_html_parse(struct pike_string *ss,
 	  continue;
 
 	} else if (sp[-1].type==T_ARRAY) {
-	  push_text("");
+	  push_empty_string();
 	  f_multiply(2);
 	  copy_shared_string(ss2,sp[-1].u.string);
 	  pop_stack();
@@ -770,7 +770,7 @@ void do_html_parse(struct pike_string *ss,
 
 
 #define PARSE_RETURN(END) do{					\
-  push_text("");						\
+  push_empty_string();						\
   f_multiply(2);						\
   (*strings)++;							\
   if (last!=i-1)						\
@@ -1105,7 +1105,7 @@ void f__dump_obj_table(INT32 args)
 
 PIKE_MODULE_INIT
 {
-  push_constant_text("");
+  push_empty_string();
   empty_string_svalue = sp[-1];
   pop_stack();
 
diff --git a/src/modules/spider/xml.c b/src/modules/spider/xml.c
index 22a387fb8275ba1495a6209f2e49ea9f87b283a3..8ca8fcef6b7f11c66e53f2df884af0c3737b0d55 100644
--- a/src/modules/spider/xml.c
+++ b/src/modules/spider/xml.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: xml.c,v 1.73 2005/04/09 10:40:47 grubba Exp $
+|| $Id: xml.c,v 1.74 2005/05/06 00:45:14 nilsson Exp $
 */
 
 #include "global.h"
@@ -860,7 +860,7 @@ static int gobble(struct xmldata *data, char *s)
     f_replace(3);				\
     push_constant_text(" ");			\
     o_divide();					\
-    push_constant_text("");			\
+    push_empty_string();			\
     f_aggregate(1);                             \
     o_subtract();				\
     push_constant_text(" ");			\
@@ -1105,7 +1105,7 @@ static int gobble(struct xmldata *data, char *s)
 #define INTERMISSION(X) do {			\
    if((X).s->len) {                             \
      check_stack(4);				\
-     push_constant_text("");			\
+     push_empty_string();			\
      push_int(0); /* No name */			\
      push_int(0); /* No attributes */		\
      push_string(finish_string_builder(&(X)));	\
@@ -1997,7 +1997,7 @@ static int really_low_parse_dtd(struct xmldata *data)
 			break;
 
 		      case '(': /* Enumeration */
-			push_constant_text("");
+			push_empty_string();
 			READ(1);
 			SKIPSPACE();
 			
@@ -2076,7 +2076,7 @@ static int really_low_parse_dtd(struct xmldata *data)
 			break;
 
 		      default:
-			push_constant_text("");
+			push_empty_string();
 
 		    comefrom_fixed:
 #ifdef VERBOSE_XMLDEBUG
diff --git a/src/modules/system/memory.c b/src/modules/system/memory.c
index 5d202c529cc12ac423a241574ff8357192ceda4b..ec1be1d03bc261d99f74a81ddf9db4e15626cba4 100644
--- a/src/modules/system/memory.c
+++ b/src/modules/system/memory.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: memory.c,v 1.32 2005/04/09 10:51:02 grubba Exp $
+|| $Id: memory.c,v 1.33 2005/05/06 00:42:35 nilsson Exp $
 */
 
 /*! @module System
@@ -593,7 +593,7 @@ static void memory_cast(INT32 args)
    	 Pike_error(NAME": reading (some) outside allocation\n");	\
    									\
       if (!rlen)							\
-   	 push_text("");							\
+   	 push_empty_string();						\
       else								\
    	 push_string(MAKER((void*)(THIS->p+pos),len));			\
    									\
@@ -828,7 +828,7 @@ static void memory_index(INT32 args)
    else
    {
       if (THIS->size==0)
-	 push_text("");
+	 push_empty_string();
       else
       {
 	 INT_TYPE pos1,pos2;
@@ -840,7 +840,7 @@ static void memory_index(INT32 args)
 	 else rpos2=(size_t)pos2;
 
 	 if (rpos2<rpos1)
-	    push_text("");
+	    push_empty_string();
 	 else
 	    push_string(make_shared_binary_string((char *)THIS->p+rpos1,
 						  rpos2-rpos1+1));
@@ -884,7 +884,7 @@ static void memory_index_write(INT32 args)
    else
    {
       if (THIS->size==0)
-	 push_text("");
+	 push_empty_string();
       else
       {
 	 INT_TYPE pos1,pos2;
diff --git a/src/modules/system/passwords.c b/src/modules/system/passwords.c
index 6434bdb7e56e42a142637054af25b7ec8ce513cc..b010e19bec0edcf5fcd57b5ae731c27f69facc46 100644
--- a/src/modules/system/passwords.c
+++ b/src/modules/system/passwords.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: passwords.c,v 1.46 2004/09/27 08:30:28 grubba Exp $
+|| $Id: passwords.c,v 1.47 2005/05/06 00:42:35 nilsson Exp $
 */
 
 /*
@@ -109,7 +109,7 @@ struct group *getgrnam(char *name)
 #define SAFE_PUSH_TEXT(X) do {						\
     char *text_ = (X);							\
     if(text_) push_text(text_);						\
-    else push_constant_text("");					\
+    else push_empty_string();						\
   } while(0)
 
 /*