diff --git a/message/doc.go b/message/doc.go
new file mode 100644
index 0000000..60424a6
--- /dev/null
+++ b/message/doc.go
@@ -0,0 +1,95 @@
+// Copyright 2017 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 message implements formatted I/O for localized strings with functions
+// analogous to the fmt's print functions. It is a drop-in replacement for fmt.
+//
+//
+// Localized Formatting
+//
+// A format string can be localized by replacing any of the print functions of
+// fmt with an equivalent call to a Printer.
+//
+//    p := message.NewPrinter(language.English)
+//    p.Println(123456.78) // Prints 123,456.78
+//
+//    p := message.NewPrinter(language.Bengali)
+//    p.Println(123456.78) // Prints ১,২৩,৪৫৬.৭৮
+//
+// Printer currently supports numbers and specialized types for which packages
+// exist in x/text. Other builtin types such as time.Time and slices are
+// planned.
+//
+// Format strings largely have the same meaning as with fmt with the following
+// notable exceptions:
+//   - flag # always resorts to fmt for printing
+//   - verb 'f', 'e', 'g', 'd' use localized formatting unless the '#' flag is
+//     specified.
+//
+// See package fmt for more options.
+//
+//
+// Translation
+//
+// The format strings that are passed to Printf, Sprintf, Fprintf, or Errorf
+// are used as keys to look up translations for the specified languages.
+// More on how these need to be specified below.
+//
+// One can use arbitrary keys to distinguish between otherwise ambiguous
+// strings:
+//    p := message.NewPrinter(language.English)
+//    p.Printf("archive(noun)")  // Prints "archive"
+//    p.Printf("archive(verb)")  // Prints "archive"
+//
+//    p := message.NewPrinter(language.German)
+//    p.Printf("archive(noun)")  // Prints "Archiv"
+//    p.Printf("archive(verb)")  // Prints "archivieren"
+//
+// To retain the fallback functionality, use Key:
+//    p.Printf(message.Key("archive(noun)", "archive"))
+//    p.Printf(message.Key("archive(verb)", "archive"))
+//
+//
+// Translation Pipeline
+//
+// Format strings that contain text need to be translated to support different
+// locales. The first step is to extract strings that need to be translated.
+//
+// 1. Install gotext
+//    go get -u golang.org/x/text/cmd/gotext
+//    gotext -help
+//
+// 2. Mark strings in your source to be translated by using message.Printer,
+// instead of the functions of the fmt package.
+//
+// 3. Extract the strings from your source
+//
+//    gotext extract
+//
+// The output will be written to the textdata directory.
+//
+// 4. Send the files for translation
+//
+// It is planned to support multiple formats, but for now one will have to
+// rewrite the JSON output to the desired format.
+//
+// 5. Inject translations into program
+//
+// 6. Repeat from 2
+//
+// Right now this has to be done programmatically with calls to Set or
+// SetString. These functions as well as the methods defined in
+// see also package golang.org/x/text/message/catalog can be used to implement
+// either dynamic or static loading of messages.
+//
+//
+// Plural and Gender Forms
+//
+// Translated messages can vary based on the plural and gender forms of
+// substitution values. In general, it is up to the translators to provide
+// alternative translations for such forms. See the packages in
+// golang.org/x/text/feature and golang.org/x/text/message/catalog for more
+// information.
+//
+package message
diff --git a/message/examples_test.go b/message/examples_test.go
new file mode 100644
index 0000000..c73eaf9
--- /dev/null
+++ b/message/examples_test.go
@@ -0,0 +1,42 @@
+// Copyright 2017 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 message_test
+
+import (
+	"net/http"
+
+	"golang.org/x/text/language"
+	"golang.org/x/text/message"
+)
+
+func Example_http() {
+	// languages supported by this service:
+	matcher := language.NewMatcher(message.DefaultCatalog.Languages())
+
+	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+		lang, _ := r.Cookie("lang")
+		accept := r.Header.Get("Accept-Language")
+		fallback := "en"
+		tag, _ := language.MatchStrings(matcher, lang.String(), accept, fallback)
+
+		p := message.NewPrinter(tag)
+
+		p.Fprintln(w, "User language is", tag)
+	})
+}
+
+func ExamplePrinter_numbers() {
+	for _, lang := range []string{"en", "de", "de-CH", "fr", "bn"} {
+		p := message.NewPrinter(language.Make(lang))
+		p.Printf("%-6s %g\n", lang, 123456.78)
+	}
+
+	// Output:
+	// en     123,456.78
+	// de     123.456,78
+	// de-CH  123’456.78
+	// fr     123 456,78
+	// bn     ১,২৩,৪৫৬.৭৮
+}
diff --git a/message/message.go b/message/message.go
index 187b26f..ba4f95a 100644
--- a/message/message.go
+++ b/message/message.go
@@ -2,15 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package message implements formatted I/O for localized strings with functions
-// analogous to the fmt's print functions.
-//
-// These are the important differences with fmt:
-//   - Output varies per locale.
-//   - The '#' flag is used to bypass localization.
-//
-// NOTE: Under construction. See https://golang.org/design/12750-localization
-// and its corresponding proposal issue https://golang.org/issues/12750.
 package message // import "golang.org/x/text/message"
 
 import (
