diff --git a/pkgs/markdown/lib/src/document.dart b/pkgs/markdown/lib/src/document.dart
index e8b470b..fc5fa82 100644
--- a/pkgs/markdown/lib/src/document.dart
+++ b/pkgs/markdown/lib/src/document.dart
@@ -8,23 +8,25 @@
 /// Maintains the context needed to parse a Markdown document.
 class Document {
   final Map<String, Link> refLinks = {};
-  List<BlockSyntax> blockSyntaxes;
-  List<InlineSyntax> inlineSyntaxes;
+  Iterable<BlockSyntax> blockSyntaxes;
+  Iterable<InlineSyntax> inlineSyntaxes;
   ExtensionSet extensionSet;
   Resolver linkResolver;
   Resolver imageLinkResolver;
 
   Document(
-      {this.blockSyntaxes,
-      this.inlineSyntaxes,
-      extensionSet,
+      {Iterable<BlockSyntax> blockSyntaxes,
+      Iterable<InlineSyntax> inlineSyntaxes,
+      ExtensionSet extensionSet,
       this.linkResolver,
       this.imageLinkResolver}) {
-    blockSyntaxes ??= [];
-    inlineSyntaxes ??= [];
     extensionSet ??= ExtensionSet.commonMark;
-    blockSyntaxes.addAll(extensionSet.blockSyntaxes);
-    inlineSyntaxes.addAll(extensionSet.inlineSyntaxes);
+    this.blockSyntaxes = new Set()
+      ..addAll(blockSyntaxes ?? [])
+      ..addAll(extensionSet.blockSyntaxes);
+    this.inlineSyntaxes = new Set()
+      ..addAll(inlineSyntaxes ?? [])
+      ..addAll(extensionSet.inlineSyntaxes);
   }
 
   parseRefLinks(List<String> lines) {
diff --git a/pkgs/markdown/lib/src/html_renderer.dart b/pkgs/markdown/lib/src/html_renderer.dart
index 399f992..aa17d5e 100644
--- a/pkgs/markdown/lib/src/html_renderer.dart
+++ b/pkgs/markdown/lib/src/html_renderer.dart
@@ -13,8 +13,8 @@
 
 /// Converts the given string of markdown to HTML.
 String markdownToHtml(String markdown,
-    {List<BlockSyntax> blockSyntaxes,
-    List<InlineSyntax> inlineSyntaxes,
+    {Iterable<BlockSyntax> blockSyntaxes,
+    Iterable<InlineSyntax> inlineSyntaxes,
     ExtensionSet extensionSet,
     Resolver linkResolver,
     Resolver imageLinkResolver,
diff --git a/pkgs/markdown/test/util.dart b/pkgs/markdown/test/util.dart
index e9bd5a8..dfec203 100644
--- a/pkgs/markdown/test/util.dart
+++ b/pkgs/markdown/test/util.dart
@@ -26,25 +26,18 @@
 
 // Locate the "test" directory. Use mirrors so that this works with the test
 // package, which loads this suite into an isolate.
-String get _testDir => p.dirname(currentMirrorSystem()
-      .findLibrary(#markdown.test.util)
-      .uri
-      .path);
+String get _testDir =>
+    p.dirname(currentMirrorSystem().findLibrary(#markdown.test.util).uri.path);
 
 void testFile(String file,
-    {List<BlockSyntax> blockSyntaxes,
-    List<InlineSyntax> inlineSyntaxes}) =>
-  testUnitFile(
-      file,
-      new File(p.join(_testDir, file)),
-      blockSyntaxes: blockSyntaxes,
-      inlineSyntaxes: inlineSyntaxes);
+        {Iterable<BlockSyntax> blockSyntaxes,
+        Iterable<InlineSyntax> inlineSyntaxes}) =>
+    testUnitFile(file, new File(p.join(_testDir, file)),
+        blockSyntaxes: blockSyntaxes, inlineSyntaxes: inlineSyntaxes);
 
-void testUnitFile(
-    String directory,
-    File entry,
-    {List<BlockSyntax> blockSyntaxes,
-    List<InlineSyntax> inlineSyntaxes}) {
+void testUnitFile(String directory, File entry,
+    {Iterable<BlockSyntax> blockSyntaxes,
+    Iterable<InlineSyntax> inlineSyntaxes}) {
   group('$directory ${p.basename(entry.path)}', () {
     var lines = entry.readAsLinesSync();
 
@@ -76,23 +69,15 @@
         expectedOutput += lines[i] + "\n";
       }
 
-      validateCore(
-          description,
-          input,
-          expectedOutput,
-          blockSyntaxes: blockSyntaxes,
-          inlineSyntaxes: inlineSyntaxes
-          );
+      validateCore(description, input, expectedOutput,
+          blockSyntaxes: blockSyntaxes, inlineSyntaxes: inlineSyntaxes);
     }
   });
 }
 
-void validateCore(
-    String description,
-    String markdown,
-    String html,
-    {List<BlockSyntax> blockSyntaxes,
-    List<InlineSyntax> inlineSyntaxes,
+void validateCore(String description, String markdown, String html,
+    {Iterable<BlockSyntax> blockSyntaxes,
+    Iterable<InlineSyntax> inlineSyntaxes,
     Resolver linkResolver,
     Resolver imageLinkResolver,
     bool inlineOnly: false}) {
