diff --git a/CHANGELOG.md b/CHANGELOG.md
index 674b8df..99b366e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog
 
+## 2.0.0
+- Use configuration dependent imports to avoid having separate implementations
+  for `dart:io` and `dart:html`.
+- Remove `browser_resource.dart`.
+
 ## 1.1.0
 
 - Added browser-compatible version as `browser_resource.dart` library.
diff --git a/lib/browser_resource.dart b/lib/browser_resource.dart
deleted file mode 100644
index cf2db65..0000000
--- a/lib/browser_resource.dart
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// A [Resource] is data that can be read into a Dart program.
-///
-/// A resource is identified by a URI. It can be loaded as bytes or data.
-/// The resource URI may be a `package:` URI.
-///
-/// Example:
-///
-///     var resource = new Resource("package:foo/foo_data.txt");
-///     var string = await resource.readAsString(UTF8);
-///     print(string);
-///
-/// Example:
-///
-///     var resource = new Resource("http://example.com/data.json");
-///     var obj = await resource.openRead()   // Reads as stream of bytes.
-///                             .transform(UTF8.fuse(JSON).decoder)
-///                             .first;
-///
-///
-/// Notice: Currently this library requires `dart:Html` to do the reading,
-/// so it doesn't work outside of a browser.
-/// This library will eventually be mergeded into the `resource.dart` when
-/// features are available to make that possible.
-library browser_resource;
-
-export "src/browser/resource.dart" show Resource;
-export "src/browser/loader.dart" show ResourceLoader;
diff --git a/lib/resource.dart b/lib/resource.dart
index 91c74a0..4326d5f 100644
--- a/lib/resource.dart
+++ b/lib/resource.dart
@@ -19,12 +19,7 @@
 ///     var obj = await resource.openRead()   // Reads as stream of bytes.
 ///                             .transform(UTF8.fuse(JSON).decoder)
 ///                             .first;
-///
-///
-/// Notice: Currently this library requires `dart:io` to do the reading,
-/// so it doesn't work in the browser. Use `browser_resource.dart` in the
-/// browser.
 library resource;
 
