diff --git a/CHANGELOG.md b/CHANGELOG.md
index c1e7926..43f346e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.0.2+6
+
+* Updated homepage URL.
+
 ## 0.0.2+5
 
 * Widen the version constraint on the `collection` package.
diff --git a/lib/src/bytes_builder.dart b/lib/src/bytes_builder.dart
index 446e175..68af417 100644
--- a/lib/src/bytes_builder.dart
+++ b/lib/src/bytes_builder.dart
@@ -86,7 +86,6 @@
   void clear();
 }
 
-
 class _CopyingBytesBuilder implements BytesBuilder {
   // Start with 1024 bytes.
   static const int _INIT_SIZE = 1024;
@@ -158,7 +157,6 @@
   }
 }
 
-
 class _BytesBuilder implements BytesBuilder {
   int _length = 0;
   final List _chunks = [];
diff --git a/lib/src/http_date.dart b/lib/src/http_date.dart
index 0626c72..7d46d55 100644
--- a/lib/src/http_date.dart
+++ b/lib/src/http_date.dart
@@ -24,21 +24,21 @@
 String formatHttpDate(DateTime date) {
   date = date.toUtc();
   var buffer = new StringBuffer()
-      ..write(_WEEKDAYS[date.weekday - 1])
-      ..write(", ")
-      ..write(date.day <= 9 ? "0" : "")
-      ..write(date.day.toString())
-      ..write(" ")
-      ..write(_MONTHS[date.month - 1])
-      ..write(" ")
-      ..write(date.year.toString())
-      ..write(date.hour <= 9 ? " 0" : " ")
-      ..write(date.hour.toString())
-      ..write(date.minute <= 9 ? ":0" : ":")
-      ..write(date.minute.toString())
-      ..write(date.second <= 9 ? ":0" : ":")
-      ..write(date.second.toString())
-      ..write(" GMT");
+    ..write(_WEEKDAYS[date.weekday - 1])
+    ..write(", ")
+    ..write(date.day <= 9 ? "0" : "")
+    ..write(date.day.toString())
+    ..write(" ")
+    ..write(_MONTHS[date.month - 1])
+    ..write(" ")
+    ..write(date.year.toString())
+    ..write(date.hour <= 9 ? " 0" : " ")
+    ..write(date.hour.toString())
+    ..write(date.minute <= 9 ? ":0" : ":")
+    ..write(date.minute.toString())
+    ..write(date.second <= 9 ? ":0" : ":")
+    ..write(date.second.toString())
+    ..write(" GMT");
   return buffer.toString();
 }
 
@@ -88,9 +88,7 @@
     scanner.expect(" ");
     var month = _parseMonth(scanner);
     scanner.expect(" ");
-    var day = scanner.scan(" ") ?
-        _parseInt(scanner, 1) :
-        _parseInt(scanner, 2);
+    var day = scanner.scan(" ") ? _parseInt(scanner, 1) : _parseInt(scanner, 2);
     scanner.expect(" ");
     var time = _parseTime(scanner);
     scanner.expect(" ");
@@ -141,8 +139,8 @@
 /// Validates that [day] is a valid day for [month]. If it's not, throws a
 /// [FormatException].
 DateTime _makeDateTime(int year, int month, int day, DateTime time) {
-  var dateTime = new DateTime.utc(
-      year, month, day, time.hour, time.minute, time.second);
+  var dateTime =
+      new DateTime.utc(year, month, day, time.hour, time.minute, time.second);
 
   // If [day] was too large, it will cause [month] to overflow.
   if (dateTime.month != month) {
diff --git a/lib/src/media_type.dart b/lib/src/media_type.dart
index 7a1ff23..fa9350e 100644
--- a/lib/src/media_type.dart
+++ b/lib/src/media_type.dart
@@ -73,8 +73,9 @@
         } else {
           scanner.expect(_quotedString);
           var quotedString = scanner.lastMatch[0];
-          value = quotedString.substring(1, quotedString.length - 1).
-              replaceAllMapped(_quotedPair, (match) => match[1]);
+          value = quotedString
+              .substring(1, quotedString.length - 1)
+              .replaceAllMapped(_quotedPair, (match) => match[1]);
         }
 
         scanner.scan(_whitespace);
@@ -139,17 +140,17 @@
   /// This will produce a valid HTTP media type.
   String toString() {
     var buffer = new StringBuffer()
-        ..write(type)
-        ..write("/")
-        ..write(subtype);
+      ..write(type)
+      ..write("/")
+      ..write(subtype);
 
     parameters.forEach((attribute, value) {
       buffer.write("; $attribute=");
       if (_nonToken.hasMatch(value)) {
         buffer
           ..write('"')
-          ..write(value.replaceAllMapped(
-              _escapedChar, (match) => "\\" + match[0]))
+          ..write(
+              value.replaceAllMapped(_escapedChar, (match) => "\\" + match[0]))
           ..write('"');
       } else {
         buffer.write(value);
diff --git a/pubspec.yaml b/pubspec.yaml
index 649af89..71544b1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: http_parser
-version: 0.0.3-dev
+version: 0.0.2+6
 author: "Dart Team <misc@dartlang.org>"
 homepage: https://github.com/dart-lang/http_parser
 description: >
diff --git a/test/media_type_test.dart b/test/media_type_test.dart
index 14affbb..fe90051 100644
--- a/test/media_type_test.dart
+++ b/test/media_type_test.dart
@@ -17,14 +17,14 @@
 
     test("allows leading whitespace", () {
       expect(new MediaType.parse(" text/plain").mimeType, equals("text/plain"));
-      expect(new MediaType.parse("\ttext/plain").mimeType,
-          equals("text/plain"));
+      expect(
+          new MediaType.parse("\ttext/plain").mimeType, equals("text/plain"));
     });
 
     test("allows trailing whitespace", () {
       expect(new MediaType.parse("text/plain ").mimeType, equals("text/plain"));
-      expect(new MediaType.parse("text/plain\t").mimeType,
-          equals("text/plain"));
+      expect(
+          new MediaType.parse("text/plain\t").mimeType, equals("text/plain"));
     });
 
     test("disallows separators in the MIME type", () {
@@ -67,10 +67,8 @@
       var type = new MediaType.parse(
           'text/plain; foo="bar space"; baz="bang\\\\escape"');
       expect(type.mimeType, equals("text/plain"));
-      expect(type.parameters, equals({
-        "foo": "bar space",
-        "baz": "bang\\escape"
-      }));
+      expect(
+          type.parameters, equals({"foo": "bar space", "baz": "bang\\escape"}));
     });
   });
 
@@ -102,14 +100,9 @@
     });
 
     test("[parameters] overrides and adds to existing parameters", () {
-      expect(type.change(parameters: {
-        "foo": "zap",
-        "qux": "fblthp"
-      }).parameters, equals({
-        "foo": "zap",
-        "baz": "bang",
-        "qux": "fblthp"
-      }));
+      expect(
+          type.change(parameters: {"foo": "zap", "qux": "fblthp"}).parameters,
+          equals({"foo": "zap", "baz": "bang", "qux": "fblthp"}));
     });
 
     test("[clearParameters] removes existing parameters", () {
@@ -117,9 +110,8 @@
     });
 
     test("[clearParameters] with [parameters] removes before adding", () {
-      var newType = type.change(
-          parameters: {"foo": "zap"},
-          clearParameters: true);
+      var newType =
+          type.change(parameters: {"foo": "zap"}, clearParameters: true);
       expect(newType.parameters, equals({"foo": "zap"}));
     });
 
@@ -155,9 +147,8 @@
     });
 
     test("serializes multiple parameters", () {
-      expect(new MediaType("text", "plain", {
-        "foo": "bar", "baz": "bang"
-      }).toString(), equals("text/plain; foo=bar; baz=bang"));
+      expect(new MediaType("text", "plain", {"foo": "bar", "baz": "bang"})
+          .toString(), equals("text/plain; foo=bar; baz=bang"));
     });
   });
 }
