diff -Naurp sysvinit-2.86.ds1/man/last.1 sysvinit-2.86.ds1-ms/man/last.1
--- sysvinit-2.86.ds1/man/last.1	2004-07-30 13:39:18.000000000 +0200
+++ sysvinit-2.86.ds1-ms/man/last.1	2006-05-15 21:05:51.000000000 +0200
@@ -14,6 +14,7 @@ last, lastb \- show listing of last logg
 .RB "[ \-\fBn\fP \fInum\fP ]"
 .RB [ \-adiox ]
 .RB "[ \-\fBf\fP \fIfile\fP ]"
+.RB "[ \-\fBw\fP[\fIwidth\fP] ]"
 .RB "[ \-\fBt\fP \fIYYYYMMDDHHMMSS\fP ]"
 .RI [ name... ]
 .RI [ tty... ]
@@ -23,6 +24,7 @@ last, lastb \- show listing of last logg
 .RB [ \-\fInum\fP ]
 .RB "[ \-\fBn\fP \fInum\fP ]"
 .RB "[ \-\fBf\fP \fIfile\fP ]"
+.RB "[ \-\fBw\fP[\fIwidth\fP] ]"
 .RB [ \-adiox ]
 .RI [ name... ]
 .RI [ tty... ]
@@ -72,6 +74,8 @@ back into a hostname.
 .IP \fB\-i\fP
 This option is like \fB-d\fP in that it displays the IP number of the remote
 host, but it displays the IP number in numbers-and-dots notation.
+.IP \fB\-w\fP\fI[num]\fP
v
v
+Expands the width of the username column from eight to \fInum\fP characters. If called without the optional argument the width will be set to 32 characters. Useful if you use very long usernames. 
 .IP \fB\-o\fP
 Read an old-type wtmp file (written by linux-libc5 applications).
 .IP \fB\-x\fP
diff -Naurp sysvinit-2.86.ds1/src/last.c sysvinit-2.86.ds1-ms/src/last.c
--- sysvinit-2.86.ds1/src/last.c	2004-07-30 14:16:26.000000000 +0200
+++ sysvinit-2.86.ds1-ms/src/last.c	2006-05-15 21:04:05.000000000 +0200
@@ -75,6 +75,7 @@ char **show = NULL;	/* What do they want
 char *ufile;		/* Filename of this file */
 time_t lastdate;	/* Last date we've seen */
 char *progname;		/* Name of this program */
+int usernamewidth = 8;	/* Width of the username column in the output */
 #if CHOP_DOMAIN
 char hostname[256];	/* For gethostbyname() */
 char *domainname;	/* Our domainname. */
@@ -451,20 +452,20 @@ int list(struct utmp *p, time_t t, int w
 #endif
 		if (!altlist) {
 			snprintf(final, sizeof(final),
-				"%-8.8s %-12.12s %-16.16s "
+				"%-*.*s %-12.12s %-16.16s "
 				"%-16.16s %-7.7s %-12.12s\n",
-				p->ut_name, utline,
+				usernamewidth,usernamewidth,p->ut_name, utline,
 				domain, logintime, logouttime, length);
 		} else {
 			snprintf(final, sizeof(final), 
-				"%-8.8s %-12.12s %-16.16s %-7.7s %-12.12s %s\n",
-				p->ut_name, utline,
+				"%-*.*s %-12.12s %-16.16s %-7.7s %-12.12s %s\n",
+				usernamewidth,usernamewidth,p->ut_name, utline,
 				logintime, logouttime, length, domain);
 		}
 	} else
 		snprintf(final, sizeof(final),
-			"%-8.8s %-12.12s %-16.16s %-7.7s %-12.12s\n",
-			p->ut_name, utline,
+			"%-*.*s %-12.12s %-16.16s %-7.7s %-12.12s\n",
+			usernamewidth,usernamewidth,p->ut_name, utline,
 			logintime, logouttime, length);
 
 	/*
@@ -492,7 +493,7 @@ void usage(char *s)
 {
 	fprintf(stderr, "Usage: %s [-num | -n num] [-f file] "
 			"[-t YYYYMMDDHHMMSS] "
-			"[-R] [-x] [-o] [username..] [tty..]\n", s);
+			"[-R] [-x] [-w[num]] [-o] [username..] [tty..]\n", s);
 	exit(1);
 }
 
@@ -561,7 +562,7 @@ int main(int argc, char **argv)
   progname = mybasename(argv[0]);
 
   /* Process the arguments. */
-  while((c = getopt(argc, argv, "f:n:Rxadiot:0123456789")) != EOF)
+  while((c = getopt(argc, argv, "f:n:Rxadiot:0123456789w::")) != EOF)
     switch(c) {
 	case 'R':
 		showhost = 0;
@@ -572,6 +573,17 @@ int main(int argc, char **argv)
 	case 'n':
 		maxrecs = atoi(optarg);
 		break;
+	case 'w':
+		if(optarg) {
+			usernamewidth = atoi(optarg);
+			if(usernamewidth > UT_NAMESIZE) {
+			    usernamewidth=UT_NAMESIZE;
+			}
+		} else {
+		    usernamewidth=UT_NAMESIZE;
+		}
+		break;
+
 	case 'o':
 		oldfmt = 1;
 		break;
