diff --git a/doc/ncdu.pod b/doc/ncdu.pod
index 6486416ca5c97f55f569eeac7199369cbadb5873..3ecd28e0a84e2c4c31557651cee5f72bd86bd513 100644
--- a/doc/ncdu.pod
+++ b/doc/ncdu.pod
@@ -54,6 +54,19 @@ directory with many files. 10.000 files will get you an export in the order of
 gzip. This scales linearly, so be prepared to handle a few tens of megabytes
 when dealing with millions of files.
 
+=item -e
+
+Enable extended information mode. This will, in addition to the usual file
+information, also read the ownership, permissions and last modification time
+for each file. This will result in higher memory usage (by roughly ~30%) and in
+a larger output file when exporting.
+
+When using the file export/import function, this flag will need to be added
+both when exporting (to make sure the information is added to the export), and
+when importing (to read this extra information in memory). This flag has no
+effect when importing a file that has been exported without the extended
+information.
+
 =back
 
 =head2 Interface options
diff --git a/src/dir_mem.c b/src/dir_mem.c
index 03ef933ffee9875b43e4043702695b28d413c5a4..457678a6dfd2c717a3a41c21f7ceb576f46def2a 100644
--- a/src/dir_mem.c
+++ b/src/dir_mem.c
@@ -123,11 +123,11 @@ static int item(struct dir *dir, const char *name, struct dir_ext *ext) {
   if(!root && orig)
     name = orig->name;
 
-  /* TODO: Don't allocate ext if -e flag is not given */
-  item = malloc(dir->flags & FF_EXT ? dir_ext_memsize(name) : dir_memsize(name));
+  int extended = extended_info && (dir->flags & FF_EXT);
+  item = malloc(extended ? dir_ext_memsize(name) : dir_memsize(name));
   memcpy(item, dir, offsetof(struct dir, name));
   strcpy(item->name, name);
-  if(dir->flags & FF_EXT)
+  if(extended)
     memcpy(dir_ext_ptr(item), ext, sizeof(struct dir_ext));
 
   item_add(item);
diff --git a/src/global.h b/src/global.h
index 5ded8ccf65809bd0b79886f8159d5b4d4fbe9282..b998ef4d6592386fb8aa8fe821c14326f958bc4b 100644
--- a/src/global.h
+++ b/src/global.h
@@ -101,6 +101,8 @@ extern long update_delay;
 extern int cachedir_tags;
 /* flag if we should ask for confirmation when quitting */
 extern int confirm_quit;
+/* flag whether we want to enable use of struct dir_ext */
+extern int extended_info;
 
 /* handle input from keyboard and update display */
 int input_handle(int);
diff --git a/src/main.c b/src/main.c
index 15d8545b57a4e8e4fc27fe9b40cb960e40b6ce3a..9edf4862b558fa5cc6d164445a0cc9bc9ba34b31 100644
--- a/src/main.c
+++ b/src/main.c
@@ -40,6 +40,7 @@ int pstate;
 int read_only = 0;
 long update_delay = 100;
 int cachedir_tags = 0;
+int extended_info = 0;
 
 static int min_rows = 17, min_cols = 60;
 static int ncurses_init = 0;
@@ -120,6 +121,7 @@ static void argv_parse(int argc, char **argv) {
     { 'q', 0, "-q" },
     { 'v', 0, "-v" },
     { 'x', 0, "-x" },
+    { 'e', 0, "-e" },
     { 'r', 0, "-r" },
     { 'o', 1, "-o" },
     { 'f', 1, "-f" },
@@ -148,6 +150,7 @@ static void argv_parse(int argc, char **argv) {
       printf("  -q                         Quiet mode, refresh interval 2 seconds\n");
       printf("  -v                         Print version\n");
       printf("  -x                         Same filesystem\n");
+      printf("  -e                         Enable extended information\n");
       printf("  -r                         Read only\n");
       printf("  -o FILE                    Export scanned directory to FILE\n");
       printf("  -f FILE                    Import scanned directory from FILE\n");
@@ -157,12 +160,14 @@ static void argv_parse(int argc, char **argv) {
       printf("  -X, --exclude-from FILE    Exclude files that match any pattern in FILE\n");
       printf("  --exclude-caches           Exclude directories containing CACHEDIR.TAG\n");
       printf("  --confirm-quit             Confirm quitting ncdu\n");
+      printf("  --color SCHEME             Set color scheme\n");
       exit(0);
     case 'q': update_delay = 2000; break;
     case 'v':
       printf("ncdu %s\n", PACKAGE_VERSION);
       exit(0);
     case 'x': dir_scan_smfs = 1; break;
+    case 'e': extended_info = 1; break;
     case 'r': read_only++; break;
     case 's': si = 1; break;
     case 'o': export = val; break;