diff --git a/language/compact.go b/language/compact.go
new file mode 100644
index 0000000..125cc56
--- /dev/null
+++ b/language/compact.go
@@ -0,0 +1,14 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package language
+
+import "golang.org/x/text/language/internal"
+
+type compactID uint16
+
+func getCoreIndex(t language.Tag) (id compactID, ok bool) {
+	x, ok := coreTags[language.GetCoreKey(t)]
+	return compactID(x), ok
+}
diff --git a/language/internal/compact.go b/language/internal/compact.go
new file mode 100644
index 0000000..9e5dc8f
--- /dev/null
+++ b/language/internal/compact.go
@@ -0,0 +1,17 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package language
+
+// GetCoreKey generates a uint32 value that is guaranteed to be unique for
+// different language, region, and script values.
+func GetCoreKey(t Tag) (key uint32) {
+	if t.LangID > langNoIndexOffset {
+		return 0xfff00000
+	}
+	key |= uint32(t.LangID) << (8 + 12)
+	key |= uint32(t.ScriptID) << 12
+	key |= uint32(t.RegionID)
+	return key
+}
diff --git a/language/language.go b/language/language.go
index 3829d6d..b800fd9 100644
--- a/language/language.go
+++ b/language/language.go
@@ -438,17 +438,24 @@
 			exact = false
 		}
 	}
-	for ; t != Und; t = t.Parent() {
+	if x, ok := getCoreIndex(t.tag); ok {
+		return int(x), exact
+	}
+	exact = false
+	if r.regionID != 0 && s.scriptID == 0 {
+		// Deal with cases where an extra script is inserted for the region.
+		t, _ := t.tag.Maximize()
+		if x, ok := getCoreIndex(t); ok {
+			return int(x), exact
+		}
+	}
+	for t = t.Parent(); t != Und; t = t.Parent() {
 		// No variants specified: just compare core components.
 		// The key has the form lllssrrr, where l, s, and r are nibbles for
 		// respectively the langID, scriptID, and regionID.
-		key := uint32(b.langID) << (8 + 12)
-		key |= uint32(s.scriptID) << 12
-		key |= uint32(r.regionID)
-		if x, ok := coreTags[key]; ok {
+		if x, ok := getCoreIndex(t.tag); ok {
 			return int(x), exact
 		}
-		exact = false
 	}
 	return int(0), exact
 }
diff --git a/language/language_test.go b/language/language_test.go
index 084a86f..1a605c9 100644
--- a/language/language_test.go
+++ b/language/language_test.go
@@ -65,6 +65,14 @@
 		{"en", 136, true},
 		{"en-u-co-phonebk", 136, false},
 		{"en-001", 137, true},
+		{"zh-Hant-HK", 763, true},
+		{"zh-HK", 763, false}, // maximized to zh-Hant-HK
+		{"nl-Beng", 0, false}, // parent skips script
+		{"nl-NO", 524, false}, // region is ignored
+		{"nl-Latn-NO", 524, false},
+		{"nl-Latn-NO-u-co-phonebk", 524, false},
+		{"nl-Latn-NO-valencia", 524, false},
+		{"nl-Latn-NO-oxendict", 524, false},
 		{"sh", 0, false}, // We don't normalize.
 	}
 	for _, tt := range tests {
