diff --git a/lib/modules/ADT.pmod/History.pike b/lib/modules/ADT.pmod/History.pike
index a89be2bf6f185af56664c2f3d7d62472de5bea64..88be71ea14114a34abddd6e3709b492162cfec7d 100644
--- a/lib/modules/ADT.pmod/History.pike
+++ b/lib/modules/ADT.pmod/History.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: History.pike,v 1.6 2002/10/19 14:21:12 nilsson Exp $
+// $Id: History.pike,v 1.7 2002/11/29 00:28:44 nilsson Exp $
 
 //! A history is a stack where you can only push entries. When the stack has
 //! reached a certain size the oldest entries are removed on every push.
@@ -171,7 +171,5 @@ array _values() {
 }
 
 string _sprintf(int t) {
-  if(t=='O') return "ADT.History("+size+"/"+maxsize+")";
-  if(t=='t') return "ADT.History";
-  error("Can't print History object as '%c'.\n", t);
+  return t=='O' && sprintf("%O(%d/%d)", this_program, size, maxsize);
 }
diff --git a/lib/modules/ADT.pmod/Relation.pmod/Binary.pike b/lib/modules/ADT.pmod/Relation.pmod/Binary.pike
index 05e86ce07a439c2845bd345fc6f4eaf705cd5cd0..e10355af1ace0282e652c166458676ebb27b26c1 100644
--- a/lib/modules/ADT.pmod/Relation.pmod/Binary.pike
+++ b/lib/modules/ADT.pmod/Relation.pmod/Binary.pike
@@ -1,4 +1,4 @@
-// $Id: Binary.pike,v 1.4 2002/09/12 14:24:49 stensson Exp $
+// $Id: Binary.pike,v 1.5 2002/11/29 00:28:24 nilsson Exp $
 // An abstract data type for binary relations.
 
 private mapping val   = ([]);
@@ -231,10 +231,7 @@ array find_shortest_path(mixed from, mixed to, void|multiset avoiding)
 
 string _sprintf(int mode)
 {
-  if (mode == 'O')
-    return sprintf("ADT.Relation.Binary(%O)", id);
-  else
-    return "ADT.Relation.Binary";
+  return mode=='O' && sprintf("%O(%O)", this_program, id);
 }
 
 //! Return the ID value which was given as first argument to create().
diff --git a/lib/modules/ADT.pmod/Stack.pike b/lib/modules/ADT.pmod/Stack.pike
index 367e95f32bb67842637a68db1f92212c1d104ae0..56c0b589c065270e8be000ef441a76824d11e54d 100644
--- a/lib/modules/ADT.pmod/Stack.pike
+++ b/lib/modules/ADT.pmod/Stack.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: Stack.pike,v 1.8 2002/06/14 00:56:33 nilsson Exp $
+// $Id: Stack.pike,v 1.9 2002/11/29 00:30:03 nilsson Exp $
 
 //! This class implements a simple stack. Instead of adding and removing
 //! elements to an array, and thus making it vary in size for every push
