 
 	func writableTypes(for pasteboard: NSPasteboard) -> [NSPasteboard.PasteboardType] {
 
-		// TODO: add more types
-
-		var types = [NSPasteboard.PasteboardType]()
-
-		if let _ = article.title {
-			types += [.string]
-		}
+		var types = [ArticlePasteboardWriter.articleUTIType, .string]
+
 		if let link = article.preferredLink, let _ = URL(string: link) {
 			types += [.URL]
 		}
-
-		return types // TODO: add types
+		types += [.html, ArticlePasteboardWriter.articleUTIInternalType]
+
+		return types
 	}
 
 	func pasteboardPropertyList(forType type: NSPasteboard.PasteboardType) -> Any? {
 
-		// TODO: write data for all types declared in writableTypes.
-
 		let plist: Any?
 
 		switch type {
+		case .html:
+			return renderedHTML
 		case .string:
-			plist = article.title ?? ""
+			plist = plainText()
 		case .URL:
-			plist = article.preferredLink ?? ""
+			return article.preferredLink ?? ""
+		case ArticlePasteboardWriter.articleUTIType:
+			plist = exportDictionary()
+		case ArticlePasteboardWriter.articleUTIInternalType:
+			plist = internalDictionary()
 		default:
 			plist = nil
 		}

		return plist
	}
}

@objc final class ArticlePasteboardWriter: NSObject, NSPasteboardWriting {

	private let article: Article
	static let articleUTI = "com.ranchero.article"
	static let articleUTIType = NSPasteboard.PasteboardType(rawValue: articleUTI)
	static let articleUTIInternal = "com.ranchero.evergreen.internal.article"
	static let articleUTIInternalType = NSPasteboard.PasteboardType(rawValue: articleUTIInternal)

	private lazy var renderedHTML: String = {
		let articleRenderer = ArticleRenderer(article: article, style: ArticleStylesManager.shared.currentStyle)
		return articleRenderer.html
	}()

	init(article: Article) {

