diff --git a/src/pkg/go/scanner/scanner.go b/src/pkg/go/scanner/scanner.go
index 9a040aa..c4a5ad8 100644
--- a/src/pkg/go/scanner/scanner.go
+++ b/src/pkg/go/scanner/scanner.go
@@ -188,7 +188,7 @@
 func isDigit(ch int) bool {
 	return
 		'0' <= ch && ch <= '9' ||
-		ch >= 0x80 && unicode.IsDecimalDigit(ch);
+		ch >= 0x80 && unicode.IsDigit(ch);
 }
 
 
diff --git a/src/pkg/unicode/Makefile b/src/pkg/unicode/Makefile
index da31830..717af36 100644
--- a/src/pkg/unicode/Makefile
+++ b/src/pkg/unicode/Makefile
@@ -6,7 +6,7 @@
 
 TARG=unicode
 GOFILES=\
-	decimaldigit.go\
+	digit.go\
 	digittables.go\
 	letter.go\
 	lettertables.go\
diff --git a/src/pkg/unicode/decimaldigit.go b/src/pkg/unicode/decimaldigit.go
deleted file mode 100644
index b6b4388..0000000
--- a/src/pkg/unicode/decimaldigit.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2009 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 unicode
-
-// IsDecimalDigit reports whether the rune is a decimal digit.
-func IsDecimalDigit(rune int) bool {
-	return Is(DecimalDigit, rune);
-}
diff --git a/src/pkg/unicode/digit.go b/src/pkg/unicode/digit.go
new file mode 100644
index 0000000..b12ada2
--- /dev/null
+++ b/src/pkg/unicode/digit.go
@@ -0,0 +1,13 @@
+// Copyright 2009 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 unicode
+
+// IsDigit reports whether the rune is a decimal digit.
+func IsDigit(rune int) bool {
+	if rune < 0x100 {	// quick ASCII (Latin-1, really) check
+		return '0' <= rune && rune <= '9'
+	}
+	return Is(Digit, rune);
+}
diff --git a/src/pkg/unicode/decimaldigit_test.go b/src/pkg/unicode/digit_test.go
similarity index 98%
rename from src/pkg/unicode/decimaldigit_test.go
rename to src/pkg/unicode/digit_test.go
index 05d75b4..02d0637 100644
--- a/src/pkg/unicode/decimaldigit_test.go
+++ b/src/pkg/unicode/digit_test.go
@@ -10,7 +10,7 @@
 //	grep '^....;[^;]*;Nd;' UnicodeData.txt
 // To generate this table:
 //  ,s/([^;]+).+/	0x\1,	\/\/ &/g
-var testDecimal = []int{
+var testDigit = []int{
 	0x0030,	// 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
 	0x0031,	// 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
 	0x0032,	// 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
@@ -358,15 +358,15 @@
 	0x2fa1d,
 }
 
-func TestIsDecimalDigit(t *testing.T) {
-	for i, r := range testDecimal {
-		if !IsDecimalDigit(r) {
-			t.Errorf("IsDecimalDigit(%#x) = false, want true\n", r);
+func TestDigit(t *testing.T) {
+	for i, r := range testDigit {
+		if !IsDigit(r) {
+			t.Errorf("IsDigit(%#x) = false, want true\n", r);
 		}
 	}
 	for i, r := range testLetter {
-		if IsDecimalDigit(r) {
-			t.Errorf("IsDecimalDigit(%#x) = true, want false\n", r);
+		if IsDigit(r) {
+			t.Errorf("IsDigit(%#x) = true, want false\n", r);
 		}
 	}
 }
diff --git a/src/pkg/unicode/digittables.go b/src/pkg/unicode/digittables.go
index f0b11a5..eaea425 100644
--- a/src/pkg/unicode/digittables.go
+++ b/src/pkg/unicode/digittables.go
@@ -1,12 +1,12 @@
 // Generated by running
-//	tables --digits=true --url=http://www.unicode.org/Public/5.1.0/ucd/UnicodeData.txt
+//	maketables --digits=true --url=http://www.unicode.org/Public/5.1.0/ucd/UnicodeData.txt
 // DO NOT EDIT
 
 package unicode
 
-// DecimalDigit is the set of Unicode characters with the "decimal digit" property.
-var DecimalDigit = decimalDigit
-var decimalDigit = []Range {
+// Digit is the set of Unicode characters with the "decimal digit" (Nd) property.
+var Digit = digit
+var digit = []Range {
 	Range{0x0030, 0x0039, 1},
 	Range{0x0660, 0x0669, 1},
 	Range{0x06f0, 0x06f9, 1},
diff --git a/src/pkg/unicode/letter.go b/src/pkg/unicode/letter.go
index f0e9db2..c625e90 100644
--- a/src/pkg/unicode/letter.go
+++ b/src/pkg/unicode/letter.go
@@ -18,8 +18,7 @@
 func Is(ranges []Range, rune int) bool {
 	// common case: rune is ASCII or Latin-1
 	if rune < 0x100 {
-		for i := 0; i < len(ranges); i++ {
-			r := ranges[i];
+		for i, r := range ranges {
 			if rune > r.Hi {
 				continue;
 			}
@@ -51,20 +50,33 @@
 
 // IsUpper reports whether the rune is an upper case letter.
 func IsUpper(rune int) bool {
+	if rune < 0x80 {	// quick ASCII check
+		return 'A' <= rune && rune <= 'Z';
+	}
 	return Is(Upper, rune);
 }
 
 // IsLower reports whether the rune is a lower case letter.
 func IsLower(rune int) bool {
+	if rune < 0x80 {	// quick ASCII check
+		return 'a' <= rune && rune <= 'z';
+	}
 	return Is(Lower, rune);
 }
 
 // IsTitle reports whether the rune is a title case letter.
 func IsTitle(rune int) bool {
+	if rune < 0x80 {	// quick ASCII check
+		return false;
+	}
 	return Is(Title, rune);
 }
 
 // IsLetter reports whether the rune is a letter.
 func IsLetter(rune int) bool {
+	if rune < 0x80 {	// quick ASCII check
+		rune &^= ' ';
+		return 'A' <= rune && rune <= 'Z';
+	}
 	return Is(Letter, rune);
 }
diff --git a/src/pkg/unicode/maketables.go b/src/pkg/unicode/maketables.go
index 4668136..6a7ac3d 100644
--- a/src/pkg/unicode/maketables.go
+++ b/src/pkg/unicode/maketables.go
@@ -172,7 +172,7 @@
 	resp.Body.Close();
 	fmt.Printf(
 		"// Generated by running\n"
-		"//	tables --digits=%t --url=%s\n"
+		"//	maketables --digits=%t --url=%s\n"
 		"// DO NOT EDIT\n\n"
 		"package unicode\n",
 		*digits,
@@ -183,9 +183,9 @@
 	// available to clients.
 	if *digits {
 		dumpRange(
-			"\n// DecimalDigit is the set of Unicode characters with the \"decimal digit\" property.\n"
-			"var DecimalDigit = decimalDigit\n"
-			"var decimalDigit = []Range {\n",
+			"\n// Digit is the set of Unicode characters with the \"decimal digit\" (Nd) property.\n"
+			"var Digit = digit\n"
+			"var digit = []Range {\n",
 			func(code int) bool { return chars[code].category == "Nd" },
 			"}\n"
 		);
