More stuff...
diff --git a/util-linux/more.c b/util-linux/more.c
index 6ac553e..f893874 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -19,27 +19,48 @@
  *
  */
 
+
+/* Turning this off makes things a bit smaller (and less pretty) */
+#define BB_MORE_TERM
+
+
+
 #include "internal.h"
 #include <stdio.h>
 #include <signal.h>
 
+
 const char more_usage[] = "[file ...]";
 
-//#define ERASE_STUFF
+
+#ifdef BB_MORE_TERM
+    #include <termios.h>
+    #include <signal.h>
+    #include <sys/ioctl.h>
+
+    FILE *cin;
+    struct termios initial_settings, new_settings;
+
+    void gotsig(int sig) { 
+	    tcsetattr(fileno(cin), TCSANOW, &initial_settings);
+	    exit( TRUE);
+    }
+#endif
 
 extern int more_main(int argc, char **argv)
 {
-    int c, lines=0;
+    int c, lines=0, input;
     int next_page=0, rows = 24;
-#ifdef ERASE_STUFF
-    int cols=79;
+#ifdef BB_MORE_TERM
+    int cols;
+    struct winsize win;
 #endif
     struct stat st;	
     FILE *file = stdin;
 
     if ( strcmp(*argv,"--help")==0 || strcmp(*argv,"-h")==0 ) {
 	fprintf(stderr, "Usage: %s %s", *argv, more_usage);
-	return(FALSE);
+	exit(FALSE);
     }
     argc--;
     argv++;
@@ -48,23 +69,47 @@
 	    file = fopen(*argv, "r");
 	if (file == NULL) {
 	    perror("Can't open file");
-	    return(FALSE);
+	    exit(FALSE);
 	}
 	fstat(fileno(file), &st);
 	fprintf(stderr, "hi\n");
 
+#ifdef BB_MORE_TERM
+	cin = fopen("/dev/tty", "r");
+	tcgetattr(fileno(cin),&initial_settings);
+	new_settings = initial_settings;
+	new_settings.c_lflag &= ~ICANON;
+	new_settings.c_lflag &= ~ECHO;
+	tcsetattr(fileno(cin), TCSANOW, &new_settings);
+	
+	(void) signal(SIGINT, gotsig);
+
+	ioctl(STDOUT_FILENO, TIOCGWINSZ, &win);
+	if (win.ws_row > 4)	rows = win.ws_row - 2;
+	if (win.ws_col > 0)	cols = win.ws_col - 1;
+
+
+#endif
 	while ((c = getc(file)) != EOF) {
 	    if ( next_page ) {
 		int len=0;
 		next_page = 0;
 		lines=0;
-		len = fprintf(stdout, "--More-- (%d%% of %ld bytes)", 
+		len = fprintf(stdout, "--More-- (%d%% of %ld bytes)%s", 
 			(int) (100*( (double) ftell(file) / (double) st.st_size )),
-			st.st_size);
+			st.st_size,
+#ifdef BB_MORE_TERM
+			""
+#else
+			"\n"
+#endif
+			);
+
 		fflush(stdout);
-		getc( stdin);
-#ifdef ERASE_STUFF
-		/* Try to erase the "More" message */
+		input = getc( stdin);
+
+#ifdef BB_MORE_TERM
+		/* Erase the "More" message */
 		while(len-- > 0)
 		    putc('\b', stdout);
 		while(len++ < cols)
@@ -73,7 +118,12 @@
 		    putc('\b', stdout);
 		fflush(stdout);
 #endif
+
 	    }
+	    if (input=='q')
+		goto end;
+	    if (input==' ' &&  c == '\n' )
+		next_page = 1;
 	    if ( c == '\n' && ++lines == (rows + 1) )
 		next_page = 1;
 	    putc(c, stdout);
@@ -84,7 +134,10 @@
 	argc--;
 	argv++;
     }
-    return(TRUE);
+end:
+#ifdef BB_MORE_TERM
+    gotsig(0);
+#endif	
+    exit(TRUE);
 }
 
-