diff --git a/flag.go b/flag.go
index ac14b81..ecd8abf 100644
--- a/flag.go
+++ b/flag.go
@@ -120,9 +120,9 @@
 	PanicOnError
 )
 
-// normalizedName is a flag name that has been normalized according to rules
+// NormalizedName is a flag name that has been normalized according to rules
 // for the FlagSet (e.g. making '-' and '_' equivalent).
-type normalizedName string
+type NormalizedName string
 
 // A FlagSet represents a set of defined flags.
 type FlagSet struct {
@@ -133,8 +133,8 @@
 
 	name           string
 	parsed         bool
-	actual         map[normalizedName]*Flag
-	formal         map[normalizedName]*Flag
+	actual         map[NormalizedName]*Flag
+	formal         map[NormalizedName]*Flag
 	shorthands     map[byte]*Flag
 	args           []string // arguments after flags
 	exitOnError    bool     // does the program exit if there's an error?
@@ -165,7 +165,7 @@
 }
 
 // sortFlags returns the flags as a slice in lexicographical sorted order.
-func sortFlags(flags map[normalizedName]*Flag) []*Flag {
+func sortFlags(flags map[NormalizedName]*Flag) []*Flag {
 	list := make(sort.StringSlice, len(flags))
 	i := 0
 	for k := range flags {
@@ -175,18 +175,18 @@
 	list.Sort()
 	result := make([]*Flag, len(list))
 	for i, name := range list {
-		result[i] = flags[normalizedName(name)]
+		result[i] = flags[NormalizedName(name)]
 	}
 	return result
 }
 
-func (f *FlagSet) normalizeFlagName(name string) normalizedName {
+func (f *FlagSet) normalizeFlagName(name string) NormalizedName {
 	result := name
 	for _, sep := range f.wordSeparators {
 		result = strings.Replace(result, sep, "-", -1)
 	}
 	// Type convert to indicate normalization has been done.
-	return normalizedName(result)
+	return NormalizedName(result)
 }
 
 func (f *FlagSet) out() io.Writer {
@@ -240,7 +240,7 @@
 }
 
 // lookup returns the Flag structure of the named flag, returning nil if none exists.
-func (f *FlagSet) lookup(name normalizedName) *Flag {
+func (f *FlagSet) lookup(name NormalizedName) *Flag {
 	return f.formal[name]
 }
 
@@ -272,7 +272,7 @@
 		return err
 	}
 	if f.actual == nil {
-		f.actual = make(map[normalizedName]*Flag)
+		f.actual = make(map[NormalizedName]*Flag)
 	}
 	f.actual[normalName] = flag
 	flag.Changed = true
@@ -417,7 +417,7 @@
 		panic(msg) // Happens only if flags are declared with identical names
 	}
 	if f.formal == nil {
-		f.formal = make(map[normalizedName]*Flag)
+		f.formal = make(map[NormalizedName]*Flag)
 	}
 	f.formal[f.normalizeFlagName(flag.Name)] = flag
 
@@ -482,7 +482,7 @@
 	}
 	// mark as visited for Visit()
 	if f.actual == nil {
-		f.actual = make(map[normalizedName]*Flag)
+		f.actual = make(map[NormalizedName]*Flag)
 	}
 	f.actual[f.normalizeFlagName(flag.Name)] = flag
 	flag.Changed = true
