diff --git a/src/modules/readlinemod/readlinemod.c b/src/modules/readlinemod/readlinemod.c
index 7e4a40a5eb51da74cf1e6605ff83c90d75fc9e56..c48a61ec2b50b1e325e9e5848168c98f75d9fd1e 100644
--- a/src/modules/readlinemod/readlinemod.c
+++ b/src/modules/readlinemod/readlinemod.c
@@ -88,6 +88,8 @@ void init_readlinemod_efuns(void)
 
 static void f_readline(INT32 args)
 {
+  char *prompt;
+  int plen;
   char line[BLOCK];
   char *r;
   int tmp;
@@ -98,20 +100,25 @@ static void f_readline(INT32 args)
   if(sp[-args].type != T_STRING)
     error("Bad argument 1 to readline()\n");
 
-  fwrite(sp[-args].u.string->str,1,sp[-args].u.string->len,stdout);
-  fflush(stdout);
+  prompt = sp[-args].u.string->str;
+  plen = sp[-args].u.string->len;
 
-  pop_n_elems(args);
   THREADS_ALLOW();
-  r=fgets(line,BLOCK,stdin);
+
+  write(1, prompt, plen);
+  r=fgets(line,BLOCK,stdin);	/* Should probably get rid of this one */
+  line[BLOCK-1] = '\0';		/* Always NUL-terminated */
+
   THREADS_DISALLOW();
 
-  if(r)
+  pop_n_elems(args);
+
+  if (r)
   {
     INT32 len;
-    if(len=strlen(line))
+    if ((len=strlen(line)))
     {
-      if(line[len-1]=='\n')
+      if (line[len-1]=='\n')
       {
 	push_string(make_shared_binary_string(line,len-1));
 	return;