diff --git a/.gitattributes b/.gitattributes
index 84159033d0d7b0e4e60dc15888c1881e64de34a0..d92ab66e9fe5b10b5b5a2595e0733cfec27116f3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -634,7 +634,6 @@ testfont binary
 /src/post_modules/Unicode/acconfig.h foreign_ident
 /src/post_modules/Unicode/buffer.c foreign_ident
 /src/post_modules/Unicode/configure.in foreign_ident
-/src/post_modules/Unicode/normalize.c foreign_ident
 /src/post_modules/Unicode/split.c foreign_ident
 /src/post_modules/Unicode/unicode_module.cmod foreign_ident
 /src/post_modules/configure.in foreign_ident
diff --git a/src/post_modules/Unicode/normalize.c b/src/post_modules/Unicode/normalize.c
index ccf36be33aa7153b9324acf8834aaa3c96317844..48c0b8e92af40fad3a39b01c4306a6e5a7dbf593 100644
--- a/src/post_modules/Unicode/normalize.c
+++ b/src/post_modules/Unicode/normalize.c
@@ -1,7 +1,7 @@
 #include "global.h"
 #include "stralloc.h"
 #include "global.h"
-RCSID("$Id: normalize.c,v 1.7 2001/11/22 14:52:18 grubba Exp $");
+RCSID("$Id$");
 #include "pike_macros.h"
 #include "interpret.h"
 #include "program.h"
@@ -276,7 +276,14 @@ struct pike_string *unicode_normalize( struct pike_string *source,
     return source;
   }
   /* What, me lisp? */
-  if( how & COMPOSE_BIT )
+  if( how & COMPOSE_BIT ) {
+    if (!source->size_shift && !(how & COMPAT_BIT)) {
+      /* NB: There are 8-bit characters that are changed in
+       *     compat mode; eg NBSP (0xA0) and DIAERESIS (0xA8).
+       */
+      add_ref(source);
+      return source;
+    }
     return
       uc_buffer_to_pikestring(
 	unicode_compose_buffer(
@@ -286,6 +293,7 @@ struct pike_string *unicode_normalize( struct pike_string *source,
 	      source ),
 	    how ),
 	  how ) );
+  }
   return
     uc_buffer_to_pikestring(
       unicode_decompose_buffer(