diff --git a/internal/language/language.go b/internal/language/language.go
index 7875a7c..aa5f5f4 100644
--- a/internal/language/language.go
+++ b/internal/language/language.go
@@ -31,7 +31,7 @@
 
 // Tag represents a BCP 47 language tag. It is used to specify an instance of a
 // specific language or locale. All language tag values are guaranteed to be
-// well-formed.
+// well-formed. The zero value of Tag is Und.
 type Tag struct {
 	// TODO: the following fields have the form TagTypeID. This name is chosen
 	// to allow refactoring the public package without conflicting with its
@@ -80,7 +80,7 @@
 	if int(t.pVariant) < len(t.str) {
 		return false
 	}
-	return t.equalTags(und)
+	return t.equalTags(Und)
 }
 
 // IsPrivateUse reports whether the Tag consists solely of an IsPrivateUse use
@@ -100,7 +100,7 @@
 	if t.pVariant > 0 {
 		extra = extra[1:]
 	}
-	if t.equalTags(und) && strings.HasPrefix(extra, "x-") {
+	if t.equalTags(Und) && strings.HasPrefix(extra, "x-") {
 		t.str = extra
 		t.pVariant = 0
 		t.pExt = 0
@@ -241,12 +241,12 @@
 			// "und" instead of the base language.
 			base, _ := addTags(Tag{LangID: t.LangID})
 			if base.ScriptID != t.ScriptID {
-				return und
+				return Und
 			}
 			return Tag{LangID: t.LangID}
 		}
 	}
-	return und
+	return Und
 }
 
 // ParseExtension parses s as an extension and returns it on success.
diff --git a/internal/language/match.go b/internal/language/match.go
index bcefcd9..75a2dbc 100644
--- a/internal/language/match.go
+++ b/internal/language/match.go
@@ -205,7 +205,7 @@
 
 // minimizeTags mimics the behavior of the ICU 51 C implementation.
 func minimizeTags(t Tag) (Tag, error) {
-	if t.equalTags(und) {
+	if t.equalTags(Und) {
 		return t, nil
 	}
 	max, err := addTags(t)
diff --git a/internal/language/parse.go b/internal/language/parse.go
index eca4663..3c48288 100644
--- a/internal/language/parse.go
+++ b/internal/language/parse.go
@@ -229,7 +229,7 @@
 func Parse(s string) (t Tag, err error) {
 	// TODO: consider supporting old-style locale key-value pairs.
 	if s == "" {
-		return und, ErrSyntax
+		return Und, ErrSyntax
 	}
 	if len(s) <= maxAltTaglen {
 		b := [maxAltTaglen]byte{}
@@ -251,7 +251,7 @@
 }
 
 func parse(scan *scanner, s string) (t Tag, err error) {
-	t = und
+	t = Und
 	var end int
 	if n := len(scan.token); n <= 1 {
 		scan.toLower(0, len(scan.b))
@@ -260,7 +260,7 @@
 		}
 		end = parseExtensions(scan)
 	} else if n >= 4 {
-		return und, ErrSyntax
+		return Und, ErrSyntax
 	} else { // the usual case
 		t, end = parseTag(scan)
 		if n := len(scan.token); n == 1 {
diff --git a/internal/language/tags.go b/internal/language/tags.go
index 5d47329..e7afd31 100644
--- a/internal/language/tags.go
+++ b/internal/language/tags.go
@@ -4,8 +4,6 @@
 
 package language
 
-// TODO: Various sets of commonly use tags and regions.
-
 // MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed.
 // It simplifies safe initialization of Tag values.
 func MustParse(s string) Tag {
@@ -46,4 +44,5 @@
 	return r
 }
 
-var und = Tag{}
+// Und is the root language.
+var Und Tag
