diff --git a/util-linux/more.c b/util-linux/more.c
index 9f07633..6cdec72 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -9,6 +9,8 @@
  * based on the original more implementation by Bruce, and code from the 
  * Debian boot-floppies team.
  *
+ * Termios corrects by Vladimir Oleynik <vodz@usa.net>
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -29,29 +31,26 @@
 #include <fcntl.h>
 #include <signal.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <sys/ioctl.h>
 #include "busybox.h"
 
-/* ED: sparc termios is broken: revert back to old termio handling. */
-#ifdef BB_FEATURE_USE_TERMIOS
-#	if #cpu(sparc)
-#		include <termio.h>
-#		define termios termio
-#		define setTermSettings(fd,argp) ioctl(fd,TCSETAF,argp)
-#		define getTermSettings(fd,argp) ioctl(fd,TCGETA,argp)
-#	else
-#		include <termios.h>
-#		define setTermSettings(fd,argp) tcsetattr(fd,TCSANOW,argp)
-#		define getTermSettings(fd,argp) tcgetattr(fd, argp);
-#	endif
-
 static FILE *cin;
 
+#ifdef BB_FEATURE_USE_TERMIOS
+#include <termios.h>
+#define setTermSettings(fd,argp) tcsetattr(fd,TCSANOW,argp)
+#define getTermSettings(fd,argp) tcgetattr(fd, argp);
+
 static struct termios initial_settings, new_settings;
 
-static void gotsig(int sig)
+static void set_tty_to_initial_mode(void)
 {
 	setTermSettings(fileno(cin), &initial_settings);
+}
+
+static void gotsig(int sig)
+{
 	putchar('\n');
 	exit(EXIT_FAILURE);
 }
@@ -65,7 +64,7 @@
 extern int more_main(int argc, char **argv)
 {
 	int c, lines, input = 0;
-	int please_display_more_prompt;
+	int please_display_more_prompt = -1;
 	struct stat st;
 	FILE *file;
 	int len, page_height;
@@ -77,46 +76,57 @@
 	argc--;
 	argv++;
 
+
+	/* not use inputing from terminal if usage: more > outfile */
+	if(isatty(fileno(stdout))) {
+		cin = fopen("/dev/tty", "r");
+		if (!cin)
+			cin = xfopen("/dev/console", "r");
+		please_display_more_prompt = 0;
+#ifdef BB_FEATURE_USE_TERMIOS
+		getTermSettings(fileno(cin), &initial_settings);
+		new_settings = initial_settings;
+		new_settings.c_lflag &= ~ICANON;
+		new_settings.c_lflag &= ~ECHO;
+#ifndef linux
+                /* Hmm, in linux c_cc[] not parsed if set ~ICANON */
+		new_settings.c_cc[VMIN] = 1;
+		new_settings.c_cc[VTIME] = 0;
+#endif
+		setTermSettings(fileno(cin), &new_settings);
+		atexit(set_tty_to_initial_mode);
+		(void) signal(SIGINT, gotsig);
+		(void) signal(SIGQUIT, gotsig);
+		(void) signal(SIGTERM, gotsig);
+#endif
+	}
+
 	do {
 		if (argc == 0) {
 			file = stdin;
 		} else
-			file = xfopen(*argv, "r");
-
+			file = wfopen(*argv, "r");
+		if(file==0)
+			goto loop;
+			
 		fstat(fileno(file), &st);
 
-#ifdef BB_FEATURE_USE_TERMIOS
-		cin = fopen("/dev/tty", "r");
-		if (!cin)
-			cin = xfopen("/dev/console", "r");
-		getTermSettings(fileno(cin), &initial_settings);
-		new_settings = initial_settings;
-		new_settings.c_cc[VMIN] = 1;
-		new_settings.c_cc[VTIME] = 0;
-		new_settings.c_lflag &= ~ICANON;
-		new_settings.c_lflag &= ~ECHO;
-		setTermSettings(fileno(cin), &new_settings);
+		if(please_display_more_prompt>0)
+			please_display_more_prompt = 0;
 
-#	ifdef BB_FEATURE_AUTOWIDTH
+#if defined BB_FEATURE_AUTOWIDTH && defined BB_FEATURE_USE_TERMIOS
 		ioctl(fileno(stdout), TIOCGWINSZ, &win);
 		if (win.ws_row > 4)
 			terminal_height = win.ws_row - 2;
 		if (win.ws_col > 0)
 			terminal_width = win.ws_col - 1;
-#	endif
-
-		(void) signal(SIGINT, gotsig);
-		(void) signal(SIGQUIT, gotsig);
-		(void) signal(SIGTERM, gotsig);
-
 #endif
 		len=0;
 		lines = 0;
 		page_height = terminal_height;
-		please_display_more_prompt = 0;
 		while ((c = getc(file)) != EOF) {
 
-			if (please_display_more_prompt) {
+			if (please_display_more_prompt>0) {
 				len = printf("--More-- ");
 				if (file != stdin) {
 #if _FILE_OFFSET_BITS == 64
@@ -129,13 +139,6 @@
 						   (double) st.st_size)), (long)st.st_size);
 #endif
 				}
-				len += printf("%s",
-#ifdef BB_FEATURE_USE_TERMIOS
-							   ""
-#else
-							   "\n"
-#endif
-					);
 
 				fflush(stdout);
 
@@ -143,20 +146,16 @@
 				 * We've just displayed the "--More--" prompt, so now we need
 				 * to get input from the user.
 				 */
-#ifdef BB_FEATURE_USE_TERMIOS
 				input = getc(cin);
-#else
-				input = getc(stdin);
+#ifndef BB_FEATURE_USE_TERMIOS
+				printf("\033[A"); /* up cursor */
 #endif
-
-#ifdef BB_FEATURE_USE_TERMIOS
 				/* Erase the "More" message */
 				putc('\r', stdout);
 				while (--len >= 0)
 					putc(' ', stdout);
 				putc('\r', stdout);
 				fflush(stdout);
-#endif
 				len=0;
 				lines = 0;
 				page_height = terminal_height;
@@ -180,6 +179,7 @@
 				/* increment by just one line if we are at
 				 * the end of this line */
 				if (input == '\n')
+					if(please_display_more_prompt==0)
 					please_display_more_prompt = 1;
 				/* Adjust the terminal height for any overlap, so that
 				 * no lines get lost off the top. */
@@ -195,6 +195,7 @@
 					}
 				}
 				if (++lines >= page_height) {
+					if(please_display_more_prompt==0)
 					please_display_more_prompt = 1;
 				}
 				len=0;
@@ -208,12 +209,9 @@
 		}
 		fclose(file);
 		fflush(stdout);
-
+loop:
 		argv++;
 	} while (--argc > 0);
   end:
-#ifdef BB_FEATURE_USE_TERMIOS
-	setTermSettings(fileno(cin), &initial_settings);
-#endif
 	return 0;
 }
