diff --git a/System/Console/CmdLib/Flag.hs b/System/Console/CmdLib/Flag.hs
--- a/System/Console/CmdLib/Flag.hs
+++ b/System/Console/CmdLib/Flag.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, DeriveDataTypeable #-}
+{-# LANGUAGE TypeFamilies, DeriveDataTypeable, ScopedTypeVariables #-}
 module System.Console.CmdLib.Flag where
 
 import System.Console.CmdLib.Attribute
@@ -71,7 +71,7 @@
  ss' = map (\s -> '-' : [s]) ss
  ls' = map ("--" ++) ls
 
-usageDescr :: FlagType flag => (flag -> [Attribute]) -> [String]
+usageDescr :: forall flag. FlagType flag => (flag -> [Attribute]) -> [String]
 usageDescr attr = optGroups ++ reqs' ++ nonopts where
   partitionFlag (os, ps, es) f | isExtra attr f      = (os, ps, f : es)
   partitionFlag (os, ps, es) f | isPositional attr f = (os, f : ps, es)
@@ -116,11 +116,14 @@
     upperExtras = map ((\s -> "[" ++ s ++ "]" ) . nonoptStr)
       extras
 
-  nonoptStr :: FlagType flag => flag -> String
-  nonoptStr f = requiredFlagStr f ++ extractArgDesc ad where
-     (Option _ _ ad _) = head . flagToOptDescr MergeSuffix flag_attrs $ f
-     extractArgDesc (ReqArg _  ad) = '=' : ad
+  nonoptStr :: flag -> String
+  nonoptStr f = extractArgDesc ad where
+     (Option _ _ ad _) = head . flagToOptDescr MergeSuffix attr $ f
+     extractArgDesc (ReqArg _  ad) =
+         getattr (requiredFlagStr f) fromArgHelp (attr f)
      extractArgDesc _ = ""
+     fromArgHelp (ArgHelp x) = Just x
+     fromArgHelp _           = Nothing
 
   -- | Turn ["a","b","c"] into "[a [b [c]]]"
   nestedOptional [] = ""
diff --git a/cmdlib.cabal b/cmdlib.cabal
--- a/cmdlib.cabal
+++ b/cmdlib.cabal
@@ -1,5 +1,5 @@
 name:        cmdlib
-version:     0.3.4
+version:     0.3.5
 synopsis:    a library for command line parsing & online help
 
 description: A commandline parsing library, based on getopt. Comes with a