@@ -131,7 +131,5 @@ this_program `+(this_program s) {
 }
 
 string _sprintf(int t) {
-  if(t=='t') return "ADT.Stack";
-  if(t=='O') return sprintf("ADT.Stack%O", _values());
-  error("Can't display ADT.Stack as %c.", t);
+  return t=='O' && sprintf("%O%O", this_program, _values());
 }
diff --git a/lib/modules/Audio.pmod/Codec.pmod b/lib/modules/Audio.pmod/Codec.pmod
index 93ac9fe1130b7c67be7b67a90882aac40e141b4b..a8243eab8312e6d9761beaa534eb855770bd3e4c 100644
--- a/lib/modules/Audio.pmod/Codec.pmod
+++ b/lib/modules/Audio.pmod/Codec.pmod
@@ -4,7 +4,7 @@
 
   creator: Honza Petrous, hop@unibase.cz
 
-  $Id: Codec.pmod,v 1.7 2002/11/26 12:30:59 grubba Exp $
+  $Id: Codec.pmod,v 1.8 2002/11/29 00:30:59 nilsson Exp $
 
  */
 
@@ -117,10 +117,7 @@ class decoder {
   }
 
   static mixed _sprintf(int|void type) {
-    if(type == 't')
-      return "Audio.Codec";
-
-    return sprintf("Audio.Codec /* %O */", codec);
+    return type=='O' && sprintf("Audio.Codec(/* %O */)", codec);
   }
 
 }
diff --git a/lib/modules/Audio.pmod/Format.pmod/module.pmod b/lib/modules/Audio.pmod/Format.pmod/module.pmod
index 77e48b0b4bc226a24e9b07a0e7178db2a7035fc0..6a17ce9a4e52d5fb57f6beae50bbfc1b3cb27af3 100644
--- a/lib/modules/Audio.pmod/Format.pmod/module.pmod
+++ b/lib/modules/Audio.pmod/Format.pmod/module.pmod
@@ -4,7 +4,7 @@
 //
 // Author: Honza Petrous, hop@unibase.cz
 //
-// $Id: module.pmod,v 1.4 2002/09/17 12:40:18 hop Exp $
+// $Id: module.pmod,v 1.5 2002/11/29 00:30:37 nilsson Exp $
 
 //#define AUDIO_FORMAT_DEBUG
 #ifdef AUDIO_FORMAT_DEBUG
@@ -90,7 +90,8 @@ class ANY {
   }
 
   string _sprintf(int|void ctype) {
-      sprintf("Audio.Format.Any(\"%O\",%O)", buffer->fd, nochk);
+      return ctype=='O' &&
+	sprintf("%O(\"%O\",%O)", this_program, buffer->fd, nochk);
   }
 
   //!
diff --git a/lib/modules/Filesystem.pmod/System.pike b/lib/modules/Filesystem.pmod/System.pike
index 7862cf0314592fdcc6d5d8ec0b14aeeb6c03b0da..39da20b057953a2be125f7a50ea11d37caefe86f 100644
--- a/lib/modules/Filesystem.pmod/System.pike
+++ b/lib/modules/Filesystem.pmod/System.pike
@@ -88,9 +88,9 @@ static void create(void|string directory,  // default: cwd
   wd = directory;
 }
 
-static string _sprintf()
+static string _sprintf(int t)
 {
-  return sprintf("Filesystem.System(/* root=%O, wd=%O */)", root, wd);
+  return t=='O' && sprintf("%O(/* root=%O, wd=%O */)", this_program, root, wd);
 }
 
 Filesystem.Base cd(string directory)
diff --git a/lib/modules/Filesystem.pmod/Tar.pmod b/lib/modules/Filesystem.pmod/Tar.pmod
index 295f0cd944007ea4ea1db8c18d68770fc49947fa..b6623f0a65fca3ac19ce89b49d635c706f1a645c 100644
--- a/lib/modules/Filesystem.pmod/Tar.pmod
+++ b/lib/modules/Filesystem.pmod/Tar.pmod
@@ -1,5 +1,5 @@
 /*
- * $Id: Tar.pmod,v 1.17 2002/11/24 15:18:52 marcus Exp $
+ * $Id: Tar.pmod,v 1.18 2002/11/29 00:35:51 nilsson Exp $
  */
 
 #pike __REAL_VERSION__
@@ -25,9 +25,9 @@ class _Tar  // filesystem
 
     static private int start, pos, len;
 
-    static string _sprintf()
+    static string _sprintf(int t)
     {
-      return sprintf("Filesystems.Tar.ReadFile(%d, %d /* pos = %d */)",
+      return t=='O' && sprintf("Filesystem.Tar.ReadFile(%d, %d /* pos = %d */)",
 		     start, len, pos);
     }
 
@@ -249,9 +249,9 @@ class _Tar  // filesystem
     filenames = indices(filename_to_entry);
   }
 
-  string _sprintf()
+  string _sprintf(int t)
   {
-    return sprintf("_Tar(/* filename=%O */)", filename);
+    return t=='O' && sprintf("_Tar(/* filename=%O */)", filename);
   }
 };
 
@@ -280,9 +280,9 @@ class _TarFS
     parent = _parent;
   }
 
-  string _sprintf()
+  string _sprintf(int t)
   {
-    return  sprintf("_TarFS(/* root=%O, wd=%O */)", root, wd);
+    return  t=='O' && sprintf("_TarFS(/* root=%O, wd=%O */)", root, wd);
   }
 
   Filesystem.Stat stat(string file, void|int lstat)
@@ -355,10 +355,11 @@ class `()
     _TarFS::create(tar, "/", "", parent);
   }
 
-  string _sprintf()
+  string _sprintf(int t)
   {
-    return sprintf("Filesystem.Tar(/* tar->filename=%O, root=%O, wd=%O */)",
-		   tar && tar->filename, root, wd);
+    return t=='O' &&
+      sprintf("Filesystem.Tar(/* tar->filename=%O, root=%O, wd=%O */)",
+	      tar && tar->filename, root, wd);
   }
 }
 
