diff --git a/lib/plugin.dart b/lib/plugin.dart
index 66cebb0..2dcd96e 100644
--- a/lib/plugin.dart
+++ b/lib/plugin.dart
@@ -4,6 +4,8 @@
 
 library plugin;
 
+import 'package:plugin/src/plugin_impl.dart';
+
 /**
  * A function used to register the given [extension] to the extension point with
  * the given unique [identifier].
@@ -15,16 +17,13 @@
 typedef void RegisterExtension(String identifier, Object extension);
 
 /**
- * A function used to register an extension point with the given simple
- * [identifier]. If given, the [validator] will be used to validate extensions
- * to the extension point.
+ * A function used to register the given [extensionPoint].
  *
  * An [ExtensionError] will be thrown if the extension point cannot be
  * registered, such as when a plugin attempts to define two extension points
- * with the same simple identifier.
+ * with the same identifier.
  */
-typedef ExtensionPoint RegisterExtensionPoint(String identifier,
-    [ValidateExtension validateExtension]);
+typedef void RegisterExtensionPoint(ExtensionPoint extensionPoint);
 
 /**
  * A function used by a plugin to validate an [extension] to a extension point.
@@ -58,12 +57,20 @@
  *
  * Clients may not extend, implement or mix-in this class.
  */
-abstract class ExtensionPoint {
+abstract class ExtensionPoint<E> {
+  /**
+   * Initialize a newly created extension point to be defined by the given
+   * [plugin] with the given [simpleIdentifier]. The [validateExtension]
+   * function will be used to validate extensions for this extension point.
+   */
+  factory ExtensionPoint(Plugin plugin, String simpleIdentifier,
+      ValidateExtension validateExtension) = ExtensionPointImpl<E>;
+
   /**
    * Return an immutable list containing all of the extensions that were
    * registered for this extension point.
    */
-  List<Object> get extensions;
+  List<E> get extensions;
 
   /**
    * Return the plugin that defined this extension point.
diff --git a/lib/src/plugin_impl.dart b/lib/src/plugin_impl.dart
index a65a0d3..a3358bf 100644
--- a/lib/src/plugin_impl.dart
+++ b/lib/src/plugin_impl.dart
@@ -23,9 +23,7 @@
   @override
   void processPlugins(List<Plugin> plugins) {
     for (Plugin plugin in plugins) {
-      plugin.registerExtensionPoints((String identifier,
-              [ValidateExtension validateExtension]) =>
-          registerExtensionPoint(plugin, identifier, validateExtension));
+      plugin.registerExtensionPoints(registerExtensionPoint);
     }
     for (Plugin plugin in plugins) {
       plugin.registerExtensions(registerExtension);
@@ -46,27 +44,22 @@
   }
 
   /**
-   * Register an extension point being defined by the given [plugin] with the
-   * given simple [identifier] and [validateExtension].
+   * Register the given [extensionPoint].
    */
-  ExtensionPoint registerExtensionPoint(
-      Plugin plugin, String identifier, ValidateExtension validateExtension) {
-    String uniqueIdentifier = Plugin.buildUniqueIdentifier(plugin, identifier);
+  void registerExtensionPoint(ExtensionPoint extensionPoint) {
+    String uniqueIdentifier = extensionPoint.uniqueIdentifier;
     if (extensionPoints.containsKey(uniqueIdentifier)) {
       throw new ExtensionError(
-          'There is already an extension point with the id "$identifier"');
+          'There is already an extension point with the id "$uniqueIdentifier"');
     }
-    ExtensionPointImpl extensionPoint =
-        new ExtensionPointImpl(plugin, identifier, validateExtension);
-    extensionPoints[uniqueIdentifier] = extensionPoint;
-    return extensionPoint;
+    extensionPoints[uniqueIdentifier] = extensionPoint as ExtensionPointImpl;
   }
 }
 
 /**
  * A concrete representation of an extension point.
  */
-class ExtensionPointImpl implements ExtensionPoint {
+class ExtensionPointImpl<E> implements ExtensionPoint<E> {
   @override
   final Plugin plugin;
 
@@ -81,7 +74,7 @@
   /**
    * The list of extensions to this extension point.
    */
-  final List<Object> _extensions = <Object>[];
+  final List<E> _extensions = <E>[];
 
   /**
    * Initialize a newly create extension point to belong to the given [plugin]
@@ -96,7 +89,7 @@
    * Return a list containing all of the extensions that have been registered
    * for this extension point.
    */
-  List<Object> get extensions => new UnmodifiableListView(_extensions);
+  List<E> get extensions => new UnmodifiableListView<E>(_extensions);
 
   /**
    * Return the identifier used to uniquely identify this extension point. The
@@ -114,6 +107,6 @@
     if (validateExtension != null) {
       validateExtension(extension);
     }
-    _extensions.add(extension);
+    _extensions.add(extension as E);
   }
 }
diff --git a/pubspec.yaml b/pubspec.yaml
index 886bd86..92f0932 100755
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: plugin
-version: 0.1.0
+version: 0.2.0
 author: Dart Team <misc@dartlang.org>
 description: Support for building plugins.
 homepage: https://github.com/dart-lang/plugin
diff --git a/test/plugin_impl_test.dart b/test/plugin_impl_test.dart
index 5d2902f..c8603af 100644
--- a/test/plugin_impl_test.dart
+++ b/test/plugin_impl_test.dart
@@ -26,8 +26,8 @@
     test('registerExtension - valid', () {
       Plugin plugin = new TestPlugin('plugin');
       ExtensionManagerImpl manager = new ExtensionManagerImpl();
-      ExtensionPoint point =
-          manager.registerExtensionPoint(plugin, 'point', null);
+      ExtensionPoint point = new ExtensionPoint(plugin, 'point', null);
+      manager.registerExtensionPoint(point);
       expect(point, isNotNull);
       Object extension = 'extension';
       manager.registerExtension('plugin.point', extension);
@@ -48,22 +48,24 @@
       Plugin plugin1 = new TestPlugin('plugin1');
       Plugin plugin2 = new TestPlugin('plugin2');
       ExtensionManagerImpl manager = new ExtensionManagerImpl();
-      expect(
-          manager.registerExtensionPoint(plugin1, 'point1', null), isNotNull);
-      expect(
-          manager.registerExtensionPoint(plugin1, 'point2', null), isNotNull);
-      expect(
-          manager.registerExtensionPoint(plugin2, 'point1', null), isNotNull);
-      expect(
-          manager.registerExtensionPoint(plugin2, 'point2', null), isNotNull);
+      manager
+          .registerExtensionPoint(new ExtensionPoint(plugin1, 'point1', null));
+      manager
+          .registerExtensionPoint(new ExtensionPoint(plugin1, 'point2', null));
+      manager
+          .registerExtensionPoint(new ExtensionPoint(plugin2, 'point1', null));
+      manager
+          .registerExtensionPoint(new ExtensionPoint(plugin2, 'point2', null));
     });
 
     test('registerExtensionPoint - conflicting - same plugin', () {
       Plugin plugin1 = new TestPlugin('plugin1');
       ExtensionManagerImpl manager = new ExtensionManagerImpl();
+      manager
+          .registerExtensionPoint(new ExtensionPoint(plugin1, 'point1', null));
       expect(
-          manager.registerExtensionPoint(plugin1, 'point1', null), isNotNull);
-      expect(() => manager.registerExtensionPoint(plugin1, 'point1', null),
+          () => manager.registerExtensionPoint(
+              new ExtensionPoint(plugin1, 'point1', null)),
           throwsA(new isInstanceOf<ExtensionError>()));
     });
 
@@ -71,9 +73,11 @@
       Plugin plugin1 = new TestPlugin('plugin1');
       Plugin plugin2 = new TestPlugin('plugin1');
       ExtensionManagerImpl manager = new ExtensionManagerImpl();
+      manager
+          .registerExtensionPoint(new ExtensionPoint(plugin1, 'point1', null));
       expect(
-          manager.registerExtensionPoint(plugin1, 'point1', null), isNotNull);
-      expect(() => manager.registerExtensionPoint(plugin2, 'point1', null),
+          () => manager.registerExtensionPoint(
+              new ExtensionPoint(plugin2, 'point1', null)),
           throwsA(new isInstanceOf<ExtensionError>()));
     });
   });
@@ -117,8 +121,8 @@
 
     test('add - with validator - valid', () {
       Plugin plugin = new TestPlugin('plugin');
-      ExtensionPointImpl point = new ExtensionPointImpl(plugin, 'point',
-          (Object extension) {
+      ExtensionPointImpl point =
+          new ExtensionPointImpl(plugin, 'point', (Object extension) {
         if (extension is! String) {
           throw new ExtensionError('');
         }
@@ -128,8 +132,8 @@
 
     test('add - with validator - invalid', () {
       Plugin plugin = new TestPlugin('plugin');
-      ExtensionPointImpl point = new ExtensionPointImpl(plugin, 'point',
-          (Object extension) {
+      ExtensionPointImpl point =
+          new ExtensionPointImpl(plugin, 'point', (Object extension) {
         if (extension is! String) {
           throw new ExtensionError('');
         }
