diff --git a/date.c b/date.c
index ae9282f..467e1e4 100644
--- a/date.c
+++ b/date.c
@@ -48,18 +48,39 @@
 #endif
 }
 
+static void settime_fmt(char *s, const char *fmt) {
+     struct tm tm;
+     struct timeval tv;
+
+     memset(&tm, 0, sizeof(tm));
+     if (strptime(s, fmt, &tm) == NULL) {
+       fprintf(stderr, "Unable to parse date '%s' as format '%s'\n", s, fmt);
+       exit(1);
+     }
+
+     tv.tv_sec = mktime(&tm);
+     tv.tv_usec = 0;
+     if (settimeofday(&tv, NULL)) {
+       char buf[80];
+       snprintf(buf, sizeof(buf), "settimeofday(%ld)", tv.tv_sec);
+       perror(buf);
+       exit(1);
+     }
+}
+
 int date_main(int argc, char *argv[])
 {
-	int c;
+    int c;
     int res;
-	struct tm tm;
-	time_t t;
-	struct timeval tv;
+    struct tm tm;
+    time_t t;
+    struct timeval tv;
     struct timespec ts;
-	char strbuf[260];
+    char strbuf[260];
     int fd;
 
     int useutc = 0;
+    void *settime_arg = NULL;
 
     tzset();
 
@@ -72,7 +93,7 @@
             useutc = 1;
             break;
         case 's':
-            settime(optarg);
+            settime_arg = optarg;
             break;
         case '?':
             fprintf(stderr, "%s: invalid option -%c\n",
@@ -86,7 +107,13 @@
     }
 
     int hasfmt = argc == optind + 1 && argv[optind][0] == '+';
-    if(optind == argc || hasfmt) {
+    if (settime_arg) {
+        if (hasfmt) {
+          settime_fmt(settime_arg, argv[optind] + 1);
+        } else{
+          settime(settime_arg);
+        }
+    } else if(optind == argc || hasfmt) {
         char buf[2000];
         time(&t);
         if (useutc) {
diff --git a/ls.c b/ls.c
index 4990ed9..c9ff40f 100644
--- a/ls.c
+++ b/ls.c
@@ -257,22 +257,13 @@
     return 0;
 }
 
-static int listfile_long(const char *path, int flags)
+static int listfile_long(const char *path, const char *filename, int flags)
 {
     struct stat s;
     char date[32];
     char mode[16];
     char user[16];
     char group[16];
-    const char *name;
-
-    /* name is anything after the final '/', or the whole path if none*/
-    name = strrchr(path, '/');
-    if(name == 0) {
-        name = path;
-    } else {
-        name++;
-    }
 
     if(lstat(path, &s) < 0) {
         return -1;
@@ -291,14 +282,14 @@
     switch(s.st_mode & S_IFMT) {
     case S_IFBLK:
     case S_IFCHR:
-        printf("%s %-8s %-8s %3d, %3d %s %s\n",
+        printf("%s %-8s %-8s %5d, %3d %s %s\n",
                mode, user, group, 
                (int) MAJOR(s.st_rdev), (int) MINOR(s.st_rdev),
-               date, name);
+               date, filename);
         break;
     case S_IFREG:
-        printf("%s %-8s %-8s %12lld %s %s\n",
-               mode, user, group, s.st_size, date, name);
+        printf("%s %-8s %-8s %10lld %s %s\n",
+               mode, user, group, s.st_size, date, filename);
         break;
     case S_IFLNK: {
         char linkto[256];
@@ -316,13 +307,13 @@
             linkto[len] = 0;
         }
         
-        printf("%s %-8s %-8s          %s %s -> %s\n",
-               mode, user, group, date, name, linkto);
+        printf("%s %-8s %-8s            %s %s -> %s\n",
+               mode, user, group, date, filename, linkto);
         break;
     }
     default:
-        printf("%s %-8s %-8s          %s %s\n",
-               mode, user, group, date, name);
+        printf("%s %-8s %-8s            %s %s\n",
+               mode, user, group, date, filename);
 
     }
     return 0;
@@ -346,7 +337,7 @@
     }
 
     if ((flags & LIST_LONG) != 0) {
-        return listfile_long(pathname, flags);
+        return listfile_long(pathname, filename, flags);
     } else /*((flags & LIST_SIZE) != 0)*/ {
         return listfile_size(pathname, filename, flags);
     }