diff --git a/lib/modules/Filesystem.pmod/module.pmod b/lib/modules/Filesystem.pmod/module.pmod
index 9aa5f07d02eed239a4cacea29b317c13b625390d..486fa88773b54b9768b33d6c0eb5cdf975d2f7b3 100644
--- a/lib/modules/Filesystem.pmod/module.pmod
+++ b/lib/modules/Filesystem.pmod/module.pmod
@@ -153,9 +153,9 @@ class Stat
 		   path?fullpath:name);
   }
 
-  string _sprintf()
+  string _sprintf(int t)
   {
-    return sprintf("Stat(/* %s */)", lsprint(1));
+    return t=='O' && sprintf("Stat(/* %s */)", lsprint(1));
   }
 }
 
diff --git a/lib/modules/Geography.pmod/Countries.pmod b/lib/modules/Geography.pmod/Countries.pmod
index 4fd7c710c6225056180a6d2f883715523a2f117c..2ddcbf7ed43c621cb986dbffd1fd5e1a40ed308f 100644
--- a/lib/modules/Geography.pmod/Countries.pmod
+++ b/lib/modules/Geography.pmod/Countries.pmod
@@ -384,9 +384,7 @@ class Country
 
    string _sprintf(int t)
    {
-      if (t=='O')
-	 return "Country("+name+")";
-      return 0;
+     return t=='O' && sprintf("%O(%s)", this_program, name);
    }
 
 }
