--- lib/pathnames.h.orig	2001-09-26 12:59:46.000000000 +0200
+++ lib/pathnames.h	2004-02-20 14:33:35.000000000 +0100
@@ -130,7 +130,7 @@
 #define _PATH_MTAB		"/etc/mtab"
 #define _PATH_PROC_MOUNTS	"/proc/mounts"
 #define _PATH_UMOUNT		"/bin/umount"
-#define UMOUNT_ARGS		"umount", "-a", "-t", "nodevfs,noproc"
+#define UMOUNT_ARGS		"umount", "-a", "-t", "nodevfs,noproc,noramfs"
 #define SWAPOFF_ARGS            "swapoff", "-a"
 
 /* used in login-utils/setpwnam.h and login-utils/islocal.c */
--- login-utils/shutdown.c.orig	2001-09-26 12:59:46.000000000 +0200
+++ login-utils/shutdown.c	2004-02-20 15:53:27.000000000 +0100
@@ -746,6 +746,7 @@
 	n = 0;
 	while (n < 100 && (mnt = getmntent(mtab))) {
 		if (strcmp (mnt->mnt_type, "devfs") == 0) continue;
+    if (strcmp (mnt->mnt_type, "ramfs") == 0) continue;
 		mntlist[n++] = strdup(mnt->mnt_dir);
 	}
 	endmntent(mtab);
--- login-utils/simpleinit.c.orig	2004-01-11 00:24:42.000000000 +0100
+++ login-utils/simpleinit.c	2004-02-20 14:28:31.000000000 +0100
@@ -321,6 +321,8 @@
 void sigquit_handler (int sig);
 void userspace_sigquit_handler (int sig);
 void sigterm_handler (int sig);
+void open_initctl_fifo (void);
+void sigusr_handler (int sig);
 #ifdef SET_TZ
 void set_tz (void);
 #endif
@@ -396,6 +398,8 @@
 	sigaction (SIGCHLD, &sa, NULL);
 	sa.sa_handler = userspace_sigquit_handler;
 	sigaction (SIGQUIT, &sa, NULL);
+  sa.sa_handler = sigusr_handler;
+  sigaction (SIGUSR1, &sa, NULL);
 	if (userspace) fix_userspace_paths(); else
 	{
   	  sa.sa_handler = sigtstp_handler;
@@ -440,12 +444,7 @@
 			}	
 	}
 
-	if ( ( initctl_fd = open (initctl_name, O_RDWR|O_NONBLOCK, 0) ) < 0 ) {
-		mkfifo (initctl_name, S_IRUSR | S_IWUSR);
-		if ( ( initctl_fd = open (initctl_name, O_RDWR|O_NONBLOCK, 0) ) < 0 )
-			err ( _("error opening fifo\n") );
-	}
-	fcntl(initctl_fd,F_SETFD,FD_CLOEXEC); /*make sure no one inherits the fd*/
+  open_initctl_fifo();
 	
 	if (userspace){
 	  pid_t mypid=getpid();
@@ -885,6 +884,28 @@
     if (!stopped) hup_handler (sig);
 }   /*  End Function sigtstp_handler  */
 
+void open_initctl_fifo()
+{
+	if ( ( initctl_fd = open (initctl_name, O_RDWR|O_NONBLOCK, 0) ) < 0 ) {
+		mkfifo (initctl_name, S_IRUSR | S_IWUSR);
+		if ( ( initctl_fd = open (initctl_name, O_RDWR|O_NONBLOCK, 0) ) < 0 )
+			err ( _("error opening fifo\n") );
+	}
+	fcntl(initctl_fd,F_SETFD,FD_CLOEXEC); /*make sure no one inherits the fd*/
+}
+
+void sigusr_handler (int sig)
+{
+    close (0);
+    close (1);
+    close (2);
+	  open ("/dev/console", O_RDONLY, 0);
+	  open ("/dev/console", O_RDWR, 0);
+	  dup2 (1, 2);
+    open_initctl_fifo();
+    sig=sig;
+}
+
 void sigterm_handler (int sig)
 {
     int i;
@@ -1686,6 +1707,9 @@
 	    for (i = 1; i < NSIG; i++) signal (i, SIG_DFL);
 	    sigprocmask(SIG_UNBLOCK,&all_signals,NULL);
 	    if (!userspace) {
+        close (0);
+        close (1);
+        close (2);
 	    	open ("/dev/console", O_RDONLY, 0);
 	    	open ("/dev/console", O_RDWR, 0);
 	    	dup2 (1, 2);
