diff --git a/doc/tutorial.md b/doc/tutorial.md
index 6927c82125b64..b58ba6c3222ed 100644
--- a/doc/tutorial.md
+++ b/doc/tutorial.md
@@ -214,6 +214,11 @@ while count < 10 {
 }
 ~~~~
 
+The name of the function that prints a line of text, `io::println`, is
+qualified: it refers to the function named `println` that's defined in the
+module `io`. In Rust, a double colon---`::`---separates parts of a
+qualified name. For more details, see the section on [crates](#crates).
+
 Although Rust can almost always infer the types of local variables, you
 can specify a variable's type by following it with a colon, then the type
 name.
@@ -1817,14 +1822,29 @@ struct Stack<T> {
     elements: ~[mut T]
 }
 
-enum Maybe<T> {
-    Just(T),
-    Nothing
+enum Option<T> {
+    Some(T),
+    None
 }
 ~~~~
 
 These declarations can be instantiated to valid types like `Set<int>`,
-`Stack<int>` and `Maybe<int>`.
+`Stack<int>` and `Option<int>`.
+
+The last type in that example, `Option`, appears frequently in Rust code.
+Because Rust does not have null pointers (except in unsafe code), we need
+another way to write a function whose result isn't defined on every possible
+combination of arguments of the appropriate types. The usual way is to write
+a function that returns `Option<T>` instead of `T`.
+
+~~~~
+fn radius(shape: Shape) -> Option<float> {
+   match shape {
+       Circle(_, radius) => Some(radius),
+       Rectangle(*)      => None
+   }      
+}
+~~~~
 
 The Rust compiler compiles generic functions very efficiently by
 *monomorphizing* them. *Monomorphization* is a fancy name for a simple