diff --git a/test/web_socket_test.dart b/test/web_socket_test.dart
index 45b84d9..6a0849d 100644
--- a/test/web_socket_test.dart
+++ b/test/web_socket_test.dart
@@ -22,13 +22,14 @@
       });
 
       var client = new HttpClient();
-      return client.openUrl("GET", Uri.parse("http://localhost:${server.port}"))
+      return client
+          .openUrl("GET", Uri.parse("http://localhost:${server.port}"))
           .then((request) {
         request.headers
-            ..set("Connection", "Upgrade")
-            ..set("Upgrade", "websocket")
-            ..set("Sec-WebSocket-Key", "x3JJHMbDL1EzLkh9GBhXDw==")
-            ..set("Sec-WebSocket-Version", "13");
+          ..set("Connection", "Upgrade")
+          ..set("Upgrade", "websocket")
+          ..set("Sec-WebSocket-Key", "x3JJHMbDL1EzLkh9GBhXDw==")
+          ..set("Sec-WebSocket-Version", "13");
         return request.close();
       }).then((response) => response.detachSocket()).then((socket) {
         var webSocket = new CompatibleWebSocket(socket, serverSide: false);
@@ -57,10 +58,10 @@
         var response = request.response;
         response.statusCode = 101;
         response.headers
-            ..set("Connection", "Upgrade")
-            ..set("Upgrade", "websocket")
-            ..set("Sec-WebSocket-Accept", CompatibleWebSocket.signKey(
-                request.headers.value('Sec-WebSocket-Key')));
+          ..set("Connection", "Upgrade")
+          ..set("Upgrade", "websocket")
+          ..set("Sec-WebSocket-Accept", CompatibleWebSocket
+              .signKey(request.headers.value('Sec-WebSocket-Key')));
         response.contentLength = 0;
         response.detachSocket().then((socket) {
           var webSocket = new CompatibleWebSocket(socket);
@@ -73,7 +74,8 @@
         });
       });
 
-      return WebSocket.connect('ws://localhost:${server.port}')
+      return WebSocket
+          .connect('ws://localhost:${server.port}')
           .then((webSocket) {
         var n = 0;
         return webSocket.listen((message) {
