diff --git a/src/modules/Image/Makefile.in b/src/modules/Image/Makefile.in
index 8dfe0c2054380c01eee6a82d1f50c68fc47fafa9..2d7d7f38850f050020540c481346dd617c18e43e 100644
--- a/src/modules/Image/Makefile.in
+++ b/src/modules/Image/Makefile.in
@@ -1,10 +1,10 @@
-# $Id: Makefile.in,v 1.23 1999/05/23 17:46:37 mirar Exp $
+# $Id: Makefile.in,v 1.24 1999/05/24 14:33:09 mirar Exp $
 SRCDIR=@srcdir@
 VPATH=@srcdir@:@srcdir@/../..:../..
 OBJS = image_module.o \
 	image.o font.o togif.o matrix.o pnm_compat.o blit.o \
 	pattern.o dct.o operator.o x.o colortable.o polyfill.o \
-	orient.o colors.o search.o layers.o
+	orient.o colors.o search.o layers.o default_font.o
 MODNAME=image
 MODULE_SUBDIRS=encodings
 MODULE_ARCHIVES=encodings/encodings.a
diff --git a/src/modules/Image/font.c b/src/modules/Image/font.c
index c6f8239764afcd00ef4bc2581d619f2ef339d1b2..dd35b11a3515fb09bb6e14663ab10c2cb0434189 100644
--- a/src/modules/Image/font.c
+++ b/src/modules/Image/font.c
@@ -1,13 +1,16 @@
-/* $Id: font.c,v 1.48 1999/05/23 17:46:40 mirar Exp $ */
+/* $Id: font.c,v 1.49 1999/05/24 14:33:10 mirar Exp $ */
 #include "global.h"
 #include <config.h>
 
 #define SPACE_CHAR 'i'
 
+extern unsigned char * image_default_font;
+#define IMAGE_DEFAULT_FONT_SIZE 30596
+
 /*
 **! module Image
 **! note
-**!	$Id: font.c,v 1.48 1999/05/23 17:46:40 mirar Exp $
+**!	$Id: font.c,v 1.49 1999/05/24 14:33:10 mirar Exp $
 **! class Font
 **!
 **! note
@@ -219,7 +222,7 @@ static INLINE void free_font_struct(struct font *font)
 {
    if (font)
    {
-      if (font->mem)
+      if (font->mem && font->mem!=image_default_font)
       {
 #ifdef HAVE_MMAP
 	 munmap(font->mem,font->mmaped_size);
@@ -335,26 +338,32 @@ void font_load(INT32 args);
 
 void font_create(INT32 args)
 {
-   if (args) 
-   {
-     font_load(args);
-     pop_stack();
-   }
+   font_load(args);
+   pop_stack();
 }
 
 void font_load(INT32 args)
 {
    int fd;
+   size_t size;
 
-   if (args<1 
-       || sp[-args].type!=T_STRING)
-      error("font->read: illegal or wrong number of arguments\n");
-   
    if (THIS)
    {
       free_font_struct(THIS);
       THIS=NULL;
    }
+
+   if (!args) 
+   {
+      THIS=(struct font *)xalloc(sizeof(struct font));
+      THIS->mem=image_default_font;
+      size=IMAGE_DEFAULT_FONT_SIZE;
+      goto loading_default;
+   }
+
+   if (sp[-args].type!=T_STRING)
+      error("font->read: illegal or wrong number of arguments\n");
+   
    do 
    {
 #ifdef FONT_DEBUG
@@ -365,7 +374,6 @@ void font_load(INT32 args)
 
    if (fd >= 0)
    {
-      size_t size;
       struct font *new_font;
 
       size = (size_t) file_size(fd);
@@ -391,6 +399,8 @@ void font_load(INT32 args)
 #endif
 	 THREADS_DISALLOW();
 
+loading_default:
+
 	 if (THIS->mem)
 	 {
 	    struct file_head 
@@ -473,6 +483,8 @@ void font_load(INT32 args)
 
 		  }
 
+		  if (!args) goto done;
+
 		  fd_close(fd);
 		  pop_n_elems(args);
 		  ref_push_object(THISOBJ);   /* success */