-export "src/io/resource.dart" show Resource;
-export "src/io/loader.dart" show ResourceLoader;
+export "src/resource.dart" show Resource;
+export "src/resource_loader.dart" show ResourceLoader;
diff --git a/lib/src/browser/loader.dart b/lib/src/browser/loader.dart
deleted file mode 100644
index 0ecaf67..0000000
--- a/lib/src/browser/loader.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:async" show Future, Stream;
-import "dart:convert" show Encoding;
-
-import "../resource_loader.dart" as base;
-import "../package_loader.dart"as base;
-import "html_io.dart" as io;
-
-/// Resource loading strategy.
-///
-/// An abstraction of the functionality needed to load resources.
-///
-/// Implementations of this interface decide which URI schemes they support.
-abstract class ResourceLoader implements base.ResourceLoader {
-  /// A resource loader that can load as many of the following URI
-  /// schemes as are supported by the platform:
-  /// * file
-  /// * http
-  /// * https
-  /// * data
-  /// * package
-  ///
-  /// (For example, file: URIs are not supported in the browser).
-  /// Relative URI references are accepted - they are resolved against
-  /// [Uri.base] before being loaded.
-  static ResourceLoader get defaultLoader =>
-      const PackageLoader(const DefaultLoader());
-}
-
-/// Default implementation of [ResourceLoader]..
-///
-/// Uses the system's available loading functionality to implement the
-/// loading functions.
-///
-/// Supports as many of `http:`, `https:`, `file:` and `data:` URIs as
-/// possible.
-class DefaultLoader implements ResourceLoader {
-  const DefaultLoader();
-
-  Stream<List<int>> openRead(Uri uri) => io.readAsStream(uri);
-
-  Future<List<int>> readAsBytes(Uri uri) => io.readAsBytes(uri);
-
-  Future<String> readAsString(Uri uri, {Encoding encoding}) =>
-      io.readAsString(uri, encoding);
-}
-
-// A loader that implements base.PackageLoader *and* ResourceLoader from this
-// file.
-class PackageLoader extends base.PackageLoader implements ResourceLoader {
-  const PackageLoader(ResourceLoader loader) : super(loader);
-}
diff --git a/lib/src/browser/resource.dart b/lib/src/browser/resource.dart
deleted file mode 100644
index 9368e4e..0000000
--- a/lib/src/browser/resource.dart
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:core" hide Resource;
-
-import "loader.dart" show ResourceLoader, DefaultLoader;
-
-// TODO(lrn): Merge with implementation when configured imports removes
-// the need to share code.
-import "../resource.dart" as base show Resource;
-
-class Resource extends base.Resource {
-  /// Creates a resource object with the given [uri] as location.
-  ///
-  /// The [uri] must be either a [Uri] or a string containing a valid URI.
-  /// If the string is not a valid URI, using any of the functions on
-  /// the resource object will fail.
-  ///
-  /// The URI may be relative, in which case it will be resolved
-  /// against [Uri.base] before being used.
-  ///
-  /// The URI may use the `package` scheme, which is always supported.
-  /// Other schemes may also be supported where possible.
-  ///
-  /// If [loader] is provided, it is used to load absolute non-package URIs.
-  /// Package: URIs are resolved to a non-package URI before being loaded, so
-  /// the loader doesn't have to support package: URIs, nor does it need to
-  /// support relative URI references.
-  /// If [loader] is omitted, a default implementation is used which supports
-  /// as many of `http`, `https`, `file` and `data` as are available on the
-  /// current platform.
-  const Resource(uri, {ResourceLoader loader})
-      : super(uri, (loader != null) ? loader : const DefaultLoader());
-}
diff --git a/lib/src/io/loader.dart b/lib/src/io/loader.dart
deleted file mode 100644
index d52cf44..0000000
--- a/lib/src/io/loader.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:async" show Future, Stream;
-import "dart:convert" show Encoding;
-
-import "../resource_loader.dart" as base;
-import "../package_loader.dart"as base;
-import "io.dart" as io;
-
-/// Resource loading strategy.
-///
-/// An abstraction of the functionality needed to load resources.
-///
-/// Implementations of this interface decide which URI schemes they support.
-abstract class ResourceLoader implements base.ResourceLoader {
-  /// A resource loader that can load as many of the following URI
-  /// schemes as are supported by the platform:
-  /// * file
-  /// * http
-  /// * https
-  /// * data
-  /// * package
-  ///
-  /// (For example, file: URIs are not supported in the browser).
-  /// Relative URI references are accepted - they are resolved against
-  /// [Uri.base] before being loaded.
-  static ResourceLoader get defaultLoader =>
-      const PackageLoader(const DefaultLoader());
-}
-
-/// Default implementation of [ResourceLoader]..
-///
-/// Uses the system's available loading functionality to implement the
-/// loading functions.
-///
-/// Supports as many of `http:`, `https:`, `file:` and `data:` URIs as
-/// possible.
-class DefaultLoader implements ResourceLoader {
-  const DefaultLoader();
-
-  Stream<List<int>> openRead(Uri uri) => io.readAsStream(uri);
-
-  Future<List<int>> readAsBytes(Uri uri) => io.readAsBytes(uri);
-
-  Future<String> readAsString(Uri uri, {Encoding encoding}) =>
-      io.readAsString(uri, encoding);
-}
-
-// A loader that implements base.PackageLoader *and* ResourceLoader from this
-// file.
-class PackageLoader extends base.PackageLoader implements ResourceLoader {
-  const PackageLoader(ResourceLoader loader) : super(loader);
-}
diff --git a/lib/src/io/resource.dart b/lib/src/io/resource.dart
deleted file mode 100644
index 4ca3b8f..0000000
--- a/lib/src/io/resource.dart
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:core" hide Resource;
-
-import "loader.dart" show ResourceLoader, DefaultLoader;
-
-// TODO(lrn): Merge with implementation when configured imports removes
-// the need to share code.
-import "../resource.dart" as base show Resource;
-
-class Resource extends base.Resource {
-  /// Creates a resource object with the given [uri] as location.
-  ///
-  /// The [uri] must be either a [Uri] or a string containing a valid URI.
-  /// If the string is not a valid URI, using any of the functions on
-  /// the resource object will fail.
-  ///
-  /// The URI may be relative, in which case it will be resolved
-  /// against [Uri.base] before being used.
-  ///
-  /// The URI may use the `package` scheme, which is always supported.
-  /// Other schemes may also be supported where possible.
-  ///
-  /// If [loader] is provided, it is used to load absolute non-package URIs.
-  /// Package: URIs are resolved to a non-package URI before being loaded, so
-  /// the loader doesn't have to support package: URIs, nor does it need to
-  /// support relative URI references.
-  /// If [loader] is omitted, a default implementation is used which supports
-  /// as many of `http`, `https`, `file` and `data` as are available on the
-  /// current platform.
-  const Resource(uri, {ResourceLoader loader})
-      : super(uri, (loader != null) ? loader : const DefaultLoader());
-}
diff --git a/lib/src/browser/html_io.dart b/lib/src/io_html.dart
similarity index 100%
rename from lib/src/browser/html_io.dart
rename to lib/src/io_html.dart
diff --git a/lib/src/io/io.dart b/lib/src/io_io.dart
similarity index 100%
rename from lib/src/io/io.dart
rename to lib/src/io_io.dart
diff --git a/lib/src/io_none.dart b/lib/src/io_none.dart
new file mode 100644
index 0000000..77e90cc
--- /dev/null
+++ b/lib/src/io_none.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async" show Future, Stream;
+
+/// Read the bytes of a URI as a stream of bytes.
+Stream<List<int>> readAsStream(Uri uri) async* {
+  if (uri.scheme == "data") {
+    yield uri.data.contentAsBytes();
+    return;
+  }
+  throw new UnsupportedError("Unsupported scheme: $uri");
+}
+
+/// Read the bytes of a URI as a list of bytes.
+Future<List<int>> readAsBytes(Uri uri) async {
+  if (uri.scheme == "data") {
+    return uri.data.contentAsBytes();
+  }
+  throw new UnsupportedError("Unsupported scheme: $uri");
+}
+
+/// Read the bytes of a URI as a string.
+Future<String> readAsString(Uri uri, Encoding encoding) async {
+  if (uri.scheme == "data") {
+    return uri.data.contentAsString(encoding: encoding);
+  }
+  throw new UnsupportedError("Unsupported scheme: $uri");
+}
diff --git a/lib/src/package_loader.dart b/lib/src/package_loader.dart
index b834c79..e8c153e 100644
--- a/lib/src/package_loader.dart
+++ b/lib/src/package_loader.dart
@@ -14,7 +14,7 @@
 /// package URIs and relative URI references before loading them.
 ///
 /// This class may be useful when you don't want to bother creating a resource
