diff --git a/.travis.yml b/.travis.yml
index 63f5e5e..7dee3cc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,8 +2,6 @@
 
 dart:
   - dev
-  - stable
-
 dart_task:
   - test
   - dartanalyzer
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ac97f07..3e2d662 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.8
+
+* Updated SDK version to 2.0.0-dev.17.0
+
 ## 2.0.7
 
 * When a `Client` is closed before a request completes, the error sent to that
diff --git a/lib/src/parameters.dart b/lib/src/parameters.dart
index c6c653b..8b39d46 100644
--- a/lib/src/parameters.dart
+++ b/lib/src/parameters.dart
@@ -128,11 +128,11 @@
   /// parameter is represented by that name in quotes.
   String get _path {
     if (_parent is! Parameter) {
-      return _key is int ? (_key + 1).toString() : JSON.encode(_key);
+      return _key is int ? (_key + 1).toString() : jsonEncode(_key);
     }
 
     quoteKey(key) {
-      if (key.contains(new RegExp(r'[^a-zA-Z0-9_-]'))) return JSON.encode(key);
+      if (key.contains(new RegExp(r'[^a-zA-Z0-9_-]'))) return jsonEncode(key);
       return key;
     }
 
@@ -267,7 +267,7 @@
   _getTyped(String type, bool test(value)) {
     if (test(value)) return value;
     throw new RpcException.invalidParams('Parameter $_path for method '
-        '"$method" must be $type, but was ${JSON.encode(value)}.');
+        '"$method" must be $type, but was ${jsonEncode(value)}.');
   }
 
   _getParsed(String description, parse(String value)) {
@@ -287,7 +287,7 @@
 
       throw new RpcException.invalidParams('Parameter $_path for method '
           '"$method" must be a valid $description, but was '
-          '${JSON.encode(string)}.$message');
+          '${jsonEncode(string)}.$message');
     }
   }
 
diff --git a/lib/src/server.dart b/lib/src/server.dart
index 98f472b..0aa4c2f 100644
--- a/lib/src/server.dart
+++ b/lib/src/server.dart
@@ -209,7 +209,7 @@
       throw new RpcException(
           error_code.INVALID_REQUEST,
           'Invalid JSON-RPC '
-          'version ${JSON.encode(request['jsonrpc'])}, expected "2.0".');
+          'version ${jsonEncode(request['jsonrpc'])}, expected "2.0".');
     }
 
     if (!request.containsKey('method')) {
@@ -224,7 +224,7 @@
       throw new RpcException(
           error_code.INVALID_REQUEST,
           'Request method must '
-          'be a string, but was ${JSON.encode(method)}.');
+          'be a string, but was ${jsonEncode(method)}.');
     }
 
     var params = request['params'];
@@ -232,7 +232,7 @@
       throw new RpcException(
           error_code.INVALID_REQUEST,
           'Request params must '
-          'be an Array or an Object, but was ${JSON.encode(params)}.');
+          'be an Array or an Object, but was ${jsonEncode(params)}.');
     }
 
     var id = request['id'];
@@ -240,7 +240,7 @@
       throw new RpcException(
           error_code.INVALID_REQUEST,
           'Request id must be a '
-          'string, number, or null, but was ${JSON.encode(id)}.');
+          'string, number, or null, but was ${jsonEncode(id)}.');
     }
   }
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 3b4f993..77b52c0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: json_rpc_2
-version: 2.0.7
+version: 2.0.8
 author: Dart Team <misc@dartlang.org>
 description: An implementation of the JSON-RPC 2.0 spec.
 homepage: http://github.com/dart-lang/json_rpc_2
@@ -9,4 +9,4 @@
 dev_dependencies:
   test: "^0.12.28"
 environment:
-  sdk: ">=1.8.0 <2.0.0"
+  sdk: ">=2.0.0-dev.17.0 <2.0.0"
diff --git a/test/client/utils.dart b/test/client/utils.dart
index cd53493..8a0a9a3 100644
--- a/test/client/utils.dart
+++ b/test/client/utils.dart
@@ -37,10 +37,10 @@
   void expectRequest(callback(request)) {
     expect(
         _requestController.stream.first.then((request) {
-          return callback(JSON.decode(request));
+          return callback(jsonDecode(request));
         }).then((response) {
           if (response == null) return;
-          if (response is! String) response = JSON.encode(response);
+          if (response is! String) response = jsonEncode(response);
           _responseController.add(response);
         }),
         completes);
@@ -48,7 +48,7 @@
 
   /// Sends [response], a decoded response, to [client].
   void sendResponse(response) {
-    sendJsonResponse(JSON.encode(response));
+    sendJsonResponse(jsonEncode(response));
   }
 
   /// Sends [response], a JSON-encoded response, to [client].
diff --git a/test/peer_test.dart b/test/peer_test.dart
index f2ab5b1..94c49e6 100644
--- a/test/peer_test.dart
+++ b/test/peer_test.dart
@@ -145,7 +145,7 @@
           new StreamChannel(incomingController.stream, outgoingController));
 
       expect(
-          outgoingController.stream.first.then(JSON.decode),
+          outgoingController.stream.first.then(jsonDecode),
           completion({
             "jsonrpc": "2.0",
             "error": {
diff --git a/test/server/server_test.dart b/test/server/server_test.dart
index cfe8b2f..c2f87ab 100644
--- a/test/server/server_test.dart
+++ b/test/server/server_test.dart
@@ -100,7 +100,7 @@
 
   test("a JSON parse error is rejected", () {
     return controller.handleJsonRequest('invalid json {').then((result) {
-      expect(JSON.decode(result), {
+      expect(jsonDecode(result), {
         'jsonrpc': '2.0',
         'error': {
           'code': error_code.PARSE_ERROR,
diff --git a/test/server/utils.dart b/test/server/utils.dart
index dffb384..f383f89 100644
--- a/test/server/utils.dart
+++ b/test/server/utils.dart
@@ -32,7 +32,7 @@
   /// Passes [request], a decoded request, to [server] and returns its decoded
   /// response.
   Future handleRequest(request) =>
-      handleJsonRequest(JSON.encode(request)).then(JSON.decode);
+      handleJsonRequest(jsonEncode(request)).then(jsonDecode);
 
   /// Passes [request], a JSON-encoded request, to [server] and returns its
   /// encoded response.
