diff --git a/daemons/console-run.c b/daemons/console-run.c
index f98ebf8a..eab1f51d 100644
--- a/daemons/console-run.c
+++ b/daemons/console-run.c
@@ -59,6 +59,7 @@ main (int argc, char **argv)
   stderr = mach_open_devstream (consdev, "w");
   if (!stderr)
     _exit (127);
+  setlinebuf (stderr);
 
   if (argc < 2)
     error (1, 0, "Usage: %s PROGRAM [ARG...]", program_invocation_short_name);
diff --git a/exec/main.c b/exec/main.c
index 9021e45c..57bfd137 100644
--- a/exec/main.c
+++ b/exec/main.c
@@ -187,6 +187,7 @@ open_console (mach_port_t device_master)
 
   stdin = mach_open_devstream (cons, "r");
   stdout = stderr = mach_open_devstream (cons, "w");
+  setlinebuf (stderr);
 
   got_console = 1;
   mach_port_deallocate (mach_task_self (), cons);
diff --git a/libdiskfs/boot-start.c b/libdiskfs/boot-start.c
index 8c159f33..19967ef3 100644
--- a/libdiskfs/boot-start.c
+++ b/libdiskfs/boot-start.c
@@ -185,7 +185,8 @@ diskfs_start_bootstrap (void)
 			&retry, retry_name, &execnode);
       if (err)
 	{
-	  error (0, err, "cannot set translator on %s", _SERVERS_EXEC);
+	  mach_print ("cannot set translator on " _SERVERS_EXEC "\n");
+	  error (0, err, "cannot set translator on " _SERVERS_EXEC);
 	  mach_port_deallocate (mach_task_self (), diskfs_exec_ctl);
 	}
       else
@@ -319,7 +320,10 @@ diskfs_start_bootstrap (void)
 		      With none supplied, it will use the defaults.  */
 		   NULL, 0, 0, 0, 0, 0);
   if (err)
-    error (1, err, "Executing '%s'", exec_argv);
+    {
+      mach_print ("Failed to execute startup\n");
+      error (1, err, "Executing '%s'", exec_argv);
+    }
   free (exec_argv);
   free (exec_env);
   mach_port_deallocate (mach_task_self (), root_pt);
diff --git a/libdiskfs/console.c b/libdiskfs/console.c
index fa4fc2c5..9bf7cd2d 100644
--- a/libdiskfs/console.c
+++ b/libdiskfs/console.c
@@ -24,6 +24,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
+#include <error.h>
 #include <signal.h>
 #include <assert-backtrace.h>
 
@@ -46,12 +47,19 @@ diskfs_console_stdio (void)
       else
 	{
 	  int fd = open ("/dev/console", O_RDWR);
-
-	  dup2 (fd, 0);
-	  dup2 (fd, 1);
-	  dup2 (fd, 2);
-	  if (fd > 2)
-	    close (fd);
+	  if (fd < 0)
+	    {
+	      mach_print ("Failed to open /dev/console\n");
+	      error (0, errno, "Failed to open /dev/console");
+	    }
+	  else
+	    {
+	      dup2 (fd, 0);
+	      dup2 (fd, 1);
+	      dup2 (fd, 2);
+	      if (fd > 2)
+		close (fd);
+	    }
 	}
     }
   else
@@ -68,6 +76,7 @@ diskfs_console_stdio (void)
       stdin = mach_open_devstream (cons, "r");
       stdout = stderr = mach_open_devstream (cons, "w");
       mach_port_deallocate (mach_task_self (), cons);
+      setlinebuf (stderr);
     }
 
   /* And make sure we don't die just because we got some error there.  */
