diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1299d58..3a3630d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.4.3
+
+* Display the default values for options with `allowedHelp` specified.
+
 ## 1.4.2
 
 * Narrow the SDK constraint to only allow SDK versions that support `FutureOr`.
diff --git a/lib/src/usage.dart b/lib/src/usage.dart
index 3ce6d6b..aa3ed07 100644
--- a/lib/src/usage.dart
+++ b/lib/src/usage.dart
@@ -82,7 +82,7 @@
         allowedNames.sort();
         newline();
         for (var name in allowedNames) {
-          write(1, getAllowedTitle(name));
+          write(1, getAllowedTitle(option, name));
           write(2, option.allowedHelp[name]);
         }
         newline();
@@ -132,13 +132,16 @@
     return result;
   }
 
-  String getAllowedTitle(String allowed) {
-    return '      [$allowed]';
+  String getAllowedTitle(Option option, String allowed) {
+    var isDefault = option.defaultsTo is List
+        ? option.defaultsTo.contains(allowed)
+        : option.defaultsTo == allowed;
+    return '      [$allowed]' + (isDefault ? ' (default)' : '');
   }
 
   void calculateColumnWidths() {
-    int abbr = 0;
-    int title = 0;
+    var abbr = 0;
+    var title = 0;
     for (var option in optionsAndSeparators) {
       if (option is! Option) continue;
       if (option.hide) continue;
@@ -152,7 +155,7 @@
       // Make room for the allowed help.
       if (option.allowedHelp != null) {
         for (var allowed in option.allowedHelp.keys) {
-          title = max(title, getAllowedTitle(allowed).length);
+          title = max(title, getAllowedTitle(option, allowed).length);
         }
       }
     }
diff --git a/pubspec.yaml b/pubspec.yaml
index 91e184e..23dd525 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: args
-version: 1.4.2
+version: 1.4.3
 author: "Dart Team <misc@dartlang.org>"
 homepage: https://github.com/dart-lang/args
 description: >
diff --git a/test/usage_test.dart b/test/usage_test.dart
index ef0b01a..48a33dd 100644
--- a/test/usage_test.dart
+++ b/test/usage_test.dart
@@ -201,6 +201,30 @@
 
     test('the allowed help is shown', () {
       var parser = new ArgParser();
+      parser.addOption('suit', help: 'Like in cards', allowed: [
+        'spades',
+        'clubs',
+        'diamonds',
+        'hearts'
+      ], allowedHelp: {
+        'spades': 'Swords of a soldier',
+        'clubs': 'Weapons of war',
+        'diamonds': 'Money for this art',
+        'hearts': 'The shape of my heart'
+      });
+
+      validateUsage(parser, '''
+          --suit              Like in cards
+
+                [clubs]       Weapons of war
+                [diamonds]    Money for this art
+                [hearts]      The shape of my heart
+                [spades]      Swords of a soldier
+          ''');
+    });
+
+    test('the default is highlighted in the allowed help', () {
+      var parser = new ArgParser();
       parser.addOption('suit',
           help: 'Like in cards',
           defaultsTo: 'clubs',
@@ -218,12 +242,39 @@
           });
 
       validateUsage(parser, '''
-          --suit              Like in cards
+          --suit                     Like in cards
 
-                [clubs]       Weapons of war
-                [diamonds]    Money for this art
-                [hearts]      The shape of my heart
-                [spades]      Swords of a soldier
+                [clubs] (default)    Weapons of war
+                [diamonds]           Money for this art
+                [hearts]             The shape of my heart
+                [spades]             Swords of a soldier
+          ''');
+    });
+
+    test('multiple defaults are highlighted in the allowed help', () {
+      var parser = new ArgParser();
+      parser.addMultiOption('suit', help: 'Like in cards', defaultsTo: [
+        'clubs',
+        'hearts'
+      ], allowed: [
+        'spades',
+        'clubs',
+        'diamonds',
+        'hearts'
+      ], allowedHelp: {
+        'spades': 'Swords of a soldier',
+        'clubs': 'Weapons of war',
+        'diamonds': 'Money for this art',
+        'hearts': 'The shape of my heart'
+      });
+
+      validateUsage(parser, '''
+          --suit                      Like in cards
+
+                [clubs] (default)     Weapons of war
+                [diamonds]            Money for this art
+                [hearts] (default)    The shape of my heart
+                [spades]              Swords of a soldier
           ''');
     });
 
