diff --git a/doc/ncdu.pod b/doc/ncdu.pod
index 2fcc981180527d2f8f215a62f12e8d027bdb2a8b..c300f30267c12fcb12a2ffc03838029ca782f765 100644
--- a/doc/ncdu.pod
+++ b/doc/ncdu.pod
@@ -136,9 +136,12 @@ accidentally press 'q' during or after a very long scan.
 
 =item --color I<SCHEME>
 
-Select a color scheme. Currently only two schemes are recognized: I<off> to
-disable colors (the default) and I<dark> for a color scheme intended for dark
-backgrounds.
+Select a color scheme. The following schemes are recognized: I<off> to disable
+colors, I<dark> for a color scheme intended for dark backgrounds and I<dark-bg>
+for a variation of the I<dark> color scheme that also works in terminals with a
+light background.
+
+The default is I<dark-bg> unless the C<NO_COLOR> environment variable is set.
 
 =back
 
diff --git a/src/main.c b/src/main.c
index c72a2081d436f34adb6f5f9310fca42ed9006eac..9f1d7980142e718657a8c63e9f317ff3506a5ba4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -122,6 +122,8 @@ static void argv_parse(int argc, char **argv) {
   char *import = NULL;
   char *dir = NULL;
 
+  uic_theme = getenv("NO_COLOR") ? 0 : 2;
+
   static yopt_opt_t opts[] = {
     { 'h', 0, "-h,-?,--help" },
     { 'q', 0, "-q" },
@@ -177,7 +179,7 @@ static void argv_parse(int argc, char **argv) {
       printf("  --exclude-firmlinks        Exclude firmlinks on macOS\n");
 #endif
       printf("  --confirm-quit             Confirm quitting ncdu\n");
-      printf("  --color SCHEME             Set color scheme (off/dark)\n");
+      printf("  --color SCHEME             Set color scheme (off/dark/dark-bg)\n");
       exit(0);
     case 'q': update_delay = 2000; break;
     case 'v':
@@ -229,6 +231,7 @@ static void argv_parse(int argc, char **argv) {
     case 'c':
       if(strcmp(val, "off") == 0)  { uic_theme = 0; }
       else if(strcmp(val, "dark") == 0) { uic_theme = 1; }
+      else if(strcmp(val, "dark-bg") == 0) { uic_theme = 2; }
       else {
         fprintf(stderr, "Unknown --color option: %s\n", val);
         exit(1);
diff --git a/src/util.c b/src/util.c
index 8ea0f49f9a46620d6c1afdfbd6a8c6ad6825353d..91c4360d030df1340c1e5006d1773bd7e3a71f2e 100644
--- a/src/util.c
+++ b/src/util.c
@@ -250,10 +250,16 @@ static const struct {
   short fg, bg;
   int attr;
 } color_defs[] = {
-#define C(name, off_fg, off_bg, off_a, dark_fg, dark_bg, dark_a) \
-  {off_fg,  off_bg,  off_a}, \
-  {dark_fg, dark_bg, dark_a},
+#define COLOR__ -1
+#define B A_BOLD
+#define R A_REVERSE
+#define C(name, off_fg, off_bg, off_a, dark_fg, dark_bg, dark_a, darkbg_fg, darkbg_bg, darkbg_a) \
+  {COLOR_##off_fg,    COLOR_##off_bg,    off_a}, \
+  {COLOR_##dark_fg,   COLOR_##dark_bg,   dark_a}, \
+  {COLOR_##darkbg_fg, COLOR_##darkbg_bg, darkbg_a},
   UI_COLORS
+#undef B
+#undef R
 #undef C
   {0,0,0}
 };
@@ -264,7 +270,7 @@ void uic_init() {
   start_color();
   use_default_colors();
   for(i=0; i<sizeof(colors)/sizeof(*colors)-1; i++) {
-    j = i*2 + uic_theme;
+    j = i*3 + uic_theme;
     init_pair(i+1, color_defs[j].fg, color_defs[j].bg);
     colors[i] = color_defs[j].attr | COLOR_PAIR(i+1);
   }
diff --git a/src/util.h b/src/util.h
index 98b2ee334895568ef09cd144302906410be89e53..0eceb36968d5fcc8795eed7e9fe865e95181538c 100644
--- a/src/util.h
+++ b/src/util.h
@@ -31,24 +31,23 @@
 
 
 /* UI colors: (foreground, background, attrs)
- *  NAME         OFF                        DARK
- */
+ *  NAME         OFF         DARK                DARK-BG   */
 #define UI_COLORS \
-  C(DEFAULT,     -1,-1,0               ,    -1,           -1,         0     )\
-  C(BOX_TITLE,   -1,-1,A_BOLD          ,    COLOR_BLUE,   -1,         A_BOLD)\
-  C(HD,          -1,-1,A_REVERSE       ,    COLOR_BLACK,  COLOR_CYAN, 0     )    /* header & footer */\
-  C(SEL,         -1,-1,A_REVERSE       ,    COLOR_WHITE,  COLOR_GREEN,A_BOLD)\
-  C(NUM,         -1,-1,0               ,    COLOR_YELLOW, -1,         A_BOLD)\
-  C(NUM_HD,      -1,-1,A_REVERSE       ,    COLOR_YELLOW, COLOR_CYAN, A_BOLD)\
-  C(NUM_SEL,     -1,-1,A_REVERSE       ,    COLOR_YELLOW, COLOR_GREEN,A_BOLD)\
-  C(KEY,         -1,-1,A_BOLD          ,    COLOR_YELLOW, -1,         A_BOLD)\
-  C(KEY_HD,      -1,-1,A_BOLD|A_REVERSE,    COLOR_YELLOW, COLOR_CYAN, A_BOLD)\
-  C(DIR,         -1,-1,0               ,    COLOR_BLUE,   -1,         A_BOLD)\
-  C(DIR_SEL,     -1,-1,A_REVERSE       ,    COLOR_BLUE,   COLOR_GREEN,A_BOLD)\
-  C(FLAG,        -1,-1,0               ,    COLOR_RED,    -1,         0     )\
-  C(FLAG_SEL,    -1,-1,A_REVERSE       ,    COLOR_RED,    COLOR_GREEN,0     )\
-  C(GRAPH,       -1,-1,0               ,    COLOR_MAGENTA,-1,         0     )\
-  C(GRAPH_SEL,   -1,-1,A_REVERSE       ,    COLOR_MAGENTA,COLOR_GREEN,0     )
+  C(DEFAULT,     _,_,0  ,    _,      _,    0,    WHITE,  BLACK,0)\
+  C(BOX_TITLE,   _,_,B  ,    BLUE,   _,    B,    BLUE,   BLACK,B)\
+  C(HD,          _,_,R  ,    BLACK,  CYAN, 0,    BLACK,  CYAN, 0)    /* header & footer */\
+  C(SEL,         _,_,R  ,    WHITE,  GREEN,B,    WHITE,  GREEN,B)\
+  C(NUM,         _,_,0  ,    YELLOW, _,    B,    YELLOW, BLACK,B)\
+  C(NUM_HD,      _,_,R  ,    YELLOW, CYAN, B,    YELLOW, CYAN, B)\
+  C(NUM_SEL,     _,_,R  ,    YELLOW, GREEN,B,    YELLOW, GREEN,B)\
+  C(KEY,         _,_,B  ,    YELLOW, _,    B,    YELLOW, BLACK,B)\
+  C(KEY_HD,      _,_,B|R,    YELLOW, CYAN, B,    YELLOW, CYAN, B)\
+  C(DIR,         _,_,0  ,    BLUE,   _,    B,    BLUE,   BLACK,B)\
+  C(DIR_SEL,     _,_,R  ,    BLUE,   GREEN,B,    BLUE,   GREEN,B)\
+  C(FLAG,        _,_,0  ,    RED,    _,    0,    RED,    BLACK,0)\
+  C(FLAG_SEL,    _,_,R  ,    RED,    GREEN,0,    RED,    GREEN,0)\
+  C(GRAPH,       _,_,0  ,    MAGENTA,_,    0,    MAGENTA,BLACK,0)\
+  C(GRAPH_SEL,   _,_,R  ,    MAGENTA,GREEN,0,    MAGENTA,GREEN,0)
 
 enum ui_coltype {
 #define C(name, ...) UIC_##name,