@@ -488,6 +500,7 @@ void font_load(INT32 args)
 #ifdef FONT_DEBUG
 	    else fprintf(stderr,"FONT wrong cookie\n");
 #endif
+	    if (!args) goto done; /* just in case */
 	 } /* mem failure */
 #ifdef FONT_DEBUG
 	 else fprintf(stderr,"FONT mem failure\n");
@@ -504,6 +517,8 @@ void font_load(INT32 args)
    else fprintf(stderr,"FONT fd failure\n");
 #endif
 
+done:
+
    pop_n_elems(args);
    push_int(0);
    return;
@@ -888,7 +903,7 @@ void init_image_font(void)
    ADD_FUNCTION("create",font_create,tFunc(tOr(tVoid,tStr),tVoid),0);
 
    /* function(string:object) */
-   ADD_FUNCTION("write",font_write,tFunc(tStr,tObj),0);
+   ADD_FUNCTION("write",font_write,tFuncV(,tStr,tObj),0);
 
    /* function(:int) */
    ADD_FUNCTION("height",font_height,tFunc(,tInt),0);
diff --git a/src/modules/Image/module_testsuite.in b/src/modules/Image/module_testsuite.in
index d88f0c9497ff99422a6a920130c3b65379f679f5..404d813a677081b40ae67d4db09d9d851dd0ed0f 100644
--- a/src/modules/Image/module_testsuite.in
+++ b/src/modules/Image/module_testsuite.in
@@ -415,142 +415,187 @@ if (!equal(img->max(),({255,254,253}))) do { werror("failure; Image.image/advanc
 return 1;
 
 
+}
+mixed b() { return 1; }
+
+....
+test 22, expected result: EQ
+mixed a(){
+# 1 "-"
 
 
+#253 "testsuite.in.in"
+if (!objectp(Image.Font())) do { werror("failure; Image.image/Image.Font/instansiating default font: "+( "not object" )+"\n"); return 0; } while (0); 
+return 1;
+
 }
 mixed b() { return 1; }
 
 ....
-test 22, expected result: EQ
+test 23, expected result: EQ
+mixed a(){
+# 1 "-"
+
+
+#257 "testsuite.in.in"
+object f=Image.Font();
+object i=f->write("hej");
+if (i!=Image.PNM.decode(MIME.decode_base64("UDQKMTkgMTEK///gv/7gv//grzjglt7gth7gtv7gtv7gtx7g//7g//Hg"))) 
+do { werror("failure; Image.image/Image.Font/writing simple text with default font: "+( "incorrect" )+"\n"); return 0; } while (0);
+return 1;
+
+}
+mixed b() { return 1; }
+
+....
+test 24, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#255 "testsuite.in.in"
+#264 "testsuite.in.in"
+object f=Image.Font();
+object i=f->write("h","o");
+if (i!=Image.PNM.decode(MIME.decode_base64("UDQKNyAyMwr+vr6ulra2trb+/v7+/s62tra2zv7+/g==")))
+do { werror("failure; Image.image/Image.Font/writing multiple lines with default font: "+( "incorrect" )+"\n"); return 0; } while (0);
+return 1;
+
+
+
+}
+mixed b() { return 1; }
+
+....
+test 25, expected result: EQ
+mixed a(){
+# 1 "-"
+
+
+#275 "testsuite.in.in"
 object c=Image.Colortable(({Image.Color.white,Image.Color.black}));
 array z=(array)c;
 if (sizeof(z)!=2) 
-do { werror("failure; Image.image/colortable/colortable - black/white init & cast: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0);
+do { werror("failure; Image.image/Image.Colortable/colortable - black/white init & cast: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0);
 if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) &&
 (z[1]!=Image.Color.black || z[0]!=Image.Color.white))
-do { werror("failure; Image.image/colortable/colortable - black/white init & cast: "+( "didn't get black and white: "+((array(string))c)*", " )+"\n"); return 0; } while (0);
+do { werror("failure; Image.image/Image.Colortable/colortable - black/white init & cast: "+( "didn't get black and white: "+((array(string))c)*", " )+"\n"); return 0; } while (0);
 return 1;
 
 }
 mixed b() { return 1; }
 
 ....
-test 23, expected result: EQ
+test 26, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#265 "testsuite.in.in"
+#285 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(({Image.Color.white,Image.Color.black}));
 img=c*img;
 array z=(array)Image.Colortable(img);
 if (sizeof(z)!=2) 
-do { werror("failure; Image.image/colortable/colortable - black/white normal: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0);
+do { werror("failure; Image.image/Image.Colortable/colortable - black/white normal: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0);
 if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) &&
 (z[1]!=Image.Color.black || z[0]!=Image.Color.white))
-do { werror("failure; Image.image/colortable/colortable - black/white normal: "+( "didn't get black and white: "+((array(string))c)*", " )+"\n"); return 0; } while (0);
+do { werror("failure; Image.image/Image.Colortable/colortable - black/white normal: "+( "didn't get black and white: "+((array(string))c)*", " )+"\n"); return 0; } while (0);
 return 1;
 
 }
 mixed b() { return 1; }
 
 ....
-test 24, expected result: EQ
+test 27, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#277 "testsuite.in.in"
+#297 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(({Image.Color.white,Image.Color.black}));
 c->floyd_steinberg();
 img=c*img;
 array z=(array)Image.Colortable(img);
 if (sizeof(z)!=2) 
-do { werror("failure; Image.image/colortable/colortable - black/white floyd-steinberg: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0);
+do { werror("failure; Image.image/Image.Colortable/colortable - black/white floyd-steinberg: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0);
 if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) &&
 (z[1]!=Image.Color.black || z[0]!=Image.Color.white))
-do { werror("failure; Image.image/colortable/colortable - black/white floyd-steinberg: "+( "didn't get black and white: "+((array(string))c)*", " )+"\n"); return 0; } while (0);
+do { werror("failure; Image.image/Image.Colortable/colortable - black/white floyd-steinberg: "+( "didn't get black and white: "+((array(string))c)*", " )+"\n"); return 0; } while (0);
 return 1;
 
 }
 mixed b() { return 1; }
 
 ....
-test 25, expected result: EQ
+test 28, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#290 "testsuite.in.in"
+#310 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(({Image.Color.white,Image.Color.black}));
 c->ordered();
 img=c*img;
 array z=(array)Image.Colortable(img);
 if (sizeof(z)!=2) 
-do { werror("failure; Image.image/colortable/colortable - black/white ordered: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0);
+do { werror("failure; Image.image/Image.Colortable/colortable - black/white ordered: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0);
 if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) &&
 (z[1]!=Image.Color.black || z[0]!=Image.Color.white))
-do { werror("failure; Image.image/colortable/colortable - black/white ordered: "+( "didn't get black and white: "+((array(string))c)*", " )+"\n"); return 0; } while (0);
+do { werror("failure; Image.image/Image.Colortable/colortable - black/white ordered: "+( "didn't get black and white: "+((array(string))c)*", " )+"\n"); return 0; } while (0);
 return 1;
 
 }
 mixed b() { return 1; }
 
 ....
-test 26, expected result: EQ
+test 29, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#303 "testsuite.in.in"
+#323 "testsuite.in.in"
 object img=Image.image(200,200)->test(42);
 img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})}));
 object c=Image.Colortable(img,1000)->cubicles(16,16,16,4);