diff --git a/lib/modules/Geography.pmod/Position.pike b/lib/modules/Geography.pmod/Position.pike
index 4bda8a8426b0779cd6c54da197ca41dc3ea14e1a..6aaa7595a41dc175553a5e9782b28e9974da2a5a 100644
--- a/lib/modules/Geography.pmod/Position.pike
+++ b/lib/modules/Geography.pmod/Position.pike
@@ -529,10 +529,5 @@ int `>(object pos)
 //!
 string _sprintf(int|void t)
 {
-  switch(t)
-  {
-    case 't': return "Geography.Position";
-    case 'O': return "Position("+latitude()+", "+longitude()+")";
-  }
-  return 0;
+  return t=='O' && sprintf("%O(%s, %s)", latitude(), longitude());
 }
diff --git a/lib/modules/Locale.pmod/module.pmod b/lib/modules/Locale.pmod/module.pmod
index 09bd8381b7cdeb0165472fe3391f433928362555..721e2b114323f5d537e8c429a8bef546b9550ced 100644
--- a/lib/modules/Locale.pmod/module.pmod
+++ b/lib/modules/Locale.pmod/module.pmod
@@ -86,10 +86,10 @@ static class LanguageListObject( array(string) languages )
 {
   int timestamp  = time(1);
 
-  static string _sprintf()
+  static string _sprintf(int t)
   {
-    return sprintf("LanguageListObject(timestamp: %d, %O)",
-		   timestamp, languages);
+    return t=='O' && sprintf("%O(timestamp: %d, %O)", this_program,
+			     timestamp, languages);
   }
 }
 
@@ -196,10 +196,11 @@ class LocaleObject
     return size;
   }
 
-  static string _sprintf()
+  static string _sprintf(int t)
   {
-    return sprintf("LocaleObject(timestamp: %d, bindings: %d, functions: %d)",
-		   timestamp, sizeof(bindings), sizeof(functions) );
+    return t=='O' && sprintf("%O(timestamp: %d, bindings: %d, functions: %d)",
+			     this_program, timestamp, sizeof(bindings),
+			     sizeof(functions) );
   }
 }
 
@@ -487,9 +488,7 @@ class DeferredLocale( static string project,
       case 's':
 	return lookup();
       case 'O':
-	return sprintf("DeferredLocale(%O)", lookup());
-      default:
-	error(sprintf("Illegal formatting char '%c'\n", c));
+	return sprintf("%O(%O)", this_program, lookup());
     }
   }
 
diff --git a/lib/modules/Parser.pmod/C.pmod b/lib/modules/Parser.pmod/C.pmod
index 3d4d1ccd8ac8b3e97090dc91ebaca726584e3c7a..53fcc57c47eff0cf25d6eab051084947f8b1a822 100644
--- a/lib/modules/Parser.pmod/C.pmod
+++ b/lib/modules/Parser.pmod/C.pmod
@@ -4,7 +4,7 @@
 //
 // #pike __REAL_VERSION__
 //
-// $Id: C.pmod,v 1.31 2002/09/22 18:13:52 nilsson Exp $
+// $Id: C.pmod,v 1.32 2002/11/29 00:38:32 nilsson Exp $
 
 mapping(string:string) global_groupings=(["{":"}","(":")","[":"]"]);
 
@@ -238,7 +238,7 @@ class Token
 	case 's':
 	  return text;
 	case 'O':
-	  return sprintf("Token(%O,%O,%d)",text,file,line);
+	  return sprintf("%O(%O,%O,%d)",this_program,text,file,line);
       }
     }
 
diff --git a/lib/modules/Parser.pmod/RCS.pike b/lib/modules/Parser.pmod/RCS.pike
index 25aaf39d2e500d821da90f4bf5ece2750cb1b7e3..03996e1ae18ba2acfcdec0245af953237992e9d7 100644
--- a/lib/modules/Parser.pmod/RCS.pike
+++ b/lib/modules/Parser.pmod/RCS.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: RCS.pike,v 1.26 2002/11/26 21:04:41 grubba Exp $
+// $Id: RCS.pike,v 1.27 2002/11/29 00:52:48 nilsson Exp $
 
 //! A RCS file parser that eats a RCS *,v file and presents nice pike
 //! data structures of its contents.
@@ -75,10 +75,8 @@ mapping(string:string) branches;
 
 string _sprintf(int type)
 {
-  if(type=='t')
-    return "RCS";
-  return sprintf("RCS(/* %d revisions */)",
-		 revisions && sizeof(revisions));
+  return type=='O' && sprintf("%O(/* %d revisions */)", this_program,
+			      revisions && sizeof(revisions));
 }
 
 //! Data for all revisions of the file. The indices of the mapping are
diff --git a/lib/modules/Parser.pmod/XML.pmod/DOM.pmod b/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
index 862bd9821a2721d2b4eb295275eab0d62e966304..8ca2a4b6780881e03d8af3a01db76c85012bbacf 100644
--- a/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
+++ b/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
@@ -58,7 +58,8 @@ class DOMException(int code) {
 
   static string _sprintf(int mode, mapping options)
   {
-    return mode == 'O' && "DOMException(" + (symbolic[code]||code) + ")";
+    return mode == 'O' && sprintf("%O(%s)", this_program,
+				  (string)(symbolic[code]||code) );
   }
 
 };
@@ -1003,8 +1004,8 @@ class ParseException
   static string _sprintf(int mode, mapping options)
   {
     return mode == 'O' &&
-      sprintf("DOM.ParseException(%O /* %O char %d */)",
-	      message, sysid, loc);
+      sprintf("%O(%O /* %O char %d */)",
+	      this_program, message, sysid, loc);
   }
 
   static void create(string _message, string|void _sysid, string|void _pubid,
diff --git a/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod b/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
index 791629b4f624e4337535f22543db1c165f3e8234..3389577309104d47332bc628a86c10c936b6cd63 100644
--- a/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
+++ b/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
@@ -244,7 +244,6 @@ class NSNode {
   }
 
   string _sprintf(int t) {
-    if(t=='t') return "NSNode";
     if(t=='O') {
       mapping nt = ([ XML_ROOT:"ROOT",
 		      XML_ELEMENT:"ELEMENT",
@@ -256,10 +255,11 @@ class NSNode {
 		      XML_ATTR:"ATTR" ]);
       string n = get_any_name();
       if(!n || !sizeof(n))
-	return sprintf("NSNode(%s)", nt[get_node_type()] || "UNKNOWN");
-      return sprintf("NSNode(%s,%O)", nt[get_node_type()] || "UNKNOWN", n);
+	return sprintf("%O(%s)", this_program,
+		       nt[get_node_type()] || "UNKNOWN");
+      return sprintf("%O(%s,%O)", this_program,
+		     nt[get_node_type()] || "UNKNOWN", n);
     }
-    error("Can't show object as %c.\n", t);
   }
 }
 
diff --git a/lib/modules/Parser.pmod/XML.pmod/Validating.pike b/lib/modules/Parser.pmod/XML.pmod/Validating.pike
index 30e294af79c55cc2b2c0965494a7df8a2570cb12..790209e89d8343fcf23991c2c2ad10acd793253e 100644
--- a/lib/modules/Parser.pmod/XML.pmod/Validating.pike
+++ b/lib/modules/Parser.pmod/XML.pmod/Validating.pike
@@ -71,7 +71,7 @@ static private class Element {
   
   string _sprintf(int mode, mapping options)
   {
-    return mode=='O' && "Element(\""+name+"\")";
+    return mode=='O' && sprintf("%O(%O)", this_program, name);
   }
 
   int accept_element(string name)