Stuff
diff --git a/util-linux/more.c b/util-linux/more.c
index ea5e225..4693161 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -25,7 +25,9 @@
 
 
 /* Turning this off makes things a bit smaller (and less pretty) */
-#define BB_MORE_TERM
+#define BB_FEATURE_USE_TERMIOS
+/* Turning this off makes things a bit smaller (and less pretty) */
+#define BB_FEATURE_AUTOWIDTH
 
 
 
@@ -33,18 +35,16 @@
 #include <stdio.h>
 #include <fcntl.h>
 #include <signal.h>
-
+#include <sys/ioctl.h>
 
 static const char more_usage[] = "[file ...]";
 
-
 /* ED: sparc termios is broken: revert back to old termio handling. */
-#ifdef BB_MORE_TERM
+#ifdef BB_FEATURE_USE_TERMIOS
 
 #if #cpu(sparc)
 #      define USE_OLD_TERMIO
 #      include <termio.h>
-#      include <sys/ioctl.h>
 #      define termios termio
 #      define stty(fd,argp) ioctl(fd,TCSETAF,argp)
 #else
@@ -57,16 +57,35 @@
 
     void gotsig(int sig) { 
 	    stty(fileno(cin), &initial_settings);
+	    fprintf(stdout, "\n");
 	    exit( TRUE);
     }
 #endif
 
+
+
+#define TERMINAL_WIDTH	79	/* not 80 in case terminal has linefold bug */
+#define TERMINAL_HEIGHT	24
+
+
+#if defined BB_FEATURE_AUTOWIDTH && ! defined USE_OLD_TERMIO
+static int terminal_width = 0, terminal_height = 0;
+#else
+#define terminal_width	TERMINAL_WIDTH
+#define terminal_height	TERMINAL_HEIGHT
+#endif
+
+
+
 extern int more_main(int argc, char **argv)
 {
     int c, lines=0, input=0;
     int next_page=0;
     struct stat st;	
     FILE *file;
+#ifdef BB_FEATURE_AUTOWIDTH
+    struct winsize win;
+#endif
 
     argc--;
     argv++;
@@ -87,7 +106,7 @@
 	}
 	fstat(fileno(file), &st);
 
-#ifdef BB_MORE_TERM
+#ifdef BB_FEATURE_USE_TERMIOS
 	cin = fopen("/dev/tty", "r");
 	if (!cin)
 	    cin = fopen("/dev/console", "r");
@@ -100,12 +119,19 @@
 	new_settings.c_lflag &= ~ICANON;
 	new_settings.c_lflag &= ~ECHO;
 	stty(fileno(cin), &new_settings);
-	
+
+#ifdef BB_FEATURE_AUTOWIDTH	
+	ioctl(STDOUT_FILENO, 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
 	while ((c = getc(file)) != EOF) {
 	    if ( next_page ) {
@@ -119,7 +145,7 @@
 			st.st_size);
 		}
 		len += fprintf(stdout, "%s",
-#ifdef BB_MORE_TERM
+#ifdef BB_FEATURE_USE_TERMIOS
 			""
 #else
 			"\n"
@@ -129,24 +155,31 @@
 		fflush(stdout);
 		input = getc( cin);
 
-#ifdef BB_MORE_TERM
+#ifdef BB_FEATURE_USE_TERMIOS
 		/* Erase the "More" message */
-		while(len-- > 0)
+		while(--len >= 0)
 		    putc('\b', stdout);
-		while(len++ < 79)
+		while(++len <= terminal_width)
 		    putc(' ', stdout);
-		while(len-- > 0)
+		while(--len >= 0)
 		    putc('\b', stdout);
 		fflush(stdout);
 #endif
 
 	    }
-	    if (input=='q')
-		goto end;
-	    if (input=='\n' &&  c == '\n' )
-		next_page = 1;
-	    if ( c == ' ' && ++lines == 24 )
-		next_page = 1;
+	    if (c == '\n' ) {
+		switch(input) {
+		    case 'q':
+			goto end;
+		    case '\n':
+			/* increment by just one line if we are at 
+			 * the end of this line*/
+			next_page = 1;
+			break;
+		}
+		if ( ++lines == terminal_height )
+		    next_page = 1;
+	    }
 	    putc(c, stdout);
 	}
 	fclose(file);
@@ -155,7 +188,7 @@
 	argv++;
     } while (--argc > 0);
 end:
-#ifdef BB_MORE_TERM
+#ifdef BB_FEATURE_USE_TERMIOS
     gotsig(0);
 #endif	
     exit(TRUE);