-if (sizeof(c)<200) do { werror("failure; Image.image/colortable/colortable - standard: "+( "too few colors" )+"\n"); return 0; } while (0);
+if (sizeof(c)<200) do { werror("failure; Image.image/Image.Colortable/colortable - standard: "+( "too few colors" )+"\n"); return 0; } while (0);
 object img1=(c*img);
-if (!(img-img1<50)) do { werror("failure; Image.image/colortable/colortable - standard: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0);
+if (!(img-img1<50)) do { werror("failure; Image.image/Image.Colortable/colortable - standard: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0);
 return 1;
 
 }
 mixed b() { return 1; }
 
 ....
-test 27, expected result: EQ
+test 30, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#312 "testsuite.in.in"
+#332 "testsuite.in.in"
 object img=Image.image(200,200)->test(42);
 img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})}));
 object c=Image.Colortable(32,32,32)->floyd_steinberg();
 object img1=(c*img);
-if (!(img-img1<50)) do { werror("failure; Image.image/colortable/colortable - floyd-steinberg: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0);
+if (!(img-img1<50)) do { werror("failure; Image.image/Image.Colortable/colortable - floyd-steinberg: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0);
 return 1;
 
 }
 mixed b() { return 1; }
 
 ....
-test 28, expected result: EQ
+test 31, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#320 "testsuite.in.in"
+#340 "testsuite.in.in"
 object img=Image.image(200,200)->test(42);
 img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})}));
 object c=Image.Colortable(32,32,32)->ordered();
 object img1=(c*img);
