     elements.append(contentsOf: customElements)
     elements.append(contentsOf: unescapingElements)
     elements.forEach { element in
-      if automaticLinkDetectionEnabled || type(of: element) != MarkdownAutomaticLink.self {
-        element.parse(attributedString)
-      }
+      element.parse(attributedString)
     }
     return attributedString
   }
 
+  fileprivate func updateDefaultElements() {
+    let pairs: [(EnabledElements, MarkdownElement)] = [
+      (.automaticLink, automaticLink),
+      (.header, header),
+      (.list, list),
+      (.quote, quote),
+      (.link, link),
+      (.bold, bold),
+      (.italic, italic),
+      (.code, code),
+      ]
+    defaultElements = pairs.filter({ (enabled, _) in
+      enabledElements.contains(enabled) })
+      .map({ (_, element) in
+        element })
+  }
+
 }

  fileprivate var unescaping = MarkdownUnescaping()

  // MARK: Configuration
  /// Enables or disables detection of URLs even without Markdown format
  open var automaticLinkDetectionEnabled: Bool = true
  open let font: UIFont

  // MARK: Initializer
  public init(font: UIFont = UIFont.systemFont(ofSize: UIFont.smallSystemFontSize),
              automaticLinkDetectionEnabled: Bool = true,
              customElements: [MarkdownElement] = []) {
    self.font = font


    italic = MarkdownItalic(font: font)
    code = MarkdownCode(font: font)

    self.escapingElements = [codeEscaping, escaping]
    self.unescapingElements = [code, unescaping]
    self.customElements = customElements
    self.enabledElements = enabledElements
    updateDefaultElements()
  }

  // MARK: Element Extensibility
