diff --git a/lib/modules/Stdio.pmod/Readline.pike b/lib/modules/Stdio.pmod/Readline.pike
index eb12f06803970ae43380296f6a81fcba4dcbc110..15a40a8b26667d3e07ad3284853d0c8428c4e6ba 100644
--- a/lib/modules/Stdio.pmod/Readline.pike
+++ b/lib/modules/Stdio.pmod/Readline.pike
@@ -1,4 +1,4 @@
-// $Id: Readline.pike,v 1.38 2000/10/08 19:02:15 grubba Exp $
+// $Id: Readline.pike,v 1.39 2000/10/10 19:58:24 hubbe Exp $
 #pike __REAL_VERSION__
 class OutputController
 {
@@ -1111,25 +1111,14 @@ string get_prompt()
 
 string set_prompt(string newp, array(string)|void newattrs)
 {
+//  werror("READLINE: Set prompt: %O\n",newp);
   string oldp = prompt;
   if(newp!=prompt || !equal(prompt_attrs, newattrs))
   {
-    if(newline_func)
-    {
-//      werror("\nNew prompt!!! %O\n",newline_func);
-      int p=cursorpos;
-      setcursorpos(0);
-      output_controller->bol();
-      output_controller->clear(1);
-      prompt = newp;
-      prompt_attrs = newattrs && copy_value(newattrs);
-      cursorpos=strlen(text);
-      redisplay(0, 1);
-      cursorpos=p;
-    }else{
-      prompt = newp;
-      prompt_attrs = newattrs && copy_value(newattrs);
-    }
+    prompt = newp;
+    prompt_attrs = newattrs && copy_value(newattrs);
+    if(newline_func) redisplay(0);
+
   }
   return oldp;
 }
@@ -1295,7 +1284,7 @@ void redisplay(int clear, int|void nobackup)
   output_controller->check_columns();
 
   if(!input_controller->dumb) {
-    if(newline_func == read_newline) {
+    if(newline_func) {
       if(prompt_attrs)
 	output_controller->turn_on(@prompt_attrs);
       output_controller->write(prompt);
@@ -1389,10 +1378,21 @@ static private void read_newline(string s)
 
 void set_nonblocking(function f)
 {
+  int p=cursorpos;
   if (newline_func = f) {
     output_controller->enable();
     input_controller->enable();
+
+    output_controller->bol();
+    output_controller->clear(1);
+    cursorpos=p;
+    redisplay(0,1);
   } else {
+    setcursorpos(0);
+    output_controller->bol();
+    output_controller->clear(1);
+    cursorpos=p;
+
     input_controller->disable();
     output_controller->disable();
   }