 		if articles.anyArticleIsRead() {
 			menu.addItem(markUnreadMenuItem(articles))
 		}
-		if menu.items.count > 0 {
-			menu.addItem(NSMenuItem.separator())
-		}
-
 		if articles.anyArticleIsUnstarred() {
 			menu.addItem(markStarredMenuItem(articles))
 		}
 		if articles.anyArticleIsStarred() {
 			menu.addItem(markUnstarredMenuItem(articles))
 		}
-		if menu.items.count > 0 && !menu.items.last!.isSeparatorItem {
-			menu.addItem(NSMenuItem.separator())
-		}
+		menu.addSeparatorIfNeeded()
 
 		if articles.count == 1, let link = articles.first!.preferredLink {
 			menu.addItem(openInBrowserMenuItem(link))
+		}
+
+		if let sharingMenu = shareMenu(for: articles) {
+			menu.addSeparatorIfNeeded()
+			let menuItem = NSMenuItem(title: sharingMenu.title, action: nil, keyEquivalent: "")
+			menuItem.submenu = sharingMenu
+			menu.addItem(menuItem)
+		}
+
+		return menu
+	}
+
+	func shareMenu(for articles: [Article]) -> NSMenu? {
+		if articles.isEmpty {
+			return nil
+		}
+
+		let items = articles.map { ArticlePasteboardWriter(article: $0) }
+		let standardServices = NSSharingService.sharingServices(forItems: items)
+		let customServices = SharingServicePickerDelegate.customSharingServices(for: items)
+		let services = standardServices + customServices
+		if services.isEmpty {
+			return nil
+		}
+
+		let menu = NSMenu(title: NSLocalizedString("Share", comment: "Share menu name"))
+		services.forEach { (service) in
+			let menuItem = NSMenuItem(title: service.menuItemTitle, action: #selector(performShareServiceFromContextualMenu(_:)), keyEquivalent: "")
+			menuItem.image = service.image
+			let sharingCommandInfo = SharingCommandInfo(service: service, items: items)
+			menuItem.representedObject = sharingCommandInfo
+			menu.addItem(menuItem)
 		}
 
 		return menu

		return item
	}
}

		}
		Browser.open(urlString, inBackground: false)
	}

	@objc func performShareServiceFromContextualMenu(_ sender: Any?) {
		guard let menuItem = sender as? NSMenuItem, let sharingCommandInfo = menuItem.representedObject as? SharingCommandInfo else {
			return
		}
		sharingCommandInfo.perform()
	}
}


