diff --git a/examples/add_person.dart b/examples/add_person.dart
index bb38901..0352dc7 100644
--- a/examples/add_person.dart
+++ b/examples/add_person.dart
@@ -2,34 +2,31 @@
 
 import 'dart_tutorial/addressbook.pb.dart';
 
-// This function fills in a Person message based on user input.
+/// This function fills in a Person message based on user input.
 Person promptForAddress() {
-  Person person = Person();
+  final person = Person();
 
   print('Enter person ID: ');
-  String input = stdin.readLineSync();
+  final input = stdin.readLineSync();
   person.id = int.parse(input);
 
   print('Enter name');
   person.name = stdin.readLineSync();
 
   print('Enter email address (blank for none) : ');
-  String email = stdin.readLineSync();
-  if (email.isNotEmpty) {
-    person.email = email;
-  }
+  final email = stdin.readLineSync();
+  if (email.isNotEmpty) person.email = email;
 
   while (true) {
     print('Enter a phone number (or leave blank to finish): ');
-    String number = stdin.readLineSync();
+    final number = stdin.readLineSync();
     if (number.isEmpty) break;
 
-    Person_PhoneNumber phoneNumber = Person_PhoneNumber();
+    final phoneNumber = Person_PhoneNumber()..number = number;
 
-    phoneNumber.number = number;
     print('Is this a mobile, home, or work phone? ');
 
-    String type = stdin.readLineSync();
+    final type = stdin.readLineSync();
     switch (type) {
       case 'mobile':
         phoneNumber.type = Person_PhoneType.MOBILE;
@@ -49,15 +46,15 @@
   return person;
 }
 
-// Reads the entire address book from a file, adds one person based
-// on user input, then writes it back out to the same file.
-main(List<String> arguments) {
+/// Reads the entire address book from a file, adds one person based
+/// on user input, then writes it back out to the same file.
+void main(List<String> arguments) {
   if (arguments.length != 1) {
     print('Usage: add_person ADDRESS_BOOK_FILE');
     exit(-1);
   }
 
-  File file = File(arguments.first);
+  final file = File(arguments.first);
   AddressBook addressBook;
   if (!file.existsSync()) {
     print('File not found. Creating new file.');
diff --git a/examples/list_people.dart b/examples/list_people.dart
index dd5bb41..8a96d82 100644
--- a/examples/list_people.dart
+++ b/examples/list_people.dart
@@ -3,16 +3,16 @@
 import 'dart_tutorial/addressbook.pb.dart';
 import 'dart_tutorial/addressbook.pbenum.dart';
 
-// Iterates though all people in the AddressBook and prints info about them.
+/// Iterates though all people in the AddressBook and prints info about them.
 void printAddressBook(AddressBook addressBook) {
-  for (Person person in addressBook.people) {
+  for (var person in addressBook.people) {
     print('Person ID: ${person.id}');
     print('  Name: ${person.name}');
     if (person.hasEmail()) {
       print('  E-mail address:${person.email}');
     }
 
-    for (Person_PhoneNumber phoneNumber in person.phones) {
+    for (var phoneNumber in person.phones) {
       switch (phoneNumber.type) {
         case Person_PhoneType.MOBILE:
           print('   Mobile phone #: ');
@@ -32,16 +32,16 @@
   }
 }
 
-// Reads the entire address book from a file and prints all
-// the information inside.
-main(List<String> arguments) {
+/// Reads the entire address book from a file and prints all
+/// the information inside.
+void main(List<String> arguments) {
   if (arguments.length != 1) {
     print('Usage: list_person ADDRESS_BOOK_FILE');
     exit(-1);
   }
 
   // Read the existing address book.
-  File file = new File(arguments.first);
-  AddressBook addressBook = new AddressBook.fromBuffer(file.readAsBytesSync());
+  final file = new File(arguments.first);
+  final addressBook = new AddressBook.fromBuffer(file.readAsBytesSync());
   printAddressBook(addressBook);
 }
