Revised readme per peer-review
diff --git a/README.md b/README.md
index 0d62a7b..509eb18 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,23 @@
 [![GoDoc](https://godoc.org/github.com/pelletier/go-toml?status.svg)](http://godoc.org/github.com/pelletier/go-toml)
 [![Build Status](https://travis-ci.org/pelletier/go-toml.svg?branch=master)](https://travis-ci.org/pelletier/go-toml)
 
+## Features
+
+Go-toml provides the following features for using data parsed from TOML documents:
+
+* Load TOML documents from files and string data
+* Easily navigate TOML structure using TomlTree
+* Line & column position data for all parsed elements
+* Query support similar to JSON-Path
+* Syntax errors contain line and column numbers
+
+Go-toml is designed to help cover use-cases not covered by reflection-based TOML parsing:
+
+* Semantic evaluation of parsed TOML
+* Informing a user of mistakes in the source document, after it has been parsed
+* Programatic handling of default values on a case-by-case basis
+* Using a TOML document as a flexible data-store
+
 ## Import
 
     import "github.com/pelletier/go-toml"
@@ -45,70 +62,22 @@
     user = configTree.Get("user").(string)
     password = configTree.Get("password").(string)
     fmt.Println("User is ", user, ". Password is ", password)
-}
-```
 
-### Dealing with values
+    // show where elements are in the file
+    fmt.Println("User position: %v", configTree.GetPosition("user"))
+    fmt.Println("Password position: %v", configTree.GetPosition("password"))
 
-Here are some important functions you need to know in order to work with the
-values in a TOML tree:
-
-* `tree.Get("comma.separated.path")` Returns the value at the given path in the
-  tree as an `interface{}`. It's up to you to cast the result into the right
-  type.
-* `tree.Set("comma.separated.path", value)` Sets the value at the given path in
-  the tree, creating all necessary intermediate subtrees.
-
-### Dealing with positions
-
-Since
-[e118479061](https://github.com/pelletier/go-toml/commit/e1184790610b20d0541fc9f57c181cc5b1fc78be),
-go-toml supports positions. This feature allows you to track the positions of
-the values inside the source document, for example to provide better feedback in
-your application. Using positions works much like values:
-
-* `tree.GetPosition("comma.separated.path")` Returns the position of the given
-  path in the source.
-
-### Support for queries
-:
-Go-toml also supports a JSON-Path style syntax for querying a document for
-collections of elements, and more.
-
-```go
-import (
-    "fmt"
-    "github.com/pelletier/go-toml"
-)
-config, err := toml.Load(`
-[[book]]
-title = "The Stand"
-author = "Stephen King"
-[[book]]
-title = "For Whom the Bell Tolls"
-author = "Earnest Hemmingway"
-[[book]]
-title = "Neuromancer"
-author = "William Gibson"
-`)
-
-if err != nil {
-    fmt.Println("Error ", err.Error())
-} else {
-    // find and print all the authors in the document
-    authors := config.Query("$.book.author")
-    for _, name := authors.Value() {
-        fmt.Println(name)
+    // use a query to gather elements without walking the tree
+    results, _ := config.Query("$..[user,password]")
+    for ii, item := range results.Values() {
+      fmt.Println("Query result %d: %v", ii, item)
     }
 }
 ```
 
-More information about the format of TOML queries can be found on the
-[godoc page for go-toml](http://godoc.org/github.com/pelletier/go-toml).
-
 ## Documentation
 
-The documentation is available at
+The documentation and additional examples are available at
 [godoc.org](http://godoc.org/github.com/pelletier/go-toml).
 
 ## Contribute
diff --git a/doc_test.go b/doc_test.go
index c5c27a0..7c0e677 100644
--- a/doc_test.go
+++ b/doc_test.go
@@ -2,7 +2,9 @@
 
 package toml
 
-import "fmt"
+import (
+	"fmt"
+)
 
 func ExampleNodeFilterFn_filterExample() {
 	tree, _ := Load(`
@@ -49,3 +51,31 @@
 		fmt.Println(name)
 	}
 }
+
+func Example_comprehensiveExample() {
+	config, err := LoadFile("config.toml")
+
+	if err != nil {
+		fmt.Println("Error ", err.Error())
+	} else {
+		// retrieve data directly
+		user := config.Get("postgres.user").(string)
+		password := config.Get("postgres.password").(string)
+
+		// or using an intermediate object
+		configTree := config.Get("postgres").(*TomlTree)
+		user = configTree.Get("user").(string)
+		password = configTree.Get("password").(string)
+		fmt.Println("User is ", user, ". Password is ", password)
+
+		// show where elements are in the file
+		fmt.Println("User position: %v", configTree.GetPosition("user"))
+		fmt.Println("Password position: %v", configTree.GetPosition("password"))
+
+		// use a query to gather elements without walking the tree
+		results, _ := config.Query("$..[user,password]")
+		for ii, item := range results.Values() {
+			fmt.Println("Query result %d: %v", ii, item)
+		}
+	}
+}