-/// object, and just want to load a resource directly.
+/// object, and just want to load a package resource directly.
 class PackageLoader implements ResourceLoader {
   final ResourceLoader _loader;
   const PackageLoader(ResourceLoader loader) : _loader = loader;
diff --git a/lib/src/resource.dart b/lib/src/resource.dart
index 2b19d9e..c13c2ea 100644
--- a/lib/src/resource.dart
+++ b/lib/src/resource.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import "dart:core" hide Resource;
 import "dart:async" show Future, Stream;
 import "dart:convert" show Encoding;
 
@@ -23,8 +22,28 @@
   /// The URI of the resource.
   final _uri;
 
-  const Resource(uri, ResourceLoader loader)
-      : _uri = uri, _loader = loader;
+  /// Creates a resource object with the given [uri] as location.
+  ///
+  /// The [uri] must be either a [Uri] or a [String] containing a valid URI.
+  /// If the string is not a valid URI, using any of the functions on
+  /// the resource object will fail.
+  ///
+  /// The URI may be relative, in which case it will be resolved
+  /// against [Uri.base] before being used.
+  ///
+  /// The URI may use the `package` scheme,
+  /// which is supported if the platform can load files at runtime at all.
+  /// Other schemes may also be supported where possible.
+  ///
+  /// If [loader] is provided, it is used to load absolute non-package URIs.
+  /// Package: URIs are resolved to a non-package URI before being loaded, so
+  /// the loader doesn't have to support package: URIs, nor does it need to
+  /// support relative URI references.
+  /// If [loader] is omitted, a default implementation is used which supports
+  /// as many of `http`, `https`, `file` and `data` as are available on the
+  /// current platform.
+  const Resource(uri, {ResourceLoader loader})
+      : _uri = uri, _loader = loader ?? const DefaultLoader();
 
   /// The location URI of this resource.
   ///
diff --git a/lib/src/resource_loader.dart b/lib/src/resource_loader.dart
index 1a189e1..3e0c78c 100644
--- a/lib/src/resource_loader.dart
+++ b/lib/src/resource_loader.dart
@@ -4,6 +4,11 @@
 
 import "dart:async" show Future, Stream;
 import "dart:convert" show Encoding;
+import "package_loader.dart";
+import "io_none.dart"
+    if (dart.library.io) "io_io.dart"
+    if (dart.library.html) "io_html.dart"
+    as io;
 
 /// Resource loading strategy.
 ///
@@ -11,6 +16,23 @@
 ///
 /// Implementations of this interface decide which URI schemes they support.
 abstract class ResourceLoader {
+  /// A resource loader that can load as many of the following URI
+  /// schemes as are supported by the platform:
+  /// * file
+  /// * http
+  /// * https
+  /// * data
+  /// * package
+  ///
+  /// For example, `file:` URIs are not supported in the browser.
+  /// Relative URI references are accepted - they are resolved against
+  /// [Uri.base] before being loaded.
+  ///
+  /// This loader is automatically used by the [Resource] class
+  /// if no other loader is specified.
+  static ResourceLoader get defaultLoader =>
+      const PackageLoader(const DefaultLoader());
+
   /// Reads the file located by [uri] as a stream of bytes.
   Stream<List<int>> openRead(Uri uri);
 
@@ -29,3 +51,21 @@
   Future<String> readAsString(Uri uri, {Encoding encoding});
 }
 
+/// Default implementation of [ResourceLoader].
+///
+/// Uses the system's available loading functionality to implement the
+/// loading functions.
+///
+/// Supports as many of `http:`, `https:`, `file:` and `data:` URIs as
+/// possible.
+class DefaultLoader implements ResourceLoader {
+  const DefaultLoader();
+
+  Stream<List<int>> openRead(Uri uri) => io.readAsStream(uri);
+
+  Future<List<int>> readAsBytes(Uri uri) => io.readAsBytes(uri);
+
+  Future<String> readAsString(Uri uri, {Encoding encoding}) =>
+      io.readAsString(uri, encoding);
+}
+
diff --git a/pubspec.yaml b/pubspec.yaml
index e677345..8822f27 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,11 +1,11 @@
 name: resource
-version: 1.1.1-dev
+version: 2.0.0
 description: Reading resource data from (package and other) files.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/resource
 
 environment:
-  sdk: '>=1.14.0 <2.0.0'
+  sdk: '>=1.20.0 <2.0.0'
 
 dependencies:
   typed_data: "^1.0.0"
diff --git a/test/browser_http_test.dart b/test/browser_http_test.dart
index ecec680..ff4edad 100644
--- a/test/browser_http_test.dart
+++ b/test/browser_http_test.dart
@@ -7,7 +7,7 @@
 import "dart:async";
 import "dart:convert";
 
-import "package:resource/browser_resource.dart";
+import "package:resource/resource.dart";
 import "package:test/test.dart";
 
 const content = "Rødgrød med fløde";