diff --git a/libmachdev/trivfs_server.c b/libmachdev/trivfs_server.c
index 4ce1ed36..e228bf40 100644
--- a/libmachdev/trivfs_server.c
+++ b/libmachdev/trivfs_server.c
@@ -399,6 +399,7 @@ resume_bootstrap_server(mach_port_t server_task, const char *server_name)
   stdin = mach_open_devstream (cons, "r");
   stdout = stderr = mach_open_devstream (cons, "w");
   mach_port_deallocate (mach_task_self (), cons);
+  setlinebuf (stderr);
 
   printf ("%s ", server_name);
   fflush (stdout);
diff --git a/mach-defpager/main.c b/mach-defpager/main.c
index 8fbe2adc..27865eea 100644
--- a/mach-defpager/main.c
+++ b/mach-defpager/main.c
@@ -69,7 +69,7 @@ printf_init (device_t master)
   stdin = mach_open_devstream (cons, "r");
   stdout = stderr = mach_open_devstream (cons, "w");
   mach_port_deallocate (mach_task_self (), cons);
-  setbuf (stdout, 0);
+  setlinebuf (stderr);
 }
 
 
diff --git a/proc/main.c b/proc/main.c
index 747646ef..56ba3d3d 100644
--- a/proc/main.c
+++ b/proc/main.c
@@ -132,7 +132,7 @@ open_console (mach_port_t device_master)
 
   stdin = mach_open_devstream (cons, "r");
   stdout = stderr = mach_open_devstream (cons, "w");
-  setbuf (stdout, NULL);
+  setlinebuf (stderr);
 
   got_console = 1;
   mach_port_deallocate (mach_task_self (), cons);
diff --git a/startup/startup.c b/startup/startup.c
index a1214800..34186986 100644
--- a/startup/startup.c
+++ b/startup/startup.c
@@ -770,7 +770,7 @@ main (int argc, char **argv, char **envp)
   stdin = mach_open_devstream (consdev, "r");
   if (stdout == NULL || stdin == NULL)
     crash_mach ();
-  setbuf (stdout, NULL);
+  setlinebuf (stderr);
 
   err = wire_task_self ();
   if (err)
@@ -899,8 +899,11 @@ launch_core_servers (void)
 
   err = install_as_translator ();
   if (err)
-    /* Good luck.  Who knows, maybe it's an old installation.  */
-    error (0, err, "Failed to bind to " _SERVERS_STARTUP);
+    {
+      /* Good luck.  Who knows, maybe it's an old installation.  */
+      mach_print ("Failed to bind to " _SERVERS_STARTUP "\n");
+      error (0, err, "Failed to bind to " _SERVERS_STARTUP);
+    }
 
   if (verbose)
     fprintf (stderr, "Installed on /servers/startup\n");
diff --git a/utils/shd.c b/utils/shd.c
index d2075075..9683f216 100644
--- a/utils/shd.c
+++ b/utils/shd.c
@@ -249,6 +249,7 @@ main (int argc, char *argv[])
 
     stdin = mach_open_devstream (outp, "r");
     stdout = stderr = mach_open_devstream (outp, "w+");
+    setlinebuf (stderr);
   }
 #endif
 
diff --git a/startup/startup.c b/startup/startup.c
index 34186986..606555d2 100644
--- a/startup/startup.c
+++ b/startup/startup.c
@@ -246,6 +246,7 @@ notify_shutdown (const char *msg)
       error_t err;
       fprintf (stderr, "%s: notifying %s of %s...",
                program_invocation_short_name, n->name, msg);
+      fflush (stderr);
 
       err = startup_dosync (n->notify_port, 60000); /* 1 minute to reply */
       if (err == MACH_SEND_INVALID_DEST)
diff --git a/utils/settrans.c b/utils/settrans.c
index 9b3af312..1622f708 100644
--- a/utils/settrans.c
+++ b/utils/settrans.c
@@ -336,6 +336,7 @@ main(int argc, char *argv[])
 	    {
 	      fprintf (stderr, "Translator pid: %d\nPausing...",
 	               task2pid (task));
+	      fflush (stderr);
 	      getchar ();
 	    }
 
