diff --git a/secure/simul_efun/comm.c b/secure/simul_efun/comm.c
index 6c995a9..ea47fd3 100644
--- a/secure/simul_efun/comm.c
+++ b/secure/simul_efun/comm.c
@@ -105,16 +105,20 @@
     if (!stringp(file) || !this_player())
         return 0;
 
-    string txt = read_bytes(file, -(TAIL_MAX_BYTES + 80), (TAIL_MAX_BYTES + 80));
+    bytes bs = read_bytes(file, -(TAIL_MAX_BYTES + 80),
+                          (TAIL_MAX_BYTES + 80));
     // read_bytes() returns 0 if the start of the section given by
-    // parameter #2 lies beyond the beginning of the file.
+    // parameter #2 lies before the beginning of the file.
     // In this case we simply try and read the entire file.
-    if (!stringp(txt) && file_size(file) < TAIL_MAX_BYTES+80)
-      txt = read_file(file);
+    if (!bytesp(bs) && file_size(file) < TAIL_MAX_BYTES+80)
+      bs = read_bytes(file, 0, (TAIL_MAX_BYTES + 80));
     // Exit if still nothing could be read.
-    if (!stringp(txt))
+    if (!bytesp(bs))
       return 0;
 
+    // convert to string
+    string txt = to_text(bs, "UTF-8");
+
     // cut off first (incomplete) line
     int index = strstr(txt, "\n");
     if (index > -1) {
diff --git a/secure/simul_efun/files.c b/secure/simul_efun/files.c
index 107df99..50ae24b 100644
--- a/secure/simul_efun/files.c
+++ b/secure/simul_efun/files.c
@@ -90,7 +90,7 @@
 {
 
     int ptr;
-    string bytes;
+    bytes byte_seq;
 
     set_this_object(previous_object());
     if (!sizeof(source)||!sizeof(dest)||source==dest||(file_size(source)==-1)||
@@ -116,11 +116,11 @@
     }
     do
     {
-      bytes = read_bytes(source, ptr, MAXLEN); ptr += MAXLEN;
-      if (!bytes) bytes="";
-      write_file(dest, bytes);
+      byte_seq = read_bytes(source, ptr, MAXLEN); ptr += MAXLEN;
+      if (!byte_seq) byte_seq="";
+      write_file(dest, byte_seq);
     }
-    while(sizeof(bytes) == MAXLEN);
+    while(sizeof(byte_seq) == MAXLEN);
     return 0;
 }
 #endif //!__EFUN_DEFINED__(copy_file)
diff --git a/secure/simul_efun/spare/comm.c b/secure/simul_efun/spare/comm.c
index 6c995a9..ea47fd3 100644
--- a/secure/simul_efun/spare/comm.c
+++ b/secure/simul_efun/spare/comm.c
@@ -105,16 +105,20 @@
     if (!stringp(file) || !this_player())
         return 0;
 
-    string txt = read_bytes(file, -(TAIL_MAX_BYTES + 80), (TAIL_MAX_BYTES + 80));
+    bytes bs = read_bytes(file, -(TAIL_MAX_BYTES + 80),
+                          (TAIL_MAX_BYTES + 80));
     // read_bytes() returns 0 if the start of the section given by
-    // parameter #2 lies beyond the beginning of the file.
+    // parameter #2 lies before the beginning of the file.
     // In this case we simply try and read the entire file.
-    if (!stringp(txt) && file_size(file) < TAIL_MAX_BYTES+80)
-      txt = read_file(file);
+    if (!bytesp(bs) && file_size(file) < TAIL_MAX_BYTES+80)
+      bs = read_bytes(file, 0, (TAIL_MAX_BYTES + 80));
     // Exit if still nothing could be read.
-    if (!stringp(txt))
+    if (!bytesp(bs))
       return 0;
 
+    // convert to string
+    string txt = to_text(bs, "UTF-8");
+
     // cut off first (incomplete) line
     int index = strstr(txt, "\n");
     if (index > -1) {
diff --git a/secure/simul_efun/spare/files.c b/secure/simul_efun/spare/files.c
index 107df99..50ae24b 100644
--- a/secure/simul_efun/spare/files.c
+++ b/secure/simul_efun/spare/files.c
@@ -90,7 +90,7 @@
 {
 
     int ptr;
-    string bytes;
+    bytes byte_seq;
 
     set_this_object(previous_object());
     if (!sizeof(source)||!sizeof(dest)||source==dest||(file_size(source)==-1)||
@@ -116,11 +116,11 @@
     }
     do
     {
-      bytes = read_bytes(source, ptr, MAXLEN); ptr += MAXLEN;
-      if (!bytes) bytes="";
-      write_file(dest, bytes);
+      byte_seq = read_bytes(source, ptr, MAXLEN); ptr += MAXLEN;
+      if (!byte_seq) byte_seq="";
+      write_file(dest, byte_seq);
     }
-    while(sizeof(bytes) == MAXLEN);
+    while(sizeof(byte_seq) == MAXLEN);
     return 0;
 }
 #endif //!__EFUN_DEFINED__(copy_file)
