diff --git a/README.md b/README.md
index cd5f1b1..30c17be 100644
--- a/README.md
+++ b/README.md
@@ -22,14 +22,14 @@
 	  {{/ names }}
 	  {{! I am a comment. }}
 	''';
-	
+
 	var template = new Template(source, name: 'template-filename.html');
-	
+
 	var output = template.renderString({'names': [
 		{'firstname': 'Greg', 'lastname': 'Lowe'},
 		{'firstname': 'Bob', 'lastname': 'Johnson'}
 	]});
-	
+
 	print(output);
 }
 ```
@@ -86,8 +86,8 @@
 
 ```dart
 var t = new Template('{{# foo }}');
-var lambda = (_) => 'bar'};
-t.renderString({'foo': lambda); // bar
+var lambda = (_) => 'bar';
+t.renderString({'foo': lambda}); // bar
 ```
 
 ```dart
@@ -98,20 +98,20 @@
 
 ```dart
 var t = new Template('{{# foo }}oi{{/ foo }}');
-var lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>'};
-t.renderString({'foo': lambda); // <b>OI</b>
+var lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>';
+t.renderString({'foo': lambda}); // <b>OI</b>
 ```
 
 ```dart
 var t = new Template('{{# foo }}{{bar}}{{/ foo }}');
-var lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>'};
-t.renderString({'foo': lambda, 'bar': 'pub'); // <b>PUB</b>
+var lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>';
+t.renderString({'foo': lambda, 'bar': 'pub'}); // <b>PUB</b>
 ```
 
 ```dart
 var t = new Template('{{# foo }}{{bar}}{{/ foo }}');
-var lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>'};
-t.renderString({'foo': lambda, 'bar': 'pub'); // <b>PUB</b>
+var lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>';
+t.renderString({'foo': lambda, 'bar': 'pub'}); // <b>PUB</b>
 ```
 
 In the following example `LambdaContext.renderSource(source)` re-parses the source string in the current context, this is the default behaviour in many mustache implementations. Since re-parsing the content is slow, and often not required, this library makes this step optional.
@@ -119,5 +119,5 @@
 ```dart
 var t = new Template('{{# foo }}{{bar}}{{/ foo }}');
 var lambda = (LambdaContext ctx) => ctx.renderSource(ctx.source + '{{cmd}}')};
-t.renderString({'foo': lambda, 'bar': 'pub', 'cmd': 'build'); // pub build
+t.renderString({'foo': lambda, 'bar': 'pub', 'cmd': 'build'}); // pub build
 ```
diff --git a/example/basic.dart b/example/basic.dart
new file mode 100644
index 0000000..89a293c
--- /dev/null
+++ b/example/basic.dart
@@ -0,0 +1,22 @@
+import 'package:mustache/mustache.dart';
+
+main() {
+  var source = '''
+    {{# names }}
+          <div>{{ lastname }}, {{ firstname }}</div>
+    {{/ names }}
+    {{^ names }}
+      <div>No names.</div>
+    {{/ names }}
+    {{! I am a comment. }}
+  ''';
+
+  var template = new Template(source, name: 'template-filename.html');
+
+  var output = template.renderString({'names': [
+      {'firstname': 'Greg', 'lastname': 'Lowe'},
+      {'firstname': 'Bob', 'lastname': 'Johnson'}
+  ]});
+
+  print(output);
+}
\ No newline at end of file
diff --git a/example/lambdas.dart b/example/lambdas.dart
new file mode 100644
index 0000000..c8ffd92
--- /dev/null
+++ b/example/lambdas.dart
@@ -0,0 +1,33 @@
+import 'package:mustache/mustache.dart';
+
+main() {
+  var t = new Template('{{ foo }}');
+  var lambda = (_) => 'bar';
+  var output = t.renderString({'foo': lambda}); // bar
+  print(output);
+
+  t = new Template('{{# foo }}hidden{{/ foo }}');
+  lambda = (_) => 'shown';
+  output = t.renderString({'foo': lambda}); // shown
+  print(output);
+
+  t = new Template('{{# foo }}oi{{/ foo }}');
+  lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>';
+  output = t.renderString({'foo': lambda}); // <b>OI</b>
+  print(output);
+
+  t = new Template('{{# foo }}{{bar}}{{/ foo }}');
+  lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>';
+  output = t.renderString({'foo': lambda, 'bar': 'pub'}); // <b>PUB</b>
+  print(output);
+
+  t = new Template('{{# foo }}{{bar}}{{/ foo }}');
+  lambda = (LambdaContext ctx) => '<b>${ctx.renderString().toUpperCase()}</b>';
+  output = t.renderString({'foo': lambda, 'bar': 'pub'}); // <b>PUB</b>
+  print(output);
+
+  t = new Template('{{# foo }}{{bar}}{{/ foo }}');
+  lambda = (LambdaContext ctx) => ctx.renderSource(ctx.source + '{{cmd}}');
+  output = t.renderString({'foo': lambda, 'bar': 'pub', 'cmd': 'build'}); // pub build
+  print(output);
+}
diff --git a/example/nested_paths.dart b/example/nested_paths.dart
new file mode 100644
index 0000000..5472ce7
--- /dev/null
+++ b/example/nested_paths.dart
@@ -0,0 +1,7 @@
+import 'package:mustache/mustache.dart';
+
+main() {
+  var template = new Template('{{ author.name }}');
+  var output = template.renderString({'author': {'name': 'Greg Lowe'}});
+  print(output);
+}
diff --git a/example/partials.dart b/example/partials.dart
new file mode 100644
index 0000000..a0c105f
--- /dev/null
+++ b/example/partials.dart
@@ -0,0 +1,16 @@
+import 'package:mustache/mustache.dart';
+
+main() {
+  var partial = new Template('{{ foo }}', name: 'partial');
+
+  var resolver = (String name) {
+     if (name == 'partial-name') { // Name of partial tag.
+       return partial;
+     }
+  };
+
+  var t = new Template('{{> partial-name }}', partialResolver: resolver);
+
+  var output = t.renderString({'foo': 'bar'}); // bar
+  print(output);
+}