-if (!(img-img1<32)) do { werror("failure; Image.image/colortable/colortable - ordered: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0);
+if (!(img-img1<32)) do { werror("failure; Image.image/Image.Colortable/colortable - ordered: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0);
 return 1;
 
 
@@ -559,12 +604,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 29, expected result: EQ
+test 32, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#332 "testsuite.in.in"
+#352 "testsuite.in.in"
 object img=Image.image(100,100)->test(40);
 object img1=Image.PNM.decode(Image.PNM.encode(img));
 if (img!=img1) do { werror("failure; Image.image/encoding/decoding/Image.PNM.encode/decode: "+( "differ" )+"\n"); return 0; } while (0);
@@ -574,12 +619,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 30, expected result: EQ
+test 33, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#338 "testsuite.in.in"
+#358 "testsuite.in.in"
 object img=Image.image(100,100)->test(41);
 object c=Image.Colortable(img,250)->cubicles(10,10,10,1)->floyd_steinberg();
 img=c*img;
@@ -591,12 +636,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 31, expected result: EQ
+test 34, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#346 "testsuite.in.in"
+#366 "testsuite.in.in"
 object img=Image.image(100,100)->test(42);
 object c=Image.Colortable(img,256)->cubicles(16,16,16,1);
 img=c*img;
@@ -608,12 +653,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 32, expected result: EQ
+test 35, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#354 "testsuite.in.in"
+#374 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(img,256)->floyd_steinberg()->cubicles(16,16,16);
 img=c*img;
@@ -625,12 +670,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 33, expected result: EQ
+test 36, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#362 "testsuite.in.in"
+#382 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 if (Image.AVS.decode(Image.AVS.encode(img))!=img) do { werror("failure; Image.image/encoding/decoding/Image.AVS.encode/decode : "+( "differ" )+"\n"); return 0; } while (0);
 return 1;
@@ -639,12 +684,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 34, expected result: EQ
+test 37, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#367 "testsuite.in.in"
+#387 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 if (Image.BMP.decode(Image.BMP.encode(img))!=img) do { werror("failure; Image.image/encoding/decoding/Image.BMP.encode/decode (truecolor): "+( "differ" )+"\n"); return 0; } while (0);
 return 1;
@@ -653,12 +698,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 35, expected result: EQ
+test 38, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#372 "testsuite.in.in"
+#392 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(img,256);
 img=c*img;
@@ -669,12 +714,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 36, expected result: EQ
+test 39, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#379 "testsuite.in.in"
+#399 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(img,16);
 img=c*img;
@@ -685,12 +730,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 37, expected result: EQ
+test 40, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#386 "testsuite.in.in"
+#406 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(img,2);
 img=c*img;
@@ -701,12 +746,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 38, expected result: EQ
+test 41, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#393 "testsuite.in.in"
+#413 "testsuite.in.in"
 object img=Image.image(256,240)->test(43);
 img=Image.Colortable( ({"white","black","red","green"}) )*img;
 if (Image.HRZ.decode(Image.HRZ.encode(img))!=img) do { werror("failure; Image.image/encoding/decoding/Image.HRZ.encode/decode : "+( "differ" )+"\n"); return 0; } while (0);
@@ -716,12 +761,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 39, expected result: EQ
+test 42, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#399 "testsuite.in.in"
+#419 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(img,16);
 img=c*img;
@@ -732,12 +777,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 40, expected result: EQ
+test 43, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#406 "testsuite.in.in"
+#426 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 if (Image.PCX.decode(Image.PCX.encode(img))!=img) do { werror("failure; Image.image/encoding/decoding/Image.PCX.encode/decode : "+( "differ" )+"\n"); return 0; } while (0);
 return 1;
@@ -746,12 +791,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 41, expected result: EQ
+test 44, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#411 "testsuite.in.in"
+#431 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 if (Image.PNM.decode(Image.PNM.encode(img))!=img) do { werror("failure; Image.image/encoding/decoding/Image.PNM.encode/decode : "+( "differ" )+"\n"); return 0; } while (0);
 return 1;
@@ -760,12 +805,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 42, expected result: EQ
+test 45, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#416 "testsuite.in.in"
+#436 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 if (Image.TGA.decode(Image.TGA.encode(img))!=img) do { werror("failure; Image.image/encoding/decoding/Image.TGA.encode/decode : "+( "differ" )+"\n"); return 0; } while (0);
 return 1;
@@ -774,12 +819,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 43, expected result: EQ
+test 46, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#421 "testsuite.in.in"
+#441 "testsuite.in.in"
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(({Image.Color.white,Image.Color.black}));
 img=c*img;
@@ -799,12 +844,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 44, expected result: EQ
+test 47, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#437 "testsuite.in.in"
+#457 "testsuite.in.in"
 #if constant(Image.XPM.encode)
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(img,16);
@@ -820,12 +865,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 45, expected result: EQ
+test 48, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#449 "testsuite.in.in"
+#469 "testsuite.in.in"
 #if constant(Image.XPM.encode)
 object img=Image.image(100,100)->test(43);
 object c=Image.Colortable(16,16,16); 
@@ -839,12 +884,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 46, expected result: EQ
+test 49, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#459 "testsuite.in.in"
+#479 "testsuite.in.in"
 #if constant(Image.TIFF.encode)
 object img=Image.image(100,100)->test(43);
 if (Image.TIFF.decode(Image.TIFF.encode(img))!=img) do { werror("failure; Image.image/encoding/decoding/Image.TIFF.encode/decode : "+( "differ" )+"\n"); return 0; } while (0);
@@ -857,12 +902,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 47, expected result: EQ
+test 50, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#468 "testsuite.in.in"
+#488 "testsuite.in.in"
 #if constant(Image.XFace.encode)
 object img=Image.image(48,48)->test(43);
 object c=Image.Colortable(({Image.Color.white,Image.Color.black}));
@@ -878,12 +923,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 48, expected result: EQ
+test 51, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#480 "testsuite.in.in"
+#500 "testsuite.in.in"
 #if constant(Image.JPEG.encode)
 object img=Image.image(100,100)->test(43);
 object img1=Image.JPEG.decode(Image.JPEG.encode(img,(["quality":100])));
@@ -899,12 +944,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 49, expected result: EQ
+test 52, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#494 "testsuite.in.in"
+#514 "testsuite.in.in"
 foreach (
 ({ ({ "black", ({ 0, 0, 0 }), ({ 0, 0, 0 }), 0 }),
 ({ "blue", ({ 0, 0, 255 }), ({ 170, 255, 255 }), 41 }),
@@ -970,12 +1015,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 50, expected result: EQ
+test 53, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#556 "testsuite.in.in"
+#576 "testsuite.in.in"
 if (!arrayp(indices(Image.Color)))
 do { werror("failure; Image.image/Image.Color/indices(Image.Color): "+( "wrong type\n" )+"\n"); return 0; } while (0);
 if (!stringp(indices(Image.Color)[0]))
@@ -988,12 +1033,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 51, expected result: EQ
+test 54, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#565 "testsuite.in.in"
+#585 "testsuite.in.in"
 if (!arrayp(values(Image.Color)))
 do { werror("failure; Image.image/Image.Color/values(Image.Color): "+( "wrong type\n" )+"\n"); return 0; } while (0);
 if (!objectp(values(Image.Color)[0]))
@@ -1006,12 +1051,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 52, expected result: EQ
+test 55, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#574 "testsuite.in.in"
+#594 "testsuite.in.in"
 foreach (
 ({ ({ "black", ({ 0, 0, 0 }), ({ 0, 0, 0 }), 0 }),
 ({ "blue", ({ 0, 0, 255 }), ({ 170, 255, 255 }), 41 }),
@@ -1037,12 +1082,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 53, expected result: EQ
+test 56, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#598 "testsuite.in.in"
+#618 "testsuite.in.in"
 
 object Stina=Image.JPEG.decode(MIME.decode_base64(
 "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a\r\nHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy\r\nMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIA\r\nAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAABgcABQgE/8QANhAAAgEEAAQDAwkJAAAAAAAAAQID\r\nAAQFEQYSITEHE3EiQYEUMjNCYXOhscEVIzY3UVJicsL/xAAZAQACAwEAAAAAAAAAAAAAAAACBAAB\r\nAwX/xAAdEQACAgMBAQEAAAAAAAAAAAABAgARAyExEjJB/9oADAMBAAIRAxEAPwBcXMazCMT3wOjy\r\nhAOpPpXaOEs2bIXdhib2WJVIJW31sfO3vfpXXaWlrd35SUDn0PLHYg9/0p44HiS1yWIgCSwRXcQ8\r\nuW3kl8vlK9NjferZ1X65JlORVtBZmW7iSWFJreTzUZG5ikq6ZTrtqtQ+EuLixvh7jm8tRLcp5khD\r\ndT16b+FLDxltcZe5DFXWPlglyLs0d38nYHYGtA6+3dPvERfJ8JYwBQnJbouh00eUVRbViXbeR67M\r\nzeIRi4f8QLlLNFhVFdF+tok73+PauK3s5r20DLEsS82/PufYD0x48Ri8/wCPGVkybQPBYBWSCYjT\r\nyFQOx79wfhTNzj4+2w8sV9bxtC6FEhZRo9PcKFcwA3I7MpAAmbplvYomtXijcluUSxN8emvdRH4X\r\nAW0eYLHmlWVUHOSTqhG/hW1zTShnWLQ1pui9e1GvhwD+xrqYczefcMQT3IFBme01GMCn1uC1/byT\r\nsGtWKuDtXB67qxsM0l9bbyYhM8Oo9gA85Hp1owfwltZnaK1y1xBNolY/L3v0oLfgjHxZg2drkMjL\r\nfxvp0ktBErH7Dvr/AEregTMzctsJjocnx5gbVIIzbef50qqhGuXZ0a0Yw6dunuA+ND/CmDhxOItW\r\ne3C3xQhmce0P8d1ci7jZuQnUv9g70LVwQCSxiu8ROBpJc1LxJas0qzRrHcQbJ0yjQZT6dDSxzWdF\r\ngqRq9xJMy8qhm3yDtqtSMiSRGN0DK406nsd96UOd8PcFJxiTc/uIki505j0cH6o9DUpSNw1Y3UR7\r\nJc3kq24V3uJ/ZCjZK799PPCY6LA4a2s9FgqDm9nR37/xroseG8bip2nsrSAvrQk5tsBVkyEqpCk/\r\nHdJ5snrQjmJaNmWkP0ll/sPzpdZz+Z0Hr/1UqU4nYs3I9F+ji9BVUf4kP3VSpVHsyWWMvYeo/OhT\r\njT59v92f1qVKFvmFj+oL475g9Ksrbs1SpSB7Oj+T/9k="));
@@ -1060,12 +1105,12 @@ return 1;
 mixed b() { return 1; }
 
 ....
-test 54, expected result: EQ
+test 57, expected result: EQ
 mixed a(){
 # 1 "-"
 
 
-#612 "testsuite.in.in"
+#632 "testsuite.in.in"
 
 object Stina=Image.JPEG.decode(MIME.decode_base64(
 "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a\r\nHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy\r\nMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIA\r\nAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAABgcABQgE/8QANhAAAgEEAAQDAwkJAAAAAAAAAQID\r\nAAQFEQYSITEHE3EiQYEUMjNCYXOhscEVIzY3UVJicsL/xAAZAQACAwEAAAAAAAAAAAAAAAACBAAB\r\nAwX/xAAdEQACAgMBAQEAAAAAAAAAAAABAgARAyExEjJB/9oADAMBAAIRAxEAPwBcXMazCMT3wOjy\r\nhAOpPpXaOEs2bIXdhib2WJVIJW31sfO3vfpXXaWlrd35SUDn0PLHYg9/0p44HiS1yWIgCSwRXcQ8\r\nuW3kl8vlK9NjferZ1X65JlORVtBZmW7iSWFJreTzUZG5ikq6ZTrtqtQ+EuLixvh7jm8tRLcp5khD\r\ndT16b+FLDxltcZe5DFXWPlglyLs0d38nYHYGtA6+3dPvERfJ8JYwBQnJbouh00eUVRbViXbeR67M\r\nzeIRi4f8QLlLNFhVFdF+tok73+PauK3s5r20DLEsS82/PufYD0x48Ri8/wCPGVkybQPBYBWSCYjT\r\nyFQOx79wfhTNzj4+2w8sV9bxtC6FEhZRo9PcKFcwA3I7MpAAmbplvYomtXijcluUSxN8emvdRH4X\r\nAW0eYLHmlWVUHOSTqhG/hW1zTShnWLQ1pui9e1GvhwD+xrqYczefcMQT3IFBme01GMCn1uC1/byT\r\nsGtWKuDtXB67qxsM0l9bbyYhM8Oo9gA85Hp1owfwltZnaK1y1xBNolY/L3v0oLfgjHxZg2drkMjL\r\nfxvp0ktBErH7Dvr/AEregTMzctsJjocnx5gbVIIzbef50qqhGuXZ0a0Yw6dunuA+ND/CmDhxOItW\r\ne3C3xQhmce0P8d1ci7jZuQnUv9g70LVwQCSxiu8ROBpJc1LxJas0qzRrHcQbJ0yjQZT6dDSxzWdF\r\ngqRq9xJMy8qhm3yDtqtSMiSRGN0DK406nsd96UOd8PcFJxiTc/uIki505j0cH6o9DUpSNw1Y3UR7\r\nJc3kq24V3uJ/ZCjZK799PPCY6LA4a2s9FgqDm9nR37/xroseG8bip2nsrSAvrQk5tsBVkyEqpCk/\r\nHdJ5snrQjmJaNmWkP0ll/sPzpdZz+Z0Hr/1UqU4nYs3I9F+ji9BVUf4kP3VSpVHsyWWMvYeo/OhT\r\njT59v92f1qVKFvmFj+oL475g9Ksrbs1SpSB7Oj+T/9k="));
diff --git a/src/modules/Image/testsuite.in.in b/src/modules/Image/testsuite.in.in
index 1cb658811cfbdfa0e13398cd575a5cffd64157b1..5cb71ec9cc2740b2ee24506cf1a9b60028d238a8 100644
--- a/src/modules/Image/testsuite.in.in
+++ b/src/modules/Image/testsuite.in.in
@@ -246,10 +246,30 @@
    if (!equal(img->max(),({255,254,253}))) fail("wrong maxcolor");
    ok();
 
+//-----------------------------------------------------
+#chapter Image.Font
+
+#test instansiating default font
+   if (!objectp(Image.Font())) fail("not object"); 
+   ok();
+
+#test writing simple text with default font
+   object f=Image.Font();
+   object i=f->write("hej");
+   if (i!=Image.PNM.decode(MIME.decode_base64("UDQKMTkgMTEK///gv/7gv//grzjglt7gth7gtv7gtv7gtx7g//7g//Hg"))) 
+      fail("incorrect");
+   ok();
+
+#test writing multiple lines with default font
+   object f=Image.Font();
+   object i=f->write("h","o");
+   if (i!=Image.PNM.decode(MIME.decode_base64("UDQKNyAyMwr+vr6ulra2trb+/v7+/s62tra2zv7+/g==")))
+      fail("incorrect");
+   ok();
    
 
 //-----------------------------------------------------
-#chapter colortable
+#chapter Image.Colortable
 
 #test colortable - black/white init & cast
    object c=Image.Colortable(({Image.Color.white,Image.Color.black}));
@@ -660,7 +680,7 @@ if (!(Stinares-expected_result<80))
    fail("->match_phase(float f, object needle) differ too much");
 
  /*
- This is used to create more tests. Please don't remove!
+ This is used to create more tests. Please don't remMIME.encode_base64ove!
 
  MIME.encode_base64(Image.JPEG.encode(Stinares));
  */