Bug 255834 - port Thunderbird RSS/Atom reader to SeaMonkey
authorIan Neal <iann_cvs@blueyonder.co.uk>
Tue, 04 Nov 2008 17:42:25 +0000
changeset 817 3800bcea163a11767d9c7492164e576213fc15ec
parent 816 13d566bc917639757cf5df84f9e71d406ebae39f
child 1004 a79b923a9cba395cb3911b27c9599ffb8c997caf
push idunknown
push userunknown
push dateunknown
bugs255834
Bug 255834 - port Thunderbird RSS/Atom reader to SeaMonkey r=neil sr=bienvenu
mail/base/content/mailCommands.js
mail/base/content/mailContextMenus.js
mail/base/content/mailWindowOverlay.js
mail/base/content/mailWindowOverlay.xul
mail/extensions/Makefile.in
mail/extensions/newsblog/Makefile.in
mail/extensions/newsblog/content/Feed.js
mail/extensions/newsblog/content/FeedItem.js
mail/extensions/newsblog/content/am-newsblog.js
mail/extensions/newsblog/content/am-newsblog.xul
mail/extensions/newsblog/content/debug-utils.js
mail/extensions/newsblog/content/edittree.xml
mail/extensions/newsblog/content/feed-parser.js
mail/extensions/newsblog/content/feed-properties.js
mail/extensions/newsblog/content/feed-properties.xul
mail/extensions/newsblog/content/feed-subscriptions.js
mail/extensions/newsblog/content/feed-subscriptions.xul
mail/extensions/newsblog/content/file-utils.js
mail/extensions/newsblog/content/toolbar-icon.xul
mail/extensions/newsblog/content/utils.js
mail/extensions/newsblog/jar.mn
mail/extensions/newsblog/js/newsblog.js
mail/extensions/newsblog/rss.rdf
mail/locales/en-US/chrome/messenger-newsblog/newsblog.dtd
mail/locales/jar.mn
mail/themes/pinstripe/mail/folderMenus.css
mail/themes/pinstripe/mail/folderPane.css
mail/themes/pinstripe/mail/jar.mn
mail/themes/pinstripe/mail/newsblog/feed-subscriptions.css
mail/themes/pinstripe/mail/newsblog/newsBlogOverlay.css
mail/themes/qute/mail/folderMenus.css
mail/themes/qute/mail/folderPane.css
mail/themes/qute/mail/jar.mn
mail/themes/qute/mail/newsblog/feed-subscriptions.css
mail/themes/qute/mail/newsblog/newsBlogOverlay.css
mailnews/base/prefs/resources/content/pref-mailnews.js
mailnews/base/prefs/resources/content/pref-mailnews.xul
mailnews/base/resources/content/mailCommands.js
mailnews/base/resources/content/mailContextMenus.js
mailnews/base/resources/content/mailWindowOverlay.js
mailnews/base/resources/content/mailWindowOverlay.xul
mailnews/base/resources/content/msgMail3PaneWindow.js
mailnews/base/resources/content/start.xhtml
mailnews/extensions/Makefile.in
mailnews/extensions/newsblog/Makefile.in
mailnews/extensions/newsblog/content/Feed.js
mailnews/extensions/newsblog/content/FeedItem.js
mailnews/extensions/newsblog/content/am-newsblog.js
mailnews/extensions/newsblog/content/am-newsblog.xul
mailnews/extensions/newsblog/content/debug-utils.js
mailnews/extensions/newsblog/content/edittree.xml
mailnews/extensions/newsblog/content/feed-parser.js
mailnews/extensions/newsblog/content/feed-properties.js
mailnews/extensions/newsblog/content/feed-properties.xul
mailnews/extensions/newsblog/content/feed-subscriptions.js
mailnews/extensions/newsblog/content/feed-subscriptions.xul
mailnews/extensions/newsblog/content/file-utils.js
mailnews/extensions/newsblog/content/newsblogOverlay.js
mailnews/extensions/newsblog/content/utils.js
mailnews/extensions/newsblog/jar.mn
mailnews/extensions/newsblog/js/newsblog.js
mailnews/extensions/newsblog/rss.rdf
mailnews/makefiles.sh
suite/common/defaultClientDialog.xul
suite/installer/Makefile.in
suite/installer/windows/packages
suite/locales/en-US/chrome/common/defaultClientDialog.dtd
suite/locales/en-US/chrome/mailnews/messenger.properties
suite/locales/en-US/chrome/mailnews/newsblog/am-newsblog.dtd
suite/locales/en-US/chrome/mailnews/newsblog/am-newsblog.properties
suite/locales/en-US/chrome/mailnews/newsblog/feed-properties.dtd
suite/locales/en-US/chrome/mailnews/newsblog/feed-subscriptions.dtd
suite/locales/en-US/chrome/mailnews/newsblog/newsblog.properties
suite/locales/en-US/chrome/mailnews/pref/pref-mailnews.dtd
suite/locales/en-US/chrome/mailnews/start.dtd
suite/locales/jar.mn
suite/shell/public/nsIShellService.idl
suite/shell/src/nsSetDefault.js
suite/shell/src/nsWindowsShellService.cpp
suite/themes/classic/jar.mn
suite/themes/classic/messenger/accountCentral.css
suite/themes/classic/messenger/folderMenus.css
suite/themes/classic/messenger/folderPane.css
suite/themes/classic/messenger/messageBody.css
suite/themes/classic/messenger/newsblog/feed-subscriptions.css
suite/themes/classic/messenger/threadPane.css
suite/themes/modern/global/textbox.css
suite/themes/modern/jar.mn
suite/themes/modern/messenger/accountCentral.css
suite/themes/modern/messenger/folderMenus.css
suite/themes/modern/messenger/folderPane.css
suite/themes/modern/messenger/messageBody.css
suite/themes/modern/messenger/newsblog/feed-subscriptions.css
suite/themes/modern/messenger/threadPane.css
--- a/mail/base/content/mailCommands.js
+++ b/mail/base/content/mailCommands.js
@@ -250,20 +250,18 @@ function ComposeMessage(type, format, fo
   {
     uri = "";
     for (var i = 0; i < messageArray.length; ++i)
     {
       var messageUri = messageArray[i];
 
       var hdr = messenger.msgHdrFromURI(messageUri);
       identity = getIdentityForHeader(hdr, type);
-      var messageID = hdr.messageId;
-      var messageIDScheme = messageID ? messageID.split(":")[0] : "";
-      if (messageIDScheme && (messageIDScheme == 'http' || messageIDScheme == 'https') &&  "openComposeWindowForRSSArticle" in this)
-        openComposeWindowForRSSArticle(messageID, hdr, type);
+      if (/^https?:/.test(hdr.messageId))
+        openComposeWindowForRSSArticle(hdr, type);
       else if (type == msgComposeType.Reply ||
                type == msgComposeType.ReplyAll ||
                type == msgComposeType.ReplyToList ||
                type == msgComposeType.ForwardInline ||
                type == msgComposeType.ReplyToGroup ||
                type == msgComposeType.ReplyToSender ||
                type == msgComposeType.ReplyToSenderAndGroup ||
                type == msgComposeType.Template ||
--- a/mail/base/content/mailContextMenus.js
+++ b/mail/base/content/mailContextMenus.js
@@ -502,20 +502,25 @@ function fillFolderPaneContextMenu()
 
   var numSelected = folders.length;
   var folder = folders[0];
   var isVirtualFolder = folder ? folder.flags & MSG_FOLDER_FLAG_VIRTUAL : false;
 
   var isServer = folder.isServer;
   var serverType = folder.server.type;
   var specialFolder = getSpecialFolderString(folder);
-  var canSubscribeToFolder = (serverType == "nntp") || (serverType == "imap");
+  var canSubscribeToFolder = (serverType == "nntp") ||
+                             (serverType == "imap") ||
+                             (serverType == "rss");
   var isNewsgroup = !isServer && serverType == 'nntp';
   var isMailFolder = !isServer && serverType != 'nntp';
-  var canGetMessages = (isServer && serverType != "none") || isNewsgroup || (serverType == "rss");
+  var canGetMessages =
+    (isServer && (serverType != "nntp") && (serverType != "none")) ||
+    isNewsgroup ||
+    ((serverType == "rss") && (specialFolder != 'Trash'));
 
   if (!isServer)
   {
     ShowMenuItem("folderPaneContext-settings", false);
     ShowMenuItem("folderPaneContext-properties", true);
     EnableMenuItem("folderPaneContext-properties", true);
   }
   else
@@ -540,21 +545,17 @@ function fillFolderPaneContextMenu()
   EnableMenuItem("folderPaneContext-emptyJunk", true);
 
   var showSendUnsentMessages = (numSelected <= 1) && (specialFolder == 'Unsent Messages');
   ShowMenuItem("folderPaneContext-sendUnsentMessages", showSendUnsentMessages);
   if (showSendUnsentMessages) 
     EnableMenuItem("folderPaneContext-sendUnsentMessages", IsSendUnsentMsgsEnabled(folder));
 
   ShowMenuItem("folderPaneContext-subscribe", (numSelected <= 1) && canSubscribeToFolder && !isVirtualFolder);
-  EnableMenuItem("folderPaneContext-subscribe", !isVirtualFolder);
-
-  // XXX: Hack for RSS servers...
-  ShowMenuItem("folderPaneContext-rssSubscribe", (numSelected <= 1) && (serverType == "rss"));
-  EnableMenuItem("folderPaneContext-rssSubscribe", true);
+  EnableMenuItem("folderPaneContext-subscribe", true);
 
   // News folder context menu =============================================
   ShowMenuItem("folderPaneContext-newsUnsubscribe", (numSelected <= 1) && canSubscribeToFolder && isNewsgroup);
   EnableMenuItem("folderPaneContext-newsUnsubscribe", true);
   ShowMenuItem("folderPaneContext-markNewsgroupAllRead", (numSelected <= 1) && isNewsgroup);
   EnableMenuItem("folderPaneContext-markNewsgroupAllRead", true);
   // End of News folder context menu =======================================
 
--- a/mail/base/content/mailWindowOverlay.js
+++ b/mail/base/content/mailWindowOverlay.js
@@ -1212,18 +1212,17 @@ function getDestinationFolder(preselecte
     return destinationFolder;
 }
 
 /** Open subscribe window. */
 function MsgSubscribe()
 {
   var preselectedFolder = GetFirstSelectedMsgFolder();
 
-  var server = (preselectedFolder) ? preselectedFolder.server : null;
-  if (server && server.type == "rss")
+  if (preselectedFolder && preselectedFolder.server.type == "rss")
     openSubscriptionsDialog(preselectedFolder); // open feed subscription dialog
   else
     Subscribe(preselectedFolder); // open imap/nntp subscription dialog
 }
 
 function ConfirmUnsubscribe(folder)
 {
   if (!gMessengerBundle)
--- a/mail/base/content/mailWindowOverlay.xul
+++ b/mail/base/content/mailWindowOverlay.xul
@@ -57,16 +57,17 @@
   %brandDTD;
 ]>
 
 <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
 <script type="application/x-javascript" src="chrome://messenger/content/mailCommands.js"/>
 <script type="application/x-javascript" src="chrome://messenger/content/junkCommands.js"/>
 <script type="application/x-javascript" src="chrome://messenger/content/mailWindowOverlay.js"/>
+<script type="application/x-javascript" src="chrome://messenger-newsblog/content/newsblogOverlay.js"/>
 <script type="application/x-javascript" src="chrome://messenger/content/mail-offline.js"/>
 <script type="application/x-javascript" src="chrome://global/content/printUtils.js"/>
 <script type="application/x-javascript" src="chrome://messenger/content/msgViewPickerOverlay.js"/>
 <script type="application/x-javascript" src="chrome://global/content/viewZoomOverlay.js"/>
 
 <stringbundleset id="stringbundleset">
   <stringbundle id="bundle_messenger" src="chrome://messenger/locale/messenger.properties"/>
   <stringbundle id="bundle_offlinePrompts" src="chrome://messenger/locale/offline.properties"/>
--- a/mail/extensions/Makefile.in
+++ b/mail/extensions/Makefile.in
@@ -37,17 +37,17 @@
 
 DEPTH		= ../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
-DIRS = newsblog
+DIRS = $(NULL)
 
 ifdef MOZ_PSM
 BUILD_SMIME=1
 endif
 
 ifdef BUILD_SMIME
 DIRS		+= smime
 endif
deleted file mode 100755
--- a/mail/locales/en-US/chrome/messenger-newsblog/newsblog.dtd
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- folder pane context menu item -->
-<!ENTITY folderContextRSSSubscribe.label    "Subscribe…">
-<!ENTITY folderContextRSSSubscribe.accesskey   "b">
-
-
--- a/mail/locales/jar.mn
+++ b/mail/locales/jar.mn
@@ -127,17 +127,16 @@
   locale/@AB_CD@/messenger/preferences/notifications.dtd                (%chrome/messenger/preferences/notifications.dtd)
   locale/@AB_CD@/messenger/preferences/preferences.properties           (%chrome/messenger/preferences/preferences.properties)
   locale/@AB_CD@/messenger/migration/migration.dtd                      (%chrome/messenger/migration/migration.dtd)
   locale/@AB_CD@/messenger/migration/migration.properties               (%chrome/messenger/migration/migration.properties)
   locale/@AB_CD@/messenger/search/searchIntegrationDialogWin.dtd        (%chrome/messenger/search/searchIntegrationDialogWin.dtd)
 % locale messenger-mapi @AB_CD@ %locale/@AB_CD@/messenger-mapi/
   locale/@AB_CD@/messenger-mapi/mapi.properties                         (%chrome/messenger-mapi/mapi.properties)
 % locale messenger-newsblog @AB_CD@ %locale/@AB_CD@/messenger-newsblog/
-  locale/@AB_CD@/messenger-newsblog/newsblog.dtd                        (%chrome/messenger-newsblog/newsblog.dtd)
   locale/@AB_CD@/messenger-newsblog/newsblog.properties                 (%chrome/messenger-newsblog/newsblog.properties)
   locale/@AB_CD@/messenger-newsblog/feed-subscriptions.dtd              (%chrome/messenger-newsblog/feed-subscriptions.dtd)
   locale/@AB_CD@/messenger-newsblog/feed-properties.dtd                 (%chrome/messenger-newsblog/feed-properties.dtd)
   locale/@AB_CD@/messenger-newsblog/am-newsblog.properties              (%chrome/messenger-newsblog/am-newsblog.properties)
   locale/@AB_CD@/messenger-newsblog/am-newsblog.dtd                     (%chrome/messenger-newsblog/am-newsblog.dtd)
 % locale messenger-smime @AB_CD@ %locale/@AB_CD@/messenger-smime/
   locale/@AB_CD@/messenger-smime/msgCompSMIMEOverlay.dtd                (%chrome/messenger-smime/msgCompSMIMEOverlay.dtd)
   locale/@AB_CD@/messenger-smime/msgCompSMIMEOverlay.properties         (%chrome/messenger-smime/msgCompSMIMEOverlay.properties)
--- a/mail/themes/pinstripe/mail/folderMenus.css
+++ b/mail/themes/pinstripe/mail/folderMenus.css
@@ -42,71 +42,82 @@
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 
 /* ::::: folder icons for menus ::::: */
 
 .folderMenuItem {
   list-style-image: url("chrome://messenger/skin/icons/folder-closed.png");
 }
 
+/* News folders */
+.folderMenuItem[ServerType="nntp"] {
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
+}
+
+/* Feed folders */
+.folderMenuItem[ServerType="rss"] {
+  list-style-image: url("chrome://messenger/skin/icons/message-news.png");
+}
+
 /* ..... special folders ..... */
 
 .folderMenuItem[SpecialFolder="Inbox"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox.png");
 }
 
 .folderMenuItem[SpecialFolder="Sent"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-sent.png");
 }
 
-
 .folderMenuItem[SpecialFolder="Drafts"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-draft.png");
 }
 
 .folderMenuItem[SpecialFolder="Templates"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-template.png");
 }
 
 .folderMenuItem[SpecialFolder="Junk"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-junk.png");
 }
 
 .folderMenuItem[SpecialFolder="Trash"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-trash.png");
 }
 
+/* ..... servers ..... */
+
 .folderMenuItem[IsServer="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
 }
 
 .folderMenuItem[IsServer="true"][open="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
 }
 
-/* IMAP folders */
+/* IMAP servers */
 .folderMenuItem[IsServer="true"][ServerType="imap"][IsSecure="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.png");
 }
 
-/* POP3 folders */
+/* POP3 servers */
 .folderMenuItem[IsServer="true"][ServerType="pop3"][IsSecure="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.png");
 }
 
 /* Local Servers */
 .folderMenuItem[IsServer="true"][ServerType="none"] {
   list-style-image: url("chrome://messenger/skin/icons/server-local.png");
 }
 
-/* News folders */
-.folderMenuItem[ServerType="nntp"] {
-  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
+/* News servers */
+.folderMenuItem[IsServer="true"][ServerType="nntp"] {
+  list-style-image: url("chrome://messenger/skin/icons/server-news.png");
 }
 
 .folderMenuItem[IsServer="true"][ServerType="nntp"][IsSecure="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-news-lock.png");
 }
 
-.folderMenuItem[IsServer="true"][ServerType="nntp"] {
-  list-style-image: url("chrome://messenger/skin/icons/server-news.png");
+/* Feed servers */
+.folderMenuItem[IsServer="true"][ServerType="rss"] {
+  list-style-image: url("chrome://messenger/skin/icons/server-newsblog.png");
 }
-
--- a/mail/themes/pinstripe/mail/folderPane.css
+++ b/mail/themes/pinstripe/mail/folderPane.css
@@ -11,16 +11,28 @@ treechildren::-moz-tree-image(folderName
   margin-right: 2px;
   list-style-image: url("chrome://messenger/skin/icons/folder-closed.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, newMessages-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-closed.png");
 }
 
+/* ..... News Folders ..... */
+.tabmail-tab[type="folder"][ServerType="nntp"] .tab-icon-image ,
+treechildren::-moz-tree-image(folderNameCol, serverType-nntp) {
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
+}
+
+/* ..... Feed Folders ..... */
+.tabmail-tab[type="folder"][ServerType="rss"] .tab-icon-image ,
+treechildren::-moz-tree-image(folderNameCol, serverType-rss) {
+  list-style-image: url("chrome://messenger/skin/icons/message-news.png");
+}
+
 /* ..... Inbox ..... */
 .tabmail-tab[type="folder"][SpecialFolder="Inbox"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Inbox) {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox.png");
@@ -57,78 +69,78 @@ treechildren::-moz-tree-image(folderName
 }
 
 /* ..... Trash ..... */
 .tabmail-tab[type="folder"][SpecialFolder="Trash"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Trash) {
   list-style-image: url("chrome://messenger/skin/icons/folder-trash.png");
 }
 
-treechildren::-moz-tree-image(folderNameCol, isServer-true) {
-    list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
-}
-
-treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true) {
-  list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
-}
-
-treechildren::-moz-tree-cell-text(folderNameCol, biffState-NewMail, isServer-true),
-treechildren::-moz-tree-cell-text(folderNameCol, newMessages-true),
-treechildren::-moz-tree-cell-text(folderNameCol, specialFolder-Inbox, newMessages-true) {
-  font-weight: bold;
-  color: blue;
-}
-
-treechildren::-moz-tree-cell(folderNameCol, newMessages-true),
-treechildren::-moz-tree-cell(folderNameCol, specialFolder-Inbox, newMessages-true) {
-
+/* ..... Saved Search Folder ..... */
+.tabmail-tab[type="folder"][SpecialFolder="Virtual"] .tab-icon-image ,
+treechildren::-moz-tree-image(folderNameCol, specialFolder-Virtual) {
+  list-style-image: url("chrome://messenger/skin/icons/saved-search-folder.png");
 }
 
 /* Disable Shared Folder Rule for now
 treechildren::-moz-tree-image(folderNameCol, imapShared-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-share.png");
 }
 */
 
 /* ..... Server Folders ..... */
 
+treechildren::-moz-tree-image(folderNameCol, isServer-true) {
+    list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
+}
+
+treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true) {
+  list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
+}
+
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-none) {
   list-style-image: url("chrome://messenger/skin/icons/server-local.png");
 }
 
 /* ..... News Folders ..... */
-.tabmail-tab[type="folder"][ServerType="nntp"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, serverType-nntp) {
-  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
-}
-
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-nntp) {
   list-style-image: url("chrome://messenger/skin/icons/server-news.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-news-lock.png");
 }
 
-/* ..... Saved Search Folder ..... */
-.tabmail-tab[type="folder"][SpecialFolder="Virtual"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, specialFolder-Virtual) {
-  list-style-image: url("chrome://messenger/skin/icons/saved-search-folder.png");
+/* ..... Feed Folders ..... */
+treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-rss) {
+  list-style-image: url("chrome://messenger/skin/icons/server-newsblog.png");
 }
 
 /* ::::: All Servers ::::: */
 
+treechildren::-moz-tree-cell-text(folderNameCol, biffState-NewMail, isServer-true),
+treechildren::-moz-tree-cell-text(folderNameCol, newMessages-true),
+treechildren::-moz-tree-cell-text(folderNameCol, specialFolder-Inbox, newMessages-true) {
+  font-weight: bold;
+  color: blue;
+}
+
+treechildren::-moz-tree-cell(folderNameCol, newMessages-true),
+treechildren::-moz-tree-cell(folderNameCol, specialFolder-Inbox, newMessages-true) {
+
+}
+
 treechildren::-moz-tree-cell-text(subfoldersHaveUnreadMessages-true) {
   font-weight: bold;
 }
 
 treechildren::-moz-tree-cell-text(hasUnreadMessages-true) {
   font-weight: bold;
 }
 
--- a/mail/themes/pinstripe/mail/jar.mn
+++ b/mail/themes/pinstripe/mail/jar.mn
@@ -78,17 +78,16 @@ classic.jar:
      skin/classic/messenger/messengercompose/right-button-base.png   (compose/right-button-base.png)
      skin/classic/messenger/messengercompose/right-button-disabled.png        (compose/right-button-disabled.png)
      skin/classic/messenger/messengercompose/right-button-pressed.png         (compose/right-button-pressed.png)
      skin/classic/messenger/messengercompose/small-button-base.png   (compose/small-button-base.png)
      skin/classic/messenger/messengercompose/small-button-disabled.png        (compose/small-button-disabled.png)
      skin/classic/messenger/messengercompose/small-button-pressed.png         (compose/small-button-pressed.png)
 % skin messenger-newsblog classic/1.0 %skin/classic/messenger-newsblog/
      skin/classic/messenger-newsblog/feed-subscriptions.css         (newsblog/feed-subscriptions.css)
-     skin/classic/messenger-newsblog/newsBlogOverlay.css            (newsblog/newsBlogOverlay.css)
      skin/classic/messenger-newsblog/icons/folder-search-rss.png    (newsblog/folder-search-rss.png)
      skin/classic/messenger/preferences/preferences.css             (preferences/preferences.css)
      skin/classic/messenger/preferences/mail-options.png            (preferences/mail-options.png)
      skin/classic/messenger/preferences/radio-selected-bg.png       (preferences/radio-selected-bg.png)
      skin/classic/messenger/smime/msgCompSMIMEOverlay.css           (smime/msgCompSMIMEOverlay.css)
      skin/classic/messenger/smime/msgHdrViewSMIMEOverlay.css        (smime/msgHdrViewSMIMEOverlay.css)
      skin/classic/messenger/smime/msgReadSMIMEOverlay.css           (smime/msgReadSMIMEOverlay.css)
      skin/classic/messenger/smime/msgReadSecurityInfo.css           (smime/msgReadSecurityInfo.css)
--- a/mail/themes/pinstripe/mail/newsblog/feed-subscriptions.css
+++ b/mail/themes/pinstripe/mail/newsblog/feed-subscriptions.css
@@ -57,16 +57,12 @@
 
 #rssFeedInfoBox {
   border: 1px solid ThreeDShadow;
   -moz-border-radius: 0px;
   margin: 4px;
   padding: 0px;
 }
 
-#rssFeedInfoBox textbox {
-  background-color: transparent;
-}
-
 #backgroundBox {
   background-color: #FFFFFF; 
   opacity: 0.5;
 }
deleted file mode 100644
--- a/mail/themes/pinstripe/mail/newsblog/newsBlogOverlay.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Thunderbird RSS Subscription CSS
- *
- * The Initial Developer of the Original Code is
- * The Mozilla Foundation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *   Scott MacGregor <mscott@mozilla.org>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ****** */
-
-/* ::::: Folder Pane icons :::::: */
-.tabmail-tab[type="folder"][ServerType="rss"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, serverType-rss),
-.folderMenuItem[ServerType="rss"] {
-  list-style-image: url("chrome://messenger/skin/icons/message-news.png");
-}
-
-treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-rss),
-.folderMenuItem[IsServer="true"][ServerType="rss"] {
-  list-style-image: url("chrome://messenger/skin/icons/server-newsblog.png");
-}
-
-.tabmail-tab[type="folder"][SpecialFolder="Trash"][ServerType="rss"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, specialFolder-Trash),
-.folderMenuItem[SpecialFolder="Trash"] {
-  list-style-image: url("chrome://messenger/skin/icons/folder-trash.png");
-}
-
-/* ..... Saved Search Folder, Hack to force the saved search artwork to show up for virtual folders in RSS accounts ..... */
-.tabmail-tab[type="folder"][SpecialFolder="Virtual"][ServerType="rss"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, serverType-rss, specialFolder-Virtual) {
-  list-style-image: url("chrome://messenger-newsblog/skin/icons/folder-search-rss.png");
-}
--- a/mail/themes/qute/mail/folderMenus.css
+++ b/mail/themes/qute/mail/folderMenus.css
@@ -47,16 +47,33 @@
   list-style-image: url("chrome://messenger/skin/icons/folder.png");
   -moz-image-region: rect(0 16px 16px 0);
 }
 
 .folderMenuItem[open="true"] {
   -moz-image-region: rect(0 32px 16px 16px);
 }
 
+/* Newsgroup */
+.folderMenuItem[ServerType="nntp"] {
+  -moz-image-region: rect(0 160px 16px 144px);
+}
+
+/* Feed */
+.folderMenuItem[ServerType="rss"] {
+  list-style-image: url("chrome://messenger-newsblog/skin/icons/rss-feed.png");
+  -moz-image-region: rect(0 16px 16px 0);
+}
+
+/* Resets list-style-image for Feed Trash and Virtual folders */
+.folderMenuItem[ServerType="rss"][SpecialFolder="Trash"],
+.folderMenuItem[ServerType="rss"][SpecialFolder="Virtual"] {
+  list-style-image: url("chrome://messenger/skin/icons/folder.png");
+}
+
 /* ..... special folders ..... */
 
 .folderMenuItem[SpecialFolder="Inbox"] {
   -moz-image-region: rect(0 48px 16px 32px);
 }
 
 .folderMenuItem[SpecialFolder="Sent"] {
   -moz-image-region: rect(0 64px 16px 48px);
@@ -81,16 +98,18 @@
 .folderMenuItem[SpecialFolder="Trash"] {
   -moz-image-region: rect(0 144px 16px 128px);
 }
 
 .folderMenuItem[SpecialFolder="Virtual"] {
   -moz-image-region: rect(0 176px 16px 160px);
 }
 
+/* ..... servers ..... */
+
 .folderMenuItem[IsServer="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server.png");
   -moz-image-region: rect(0 16px 16px 0);
 }
 
 .folderMenuItem[IsServer="true"][ServerType="imap"][IsSecure="true"],
 .folderMenuItem[IsServer="true"][ServerType="pop3"][IsSecure="true"] {
   -moz-image-region: rect(0 32px 16px 16px);
@@ -105,12 +124,12 @@
 .folderMenuItem[IsServer="true"][ServerType="nntp"] {
   -moz-image-region: rect(0 64px 16px 48px);
 }
 
 .folderMenuItem[IsServer="true"][ServerType="nntp"][IsSecure="true"] {
   -moz-image-region: rect(0 80px 16px 64px) !important;
 }
 
-/* Newsgroup */
-.folderMenuItem[ServerType="nntp"] {
-  -moz-image-region: rect(0 160px 16px 144px);
+/* Feed server */
+.folderMenuItem[IsServer="true"][ServerType="rss"] {
+  list-style-image: url("chrome://messenger-newsblog/skin/icons/server-rss.png");
 }
--- a/mail/themes/qute/mail/folderPane.css
+++ b/mail/themes/qute/mail/folderPane.css
@@ -22,96 +22,132 @@ treechildren::-moz-tree-image(folderName
 treechildren::-moz-tree-image(folderNameCol, selected, open) {
   -moz-image-region: rect(0 32px 16px 16px);
 }
 
 treechildren::-moz-tree-image(folderNameCol, selected, open, newMessages-true) {
   -moz-image-region: rect(16px 32px 32px 16px);
 }
 
+/* ..... Newsgroup ..... */
+
+.tabmail-tab[type="folder"][ServerType="nntp"] .tab-icon-image ,
+treechildren::-moz-tree-image(folderNameCol, serverType-nntp) {
+  -moz-image-region: rect(0 160px 16px 144px);
+}
+
+/* ..... Feed ..... */
+
+.tabmail-tab[type="folder"][ServerType="rss"] .tab-icon-image ,
+treechildren::-moz-tree-image(folderNameCol, serverType-rss) {
+  list-style-image: url("chrome://messenger-newsblog/skin/icons/rss-feed.png");
+  -moz-image-region: rect(0 16px 16px 0);
+}
+
+treechildren::-moz-tree-image(folderNameCol, serverType-rss, newMessages-true) {
+  -moz-image-region: rect(16px 16px 32px 0);
+}
+
+/* Resets list-style-image for Feed Trash and Virtual folders */
+
+.tabmail-tab[type="folder"][SpecialFolder="Trash"][ServerType="rss"] .tab-icon-image ,
+.tabmail-tab[type="folder"][SpecialFolder="Virtual"][ServerType="rss"] .tab-icon-image ,
+treechildren::-moz-tree-image(folderNameCol, serverType-rss, specialFolder-Trash),
+treechildren::-moz-tree-image(folderNameCol, serverType-rss, specialFolder-Virtual) {
+  list-style-image: url("chrome://messenger/skin/icons/folder.png");
+}
+
 /* ..... Inbox ..... */
+
 .tabmail-tab[type="folder"][SpecialFolder="Inbox"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Inbox) {
   -moz-image-region: rect(0 48px 16px 32px);
 }
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
   -moz-image-region: rect(16px 48px 32px 32px);
 }
 
 /* ..... Sent ..... */
+
 .tabmail-tab[type="folder"][SpecialFolder="Sent"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Sent) {
   -moz-image-region: rect(0 64px 16px 48px);
 }
 
 /* ..... Unsent ..... */
+
 .tabmail-tab[type="folder"][SpecialFolder="Unsent Messages"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Unsent Messages) {
   -moz-image-region: rect(0 80px 16px 64px);
 }
 
 /* ..... Drafts ..... */
+
 .tabmail-tab[type="folder"][SpecialFolder="Drafts"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Drafts) {
   -moz-image-region: rect(0 96px 16px 80px);
 }
 
 /* ..... Templates ..... */
+
 .tabmail-tab[type="folder"][SpecialFolder="Templates"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Templates) {
   -moz-image-region: rect(0 112px 16px 96px);
 }
 
 /* ..... Junk ..... */
+
 .tabmail-tab[type="folder"][SpecialFolder="Junk"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Junk) {
   -moz-image-region: rect(0 128px 16px 112px);
 }
 
 /* ..... Trash ..... */
+
 .tabmail-tab[type="folder"][SpecialFolder="Trash"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Trash) {
   -moz-image-region: rect(0 144px 16px 128px);
 }
 
 /* ..... Shared folders .....
 
 treechildren::-moz-tree-image(folderNameCol, imapShared-true) {
   -moz-image-region: rect(0 192px 16px 176px);
 }
 
 */ 
 
 /* ..... Saved Search Folder ..... */
+
 .tabmail-tab[type="folder"][SpecialFolder="Virtual"] .tab-icon-image ,
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Virtual) {
   -moz-image-region: rect(0 176px 16px 160px);
 }
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Virtual, newMessages-true) {
   -moz-image-region: rect(16px 176px 32px 160px);
 }
 
+treechildren::-moz-tree-cell-text(folderNameCol, newMessages-true),
+treechildren::-moz-tree-cell-text(folderNameCol, specialFolder-Inbox, newMessages-true) {
+  font-weight: bold;
+}
+
 /* ..... Mail server  ..... */
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true) {
   list-style-image: url("chrome://messenger/skin/icons/server.png");
   -moz-image-region: rect(0 16px 16px 0);
 }
 
 treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true) {
   -moz-image-region: rect(16px 16px 32px 0);
 }
 
-treechildren::-moz-tree-cell-text(folderNameCol, newMessages-true),
-treechildren::-moz-tree-cell-text(folderNameCol, specialFolder-Inbox, newMessages-true) {
-  font-weight: bold;
-}
-
 /* ..... Secure mail server ..... */
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true),
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
   -moz-image-region: rect(0 32px 16px 16px);
 }
 
 treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true, isSecure-true) {
@@ -133,20 +169,21 @@ treechildren::-moz-tree-image(folderName
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-nntp) {
   -moz-image-region: rect(0 64px 16px 48px) !important;
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
   -moz-image-region: rect(0 80px 16px 64px) !important;
 }
 
-/* ..... Newsgroup ..... */
-.tabmail-tab[type="folder"][ServerType="nntp"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, serverType-nntp) {
-  -moz-image-region: rect(0 160px 16px 144px);
+/* ..... Feed server ..... */
+
+treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-rss) {
+  list-style-image: url("chrome://messenger-newsblog/skin/icons/server-rss.png");
+  -moz-image-region: rect(0 16px 16px 0);
 }
 
 /* ::::: All Servers ::::: */
 
 treechildren::-moz-tree-cell-text(closed, subfoldersHaveUnreadMessages-true) {
   font-weight: bold;
 }
 
--- a/mail/themes/qute/mail/jar.mn
+++ b/mail/themes/qute/mail/jar.mn
@@ -48,17 +48,16 @@ classic.jar:
     skin/classic/messenger/addressbook/icons/secure-remote-addrbook.png     (addrbook/secure-remote-addrbook.png)
 *   skin/classic/messenger/messengercompose/messengercompose.css (compose/messengercompose.css)
 *   skin/classic/messenger/messengercompose/editorOverlay.css    (compose/editorOverlay.css)
     skin/classic/messenger/messengercompose/compose-toolbar.png  (compose/compose-toolbar.png)
     skin/classic/messenger/messengercompose/compose-toolbar-small.png   (compose/compose-toolbar-small.png)
     skin/classic/messenger/messengercompose/format-buttons.png  (compose/format-buttons.png)
 % skin messenger-newsblog classic/1.0 %skin/classic/messenger-newsblog/
     skin/classic/messenger-newsblog/feed-subscriptions.css      (newsblog/feed-subscriptions.css)
-    skin/classic/messenger-newsblog/newsBlogOverlay.css         (newsblog/newsBlogOverlay.css)
     skin/classic/messenger-newsblog/icons/rss-feed.png          (newsblog/rss-feed.png)
     skin/classic/messenger-newsblog/icons/server-rss.png        (newsblog/server-rss.png)
 *   skin/classic/messenger/preferences/preferences.css          (preferences/preferences.css)
     skin/classic/messenger/preferences/general.png              (preferences/general.png)
     skin/classic/messenger/preferences/display.png              (preferences/display.png)
     skin/classic/messenger/preferences/composition.png          (preferences/composition.png)
     skin/classic/messenger/preferences/privacy.png              (preferences/privacy.png)
     skin/classic/messenger/preferences/attachments.png          (preferences/attachments.png)
--- a/mail/themes/qute/mail/newsblog/feed-subscriptions.css
+++ b/mail/themes/qute/mail/newsblog/feed-subscriptions.css
@@ -63,16 +63,12 @@
 
 #rssFeedInfoBox {
   border: 1px solid ThreeDShadow;
   -moz-border-radius: 0px;
   margin: 4px;
   padding: 0px;
 }
 
-#rssFeedInfoBox textbox {
-  background-color: transparent;
-}
-
 #backgroundBox {
   background-color: #FFFFFF; 
   opacity: 0.5;
 }
deleted file mode 100644
--- a/mail/themes/qute/mail/newsblog/newsBlogOverlay.css
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Thunderbird RSS Subscription CSS
- *
- * The Initial Developer of the Original Code is
- * The Mozilla Foundation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *   Scott MacGregor <mscott@mozilla.org>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ****** */
-
-/* ::::: Folder Pane icons :::::: */
-.tabmail-tab[type="folder"][ServerType="rss"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, serverType-rss),
-.folderMenuItem[ServerType="rss"] {
-  list-style-image: url("chrome://messenger-newsblog/skin/icons/rss-feed.png");
-  -moz-image-region: rect(0 16px 16px 0);
-}
-
-treechildren::-moz-tree-image(folderNameCol, serverType-rss, newMessages-true) {
-  -moz-image-region: rect(16px 16px 32px 0);
-}
-
-treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-rss),
-.folderMenuItem[IsServer="true"][ServerType="rss"] {
-  list-style-image: url("chrome://messenger-newsblog/skin/icons/server-rss.png");
-}
-
-.tabmail-tab[type="folder"][SpecialFolder="Trash"][ServerType="rss"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, specialFolder-Trash),
-.folderMenuItem[SpecialFolder="Trash"] {
-  list-style-image: url("chrome://messenger/skin/icons/folder.png");
-  -moz-image-region: rect(0 144px 16px 128px);
-}
-
-/* ..... Saved Search Folder, Hack to force the saved search artwork to show up for virtual folders in RSS accounts ..... */
-.tabmail-tab[type="folder"][SpecialFolder="Virtual"][ServerType="rss"] .tab-icon-image ,
-treechildren::-moz-tree-image(folderNameCol, serverType-rss, specialFolder-Virtual) {
-  list-style-image: url("chrome://messenger/skin/icons/folder.png");
-  -moz-image-region: rect(0 176px 16px 160px);
-}
-
-treechildren::-moz-tree-image(folderNameCol, serverType-rss, specialFolder-Virtual, newMessages-true) {
-  -moz-image-region: rect(16px 176px 32px 160px);
-}
--- a/mailnews/base/prefs/resources/content/pref-mailnews.js
+++ b/mailnews/base/prefs/resources/content/pref-mailnews.js
@@ -68,16 +68,19 @@ function defaultClientSetup()
                                  .getService(nsIShellService);
 
     document.getElementById("setDefaultMail").disabled =
       shellService.isDefaultClient(false, nsIShellService.MAIL);
 
     document.getElementById("setDefaultNews").disabled =
       shellService.isDefaultClient(false, nsIShellService.NEWS);
 
+    document.getElementById("setDefaultFeed").disabled =
+      shellService.isDefaultClient(false, nsIShellService.RSS);
+
     document.getElementById("defaultMailPrefs").hidden = false;
   }
 }
 
 function onSetDefaultMail()
 {
   var shellService = Components.classes["@mozilla.org/suite/shell-service;1"]
                                .getService(nsIShellService);
@@ -93,8 +96,19 @@ function onSetDefaultNews()
   var shellService = Components.classes["@mozilla.org/suite/shell-service;1"]
                                .getService(nsIShellService);
 
   shellService.setDefaultClient(false, false, nsIShellService.NEWS);
   shellService.shouldBeDefaultClientFor |= nsIShellService.NEWS;
 
   document.getElementById("setDefaultNews").disabled = true;
 }
+
+function onSetDefaultFeed()
+{
+  var shellService = Components.classes["@mozilla.org/suite/shell-service;1"]
+                               .getService(nsIShellService);
+
+  shellService.setDefaultClient(false, false, nsIShellService.RSS);
+  shellService.shouldBeDefaultClientFor |= nsIShellService.RSS;
+
+  document.getElementById("setDefaultFeed").disabled = true;
+}
--- a/mailnews/base/prefs/resources/content/pref-mailnews.xul
+++ b/mailnews/base/prefs/resources/content/pref-mailnews.xul
@@ -76,16 +76,18 @@
       <preference id="mail.toolbars.showbutton.stop"
                   name="mail.toolbars.showbutton.stop" type="bool"/>
       <preference id="mail.toolbars.showbutton.junk"
                   name="mail.toolbars.showbutton.junk" type="bool"/>
       <preference id="system.windows.lock_ui.defaultMailClient" readonly="true"
                   name="system.windows.lock_ui.defaultMailClient" type="bool"/>
       <preference id="system.windows.lock_ui.defaultNewsClient" readonly="true"
                   name="system.windows.lock_ui.defaultNewsClient" type="bool"/>
+      <preference id="system.windows.lock_ui.defaultFeedClient" readonly="true"
+                  name="system.windows.lock_ui.defaultFeedClient" type="bool"/>
     </preferences>
 
     <groupbox>
       <caption label="&generalSettings.caption;"/>
 
       <hbox align="center">
         <checkbox id="mailnewsConfirmMoveFoldersToTrash" label="&confirmMove.label;"
                   preference="mailnews.confirm.moveFoldersToTrash"
@@ -110,16 +112,21 @@
         <description>&defaultMailSettings.description;</description>
         <hbox class="indent" align="center">
           <button id="setDefaultMail" accesskey="&setDefaultMail.accesskey;"
                   label="&setDefaultMail.label;" oncommand="onSetDefaultMail();"
                   preference="system.windows.lock_ui.defaultMailClient"/>
           <button id="setDefaultNews" accesskey="&setDefaultNews.accesskey;"
                   label="&setDefaultNews.label;" oncommand="onSetDefaultNews();"
                   preference="system.windows.lock_ui.defaultNewsClient"/>
+          <button id="setDefaultFeed"
+                  accesskey="&setDefaultFeed.accesskey;"
+                  label="&setDefaultFeed.label;"
+                  oncommand="onSetDefaultFeed();"
+                  preference="system.windows.lock_ui.defaultFeedClient"/>
         </hbox>
       </vbox>
     </groupbox>
 
     <groupbox>
       <caption label="&messengerStartPage.caption;"/>
       <hbox align="center">
         <checkbox id="mailnewsStartPageEnabled" label="&enableStartPage.label;"
--- a/mailnews/base/resources/content/mailCommands.js
+++ b/mailnews/base/resources/content/mailCommands.js
@@ -237,26 +237,28 @@ function ComposeMessage(type, format, fo
         if (server)
         {
           var tmpIdentity = getIdentityForServer(server, hintForIdentity);
           if (tmpIdentity && hintForIdentity.search(tmpIdentity.email) >= 0)
             identity = tmpIdentity;
         }
       }
 
-      if (type == msgComposeType.Reply ||
-        type == msgComposeType.ReplyAll ||
-        type == msgComposeType.ReplyToList ||
-        type == msgComposeType.ForwardInline ||
-        type == msgComposeType.ReplyToGroup ||
-        type == msgComposeType.ReplyToSender ||
-        type == msgComposeType.ReplyToSenderAndGroup ||
-        type == msgComposeType.Template ||
-        type == msgComposeType.Redirect ||
-        type == msgComposeType.Draft)
+      if (/^https?:/.test(hdr.messageId))
+        openComposeWindowForRSSArticle(hdr, type);
+      else if (type == msgComposeType.Reply ||
+               type == msgComposeType.ReplyAll ||
+               type == msgComposeType.ReplyToList ||
+               type == msgComposeType.ForwardInline ||
+               type == msgComposeType.ReplyToGroup ||
+               type == msgComposeType.ReplyToSender ||
+               type == msgComposeType.ReplyToSenderAndGroup ||
+               type == msgComposeType.Template ||
+               type == msgComposeType.Redirect ||
+               type == msgComposeType.Draft)
       {
         msgComposeService.OpenComposeWindow(null, hdr, messageUri, type, format, identity, msgWindow);
         // Limit the number of new compose windows to 8. Why 8 ? I like that number :-)
         if (i == 7)
           break;
       }
       else
       {
--- a/mailnews/base/resources/content/mailContextMenus.js
+++ b/mailnews/base/resources/content/mailContextMenus.js
@@ -285,35 +285,48 @@ function fillFolderPaneContextMenu()
   if (startIndex.value < 0)
     return false;
   var numSelected = endIndex.value - startIndex.value + 1;
   var folderResource = GetFolderResource(folderTree, startIndex.value);
 
   var isServer = GetFolderAttribute(folderTree, folderResource, "IsServer") == 'true';
   var serverType = GetFolderAttribute(folderTree, folderResource, "ServerType");
   var specialFolder = GetFolderAttribute(folderTree, folderResource, "SpecialFolder");
-  var canSubscribeToFolder = (serverType == "nntp") || (serverType == "imap");
+  var canSubscribeToFolder = (serverType == "nntp") ||
+                             (serverType == "imap") ||
+                             (serverType == "rss");
   var isNewsgroup = !isServer && serverType == 'nntp';
   var isMailFolder = !isServer && serverType != 'nntp';
   var isVirtualFolder = (specialFolder == "Virtual");
-  var canGetMessages =  (isServer && (serverType != "nntp") && (serverType !="none")) || isNewsgroup;
+  var canGetMessages =
+    (isServer && (serverType != "nntp") && (serverType != "none")) ||
+    isNewsgroup ||
+    ((serverType == "rss") && (specialFolder != 'Trash'));
 
   if (!isServer)
   {
     ShowMenuItem("folderPaneContext-settings", false);
     ShowMenuItem("folderPaneContext-properties", true);
     EnableMenuItem("folderPaneContext-properties", true);
   }
   else
   {
     ShowMenuItem("folderPaneContext-properties", false);
     ShowMenuItem("folderPaneContext-settings", true);
     EnableMenuItem("folderPaneContext-settings", true);
   }
 
+  if ((numSelected <= 1) && canGetMessages)
+    if (isServer)
+      SetMenuItemLabel("folderPaneContext-getMessages",
+                       gMessengerBundle.getString("getMessagesFor"));
+    else
+      SetMenuItemLabel("folderPaneContext-getMessages",
+                       gMessengerBundle.getString("getMessages"));
+
   ShowMenuItem("folderPaneContext-getMessages", (numSelected <= 1) && canGetMessages);
   EnableMenuItem("folderPaneContext-getMessages", true);
 
   ShowMenuItem("folderPaneContext-openNewWindow", (numSelected <= 1) && !isServer);
   EnableMenuItem("folderPaneContext-openNewWindow", true);
 
   SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder);
   SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType, specialFolder);
--- a/mailnews/base/resources/content/mailWindowOverlay.js
+++ b/mailnews/base/resources/content/mailWindowOverlay.js
@@ -863,19 +863,23 @@ function GetInboxFolder(server)
     catch (ex) {
         dump(ex + "\n");
     }
     return null;
 }
 
 function GetMessagesForInboxOnServer(server)
 {
-  dump ("GetMessagesForInboxOnServer uri = " + server.serverURI + "\n");
   var inboxFolder = GetInboxFolder(server);
-  if (!inboxFolder) return;
+
+  // If the server doesn't support an inbox it could be an RSS server or
+  // some other server type, just use the root folder and the server
+  // implementation can figure out what to do.
+  if (!inboxFolder)
+    inboxFolder = server.rootFolder;
 
   GetNewMessages([inboxFolder], server);
 }
 
 function MsgGetMessage()
 {
   // if offline, prompt for getting messages
   if(CheckOnline())
@@ -1206,18 +1210,22 @@ function getDestinationFolder(preselecte
     else
         destinationFolder = preselectedFolder;
 
     return destinationFolder;
 }
 
 function MsgSubscribe()
 {
-    var preselectedFolder = GetFirstSelectedMsgFolder();
-    Subscribe(preselectedFolder);
+  var preselectedFolder = GetFirstSelectedMsgFolder();
+
+  if (preselectedFolder && preselectedFolder.server.type == "rss")
+    openSubscriptionsDialog(preselectedFolder); // open feed subscription dialog
+  else
+    Subscribe(preselectedFolder); // open imap/nntp subscription dialog
 }
 
 function ConfirmUnsubscribe(folder)
 {
     if (!gMessengerBundle)
         gMessengerBundle = document.getElementById("bundle_messenger");
 
     var titleMsg = gMessengerBundle.getString("confirmUnsubscribeTitle");
@@ -1882,16 +1890,22 @@ function MsgViewPageInfo() {}
 function MsgFirstUnreadMessage() {}
 function MsgFirstFlaggedMessage() {}
 function MsgAddSenderToAddressBook() {}
 function MsgAddAllToAddressBook() {}
 
 function SpaceHit(event)
 {
   var contentWindow = window.top.content;
+  var rssiframe = contentWindow.document.getElementById('_mailrssiframe');
+
+  // If we are displaying an RSS article, we really want to scroll
+  // the nested iframe.
+  if (rssiframe)
+    contentWindow = rssiframe.contentWindow;
 
   if (event && event.shiftKey) {
     // if at the start of the message, go to the previous one
     if (contentWindow.scrollY > 0) {
       contentWindow.scrollByPages(-1);
     }
     else {
       goDoCommand("cmd_previousUnreadMsg");
--- a/mailnews/base/resources/content/mailWindowOverlay.xul
+++ b/mailnews/base/resources/content/mailWindowOverlay.xul
@@ -64,16 +64,17 @@
 ]>
 
 <overlay
   xmlns:nc="http://home.netscape.com/NC-rdf#"
   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
 <script type="application/x-javascript" src="chrome://messenger/content/mailCommands.js"/>
 <script type="application/x-javascript" src="chrome://messenger/content/mailWindowOverlay.js"/>
+<script type="application/x-javascript" src="chrome://messenger-newsblog/content/newsblogOverlay.js"/>
 <script type="application/x-javascript" src="chrome://messenger/content/mail-offline.js"/>
 <script type="application/x-javascript" src="chrome://communicator/content/findUtils.js"/>
 <script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarks.js"/>
 <script type="application/x-javascript" src="chrome://global/content/printUtils.js"/>
 
 <stringbundleset id="stringbundleset">
   <stringbundle id="bundle_messenger" src="chrome://messenger/locale/messenger.properties"/>
   <stringbundle id="bundle_offlinePrompts" src="chrome://messenger/locale/offline.properties"/>
--- a/mailnews/base/resources/content/msgMail3PaneWindow.js
+++ b/mailnews/base/resources/content/msgMail3PaneWindow.js
@@ -725,18 +725,31 @@ function OnLoadMessenger()
 
   //need to add to session before trying to load start folder otherwise listeners aren't
   //set up correctly.
   // argument[0] --> folder uri
   // argument[1] --> optional message key
   // argument[2] --> optional email address; // Will come from aim; needs to show msgs from buddy's email address.
   if ("arguments" in window)
   {
-    gStartFolderUri = (window.arguments.length > 0) ? window.arguments[0]
-                                                    : null;
+    // filter our any feed urls that came in as arguments to the new window...
+    if (window.arguments.length && /^feed:/i.test(window.arguments[0]))
+    {
+      var feedHandler =
+        Components.classes["@mozilla.org/newsblog-feed-downloader;1"]
+                  .getService(Components.interfaces.nsINewsBlogFeedDownloader);
+      if (feedHandler)
+        feedHandler.subscribeToFeed(window.arguments[0], null, msgWindow);
+      gStartFolderUri = null;
+    }
+    else
+    {
+      gStartFolderUri = (window.arguments.length > 0) ? window.arguments[0]
+                                                      : null;
+    }
     gStartMsgKey = (window.arguments.length > 1) ? window.arguments[1]
                                                  : nsMsgKey_None;
     gSearchEmailAddress = (window.arguments.length > 2) ? window.arguments[2]
                                                         : null;
   }
 
   setTimeout("loadStartFolder(gStartFolderUri);", 0);
 
--- a/mailnews/base/resources/content/start.xhtml
+++ b/mailnews/base/resources/content/start.xhtml
@@ -58,16 +58,17 @@
 <h1>&headline.label;</h1>
 
 <div id="main">
 <p>&description.label;</p>
 <h2>&features.title;</h2>
 <ul>
   <li>&feat_multiacc.label;</li>
   <li>&feat_junk.label;</li>
+  <li>&feat_rss.label;</li>
   <li>&feat_filters.label;</li>
   <li>&feat_htmlmsg.label;</li>
   <li>&feat_abook.label;</li>
   <li>&feat_labels.label;</li>
   <li>&feat_integration.label;</li>
 </ul>
 <h2>&dict.title;</h2>
 <p>&dict_intro.label;</p>
--- a/mailnews/extensions/Makefile.in
+++ b/mailnews/extensions/Makefile.in
@@ -38,17 +38,17 @@
 DEPTH		= ../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 # these extensions are not optional
-DIRS	= mdn mailviews bayesian-spam-filter offline-startup
+DIRS	= mdn mailviews bayesian-spam-filter offline-startup newsblog
 
 ifdef MOZ_PSM
 BUILD_SMIME=1
 endif
 
 ifdef BUILD_SMIME
 DIRS		+= smime
 endif
rename from mail/extensions/newsblog/Makefile.in
rename to mailnews/extensions/newsblog/Makefile.in
rename from mail/extensions/newsblog/content/Feed.js
rename to mailnews/extensions/newsblog/content/Feed.js
rename from mail/extensions/newsblog/content/FeedItem.js
rename to mailnews/extensions/newsblog/content/FeedItem.js
rename from mail/extensions/newsblog/content/am-newsblog.js
rename to mailnews/extensions/newsblog/content/am-newsblog.js
--- a/mail/extensions/newsblog/content/am-newsblog.js
+++ b/mailnews/extensions/newsblog/content/am-newsblog.js
@@ -31,38 +31,12 @@
 # decision by deleting the provisions above and replace them with the notice
 # and other provisions required by the GPL or the LGPL. If you do not delete
 # the provisions above, a recipient may use your version of this file under
 # the terms of any one of the MPL, the GPL or the LGPL.
 # ***** END LICENSE BLOCK *****
 
 var gIncomingServer;
 
-function onInit() 
-{  
-  // set our custom quickMode attribute
-  document.getElementById('useQuickMode').checked = gIncomingServer.getBoolAttribute("quickMode");
-}
-
 function onPreInit(account, accountValues)
 {
   gIncomingServer = account.incomingServer;
 }
-
-function onSave()
-{
-  gIncomingServer.setBoolAttribute("quickMode", document.getElementById('useQuickMode').checked);
-}
-
-function manageSubscriptions()
-{
-  // XXX: This code should be shared with the JS in toolbar-icon.xul
-  const kWindowMediatorContractID = "@mozilla.org/appshell/window-mediator;1";
-  const kWindowMediatorIID = Components.interfaces.nsIWindowMediator;
-  const kWindowMediator = Components.classes[kWindowMediatorContractID].getService(kWindowMediatorIID);
-  var lastSubscriptionWindow = kWindowMediator.getMostRecentWindow("Mail:News-BlogSubscriptions");
-
-  if (lastSubscriptionWindow)
-    lastSubscriptionWindow.focus();
-  else 
-    window.openDialog("chrome://messenger-newsblog/content/feed-subscriptions.xul", "",
-                      "centerscreen,chrome,dialog=no,resizable", { server: gIncomingServer});
-}
rename from mail/extensions/newsblog/content/am-newsblog.xul
rename to mailnews/extensions/newsblog/content/am-newsblog.xul
--- a/mail/extensions/newsblog/content/am-newsblog.xul
+++ b/mailnews/extensions/newsblog/content/am-newsblog.xul
@@ -46,17 +46,18 @@
 <page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         class="color-dialog"
         title="&newsblogTitle.label;"
         onload="parent.onPanelLoaded('am-newsblog.xul');"
         orient="vertical">
  
   <script type="application/x-javascript" src="chrome://messenger/content/AccountManager.js"/>
   <script type="application/x-javascript" src="chrome://messenger-newsblog/content/am-newsblog.js"/>
-    
+  <script type="application/x-javascript" src="chrome://messenger-newsblog/content/newsblogOverlay.js"/>
+
   <dialogheader title="&newsblogTitle.label;"/>
   
     <hbox align="center">
       <label value="&accountName.label;" control="server.prettyName"
              accesskey="&accountName.accesskey;"/>
       <textbox wsm_persist="true" size="30" id="server.prettyName"
                prefstring="mail.server.%serverkey%.name"/>
     </hbox>
@@ -78,26 +79,31 @@
     <checkbox wsm_persist="true"
               id="server.loginAtStartUp"
               label="&loginAtStartup.label;"
               accesskey="&loginAtStartup.accesskey;"
               prefattribute="value"
               prefstring="mail.server.%serverkey%.login_at_startup"/>
 
     <checkbox wsm_persist="true"
-              id="useQuickMode"
+              genericattr="true"
+              id="server.quickMode"
               label="&useQuickMode.label;"
-              accesskey="&useQuickMode.accesskey;"/>
+              accesskey="&useQuickMode.accesskey;"
+              preftype="bool"
+              prefattribute="value"
+              prefstring="mail.server.%serverkey%.quickMode"/>
 
     <checkbox wsm_persist="true" id="server.emptyTrashOnExit"
               label="&emptyTrashOnExit.label;"
               accesskey="&emptyTrashOnExit.accesskey;"
               prefattribute="value"
               prefstring="mail.server.%serverkey%.empty_trash_on_exit"/>
 
     <separator class="thin"/>
 
     <hbox align="center">
       <spacer flex="1"/>
-      <button label="&manageSubscriptions.label;" oncommand="manageSubscriptions();"
+      <button label="&manageSubscriptions.label;"
+              oncommand="openSubscriptionsDialog(null, gIncomingServer);"
               accesskey="&manageSubscriptions.accesskey;"/>
     </hbox>
 </page>
rename from mail/extensions/newsblog/content/debug-utils.js
rename to mailnews/extensions/newsblog/content/debug-utils.js
rename from mail/extensions/newsblog/content/edittree.xml
rename to mailnews/extensions/newsblog/content/edittree.xml
rename from mail/extensions/newsblog/content/feed-parser.js
rename to mailnews/extensions/newsblog/content/feed-parser.js
rename from mail/extensions/newsblog/content/feed-properties.js
rename to mailnews/extensions/newsblog/content/feed-properties.js
rename from mail/extensions/newsblog/content/feed-properties.xul
rename to mailnews/extensions/newsblog/content/feed-properties.xul
rename from mail/extensions/newsblog/content/feed-subscriptions.js
rename to mailnews/extensions/newsblog/content/feed-subscriptions.js
rename from mail/extensions/newsblog/content/feed-subscriptions.xul
rename to mailnews/extensions/newsblog/content/feed-subscriptions.xul
rename from mail/extensions/newsblog/content/file-utils.js
rename to mailnews/extensions/newsblog/content/file-utils.js
rename from mail/extensions/newsblog/content/toolbar-icon.xul
rename to mailnews/extensions/newsblog/content/newsblogOverlay.js
--- a/mail/extensions/newsblog/content/toolbar-icon.xul
+++ b/mailnews/extensions/newsblog/content/newsblogOverlay.js
@@ -1,92 +1,112 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://messenger-newsblog/skin/newsBlogOverlay.css" type="text/css"?> 
-
-<!DOCTYPE overlay SYSTEM "chrome://messenger-newsblog/locale/newsblog.dtd">
-
-<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+# -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is Thunderbird Newsblog Overlay
+#
+# The Initial Developer of the Original Code is
+# The Mozilla Foundation.
+# Portions created by the Initial Developer are Copyright (C) 2005
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#  Scott MacGregor <mscott@mozilla.org>
+#  David Bienvenu <bienvenu@nventure.com>
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK ******
 
-<script type="application/x-javascript">
-  function openSubscriptionsDialog(aFolder) {
-
-    //check for an existing subscriptions window and focus it.
-    const kWindowMediatorContractID = "@mozilla.org/appshell/window-mediator;1";
-    const kWindowMediatorIID = Components.interfaces.nsIWindowMediator;
-    const kWindowMediator = Components.classes[kWindowMediatorContractID].getService(kWindowMediatorIID);
-    var lastSubscriptionWindow = kWindowMediator.getMostRecentWindow("Mail:News-BlogSubscriptions");
+function openSubscriptionsDialog(aFolder, aServer)
+{
+  if (!aServer)
+    aServer = aFolder.server;
+  //check for an existing subscriptions window and focus it.
+  const kWindowMediatorContractID = "@mozilla.org/appshell/window-mediator;1";
+  const kWindowMediatorIID = Components.interfaces.nsIWindowMediator;
+  const kWindowMediator = Components.classes[kWindowMediatorContractID]
+                                    .getService(kWindowMediatorIID);
+  var lastSubscriptionWindow =
+    kWindowMediator.getMostRecentWindow("Mail:News-BlogSubscriptions");
   
-    if (lastSubscriptionWindow)
-    {
+  if (lastSubscriptionWindow)
+  {
+    if (aFolder)
       lastSubscriptionWindow.gFeedSubscriptionsWindow.selectFolder(aFolder);
-      lastSubscriptionWindow.focus();
-    }
-    else 
-      window.openDialog("chrome://messenger-newsblog/content/feed-subscriptions.xul", "",
-                        "centerscreen,chrome,dialog=no,resizable",
-                        { server: aFolder.server, folder: aFolder});
+    lastSubscriptionWindow.focus();
   }
-
-  function openSubscriptionsDialogFromFolderPane()
+  else
   {
-    // get the incoming server for the seleted folder
-    var selectedFolders = GetSelectedMsgFolders();
-    openSubscriptionsDialog(selectedFolders[0]);
+    window.openDialog("chrome://messenger-newsblog/content/feed-subscriptions.xul", "",
+                      "centerscreen,chrome,dialog=no,resizable",
+                      { server: aServer, folder: aFolder});
   }
+}
 
-  // Special case attempts to reply/forward/edit as new RSS arrticles
-  // Send the feed article URL instead of trying to load the feed inside of
-  // an iframe. Bug #258278.
-  function openComposeWindowForRSSArticle(messageID, msgHdr, type)
+// Special case attempts to reply/forward/edit as new RSS arrticles
+// Send the feed article URL instead of trying to load the feed inside of
+// an iframe. Bug #258278.
+function openComposeWindowForRSSArticle(msgHdr, type)
+{
+  // convert our messageId into a url..
+  var contentBase = msgHdr.messageId.replace("@localhost.localdomain", "");
+
+  var params = Components.classes["@mozilla.org/messengercompose/composeparams;1"]
+                         .createInstance(Components.interfaces.nsIMsgComposeParams);
+  if (params)
   {
-    // convert our messageID into a url..
-    var contentBase = messageID.replace("@localhost.localdomain", "");
-
-    var params = Components.classes["@mozilla.org/messengercompose/composeparams;1"]
-                           .createInstance(Components.interfaces.nsIMsgComposeParams);
-    if (params)
+    params.composeFields = Components.classes['@mozilla.org/messengercompose/composefields;1']
+                                     .createInstance(Components.interfaces.nsIMsgCompFields);
+    if (params.composeFields)
     {
-      params.composeFields = Components.classes['@mozilla.org/messengercompose/composefields;1']
-                                       .createInstance(Components.interfaces.nsIMsgCompFields);
-      if (params.composeFields)
-      {
-        params.composeFields.body = contentBase;
-        var subject = msgHdr.mime2DecodedSubject;
-        var msgComposeType = Components.interfaces.nsIMsgCompType;
-        if (type == msgComposeType.Reply 
-            || type == msgComposeType.ReplyAll 
-            || type == msgComposeType.ReplyToSender 
-            || type == msgComposeType.ReplyToGroup 
-            || type == msgComposeType.ReplyToSenderAndGroup)
-          subject = 'Re: ' + subject;
-        else if (type == msgComposeType.ForwardInline || type == msgComposeType.ForwardAsAttachment)
-          subject = '[Fwd: ' + subject + ']';
-        params.composeFields.subject = subject;
-        params.composeFields.characterSet = msgHdr.Charset;
-        params.bodyIsLink = true;
+      params.composeFields.body = contentBase;
+      var subject = msgHdr.mime2DecodedSubject;
+      var msgComposeType = Components.interfaces.nsIMsgCompType;
+      if (type == msgComposeType.Reply ||
+          type == msgComposeType.ReplyAll ||
+          type == msgComposeType.ReplyToSender ||
+          type == msgComposeType.ReplyToGroup ||
+          type == msgComposeType.ReplyToSenderAndGroup)
+        subject = 'Re: ' + subject;
+      else if (type == msgComposeType.ForwardInline ||
+               type == msgComposeType.ForwardAsAttachment)
+        subject = '[Fwd: ' + subject + ']';
+      params.composeFields.subject = subject;
+      params.composeFields.characterSet = msgHdr.Charset;
+      params.bodyIsLink = true;
 
-        if (msgComposeService) {
-          try {
-            params.identity = msgComposeService.defaultIdentity;
-          }
-          catch (ex) {
-            params.identity = null;
-          }
-          msgComposeService.OpenComposeWindowWithParams(null, params);
+      if (msgComposeService)
+      {
+        try
+        {
+          params.identity = msgComposeService.defaultIdentity;
         }
-      }                                                                         
-    }   
+        catch (ex)
+        {
+          params.identity = null;
+        }
+        msgComposeService.OpenComposeWindowWithParams(null, params);
+      }
+    }
   }
-</script>
-
-<!-- Overlay into the folder pane context menu. If you change the id for the menu item, please
-     update mailContextMenus.js 
---> 
-<popup id="folderPaneContext">
-  <menuitem id="folderPaneContext-rssSubscribe"
-    insertafter="folderPaneContext-subscribe"
-    label="&folderContextRSSSubscribe.label;"
-    accesskey="&folderContextRSSSubscribe.accesskey;"
-    oncommand="openSubscriptionsDialogFromFolderPane();"/>
-</popup>
-
-</overlay>
-
+}
rename from mail/extensions/newsblog/content/utils.js
rename to mailnews/extensions/newsblog/content/utils.js
rename from mail/extensions/newsblog/jar.mn
rename to mailnews/extensions/newsblog/jar.mn
--- a/mail/extensions/newsblog/jar.mn
+++ b/mailnews/extensions/newsblog/jar.mn
@@ -1,12 +1,11 @@
 newsblog.jar:
 % content messenger-newsblog %content/messenger-newsblog/ xpcnativewrappers=yes
-% overlay chrome://messenger/content/mailWindowOverlay.xul chrome://messenger-newsblog/content/toolbar-icon.xul
-*  content/messenger-newsblog/toolbar-icon.xul                  (content/toolbar-icon.xul)
+*  content/messenger-newsblog/newsblogOverlay.js                (content/newsblogOverlay.js)
 *  content/messenger-newsblog/edittree.xml                      (content/edittree.xml)
 *  content/messenger-newsblog/debug-utils.js                    (content/debug-utils.js)
 *  content/messenger-newsblog/Feed.js                           (content/Feed.js)
 *  content/messenger-newsblog/FeedItem.js                       (content/FeedItem.js)
 *  content/messenger-newsblog/feed-parser.js                    (content/feed-parser.js)
 *  content/messenger-newsblog/file-utils.js                     (content/file-utils.js)
 *  content/messenger-newsblog/utils.js                          (content/utils.js)
 *  content/messenger-newsblog/feed-properties.xul               (content/feed-properties.xul)
rename from mail/extensions/newsblog/js/newsblog.js
rename to mailnews/extensions/newsblog/js/newsblog.js
rename from mail/extensions/newsblog/rss.rdf
rename to mailnews/extensions/newsblog/rss.rdf
--- a/mailnews/makefiles.sh
+++ b/mailnews/makefiles.sh
@@ -111,11 +111,12 @@ mailnews/extensions/bayesian-spam-filter
 mailnews/extensions/bayesian-spam-filter/src/Makefile
 mailnews/extensions/bayesian-spam-filter/build/Makefile
 mailnews/extensions/mailviews/Makefile
 mailnews/extensions/mailviews/public/Makefile
 mailnews/extensions/mailviews/src/Makefile
 mailnews/extensions/mailviews/build/Makefile
 mailnews/extensions/mailviews/resources/Makefile
 mailnews/extensions/mailviews/resources/content/Makefile
+mailnews/extensions/newsblog/Makefile
 mailnews/extensions/offline-startup/Makefile
 mailnews/mapi/Makefile
 "
--- a/suite/common/defaultClientDialog.xul
+++ b/suite/common/defaultClientDialog.xul
@@ -54,18 +54,19 @@
         buttons="accept,cancel"
         onload="onLoad();"
         ondialogaccept="return onAccept();"
         title="&defaultClient.title;">
   
   <script type="application/x-javascript" src="chrome://communicator/content/defaultClientDialog.js"/>
   
   <description>&defaultClient.intro;</description>
-  <listbox rows="3" id="defaultList">
+  <listbox rows="4" id="defaultList">
     <listitem value="BROWSER" type="checkbox" label="&browser.label;"/>
     <listitem value="MAIL" type="checkbox" label="&email.label;"/>
     <listitem value="NEWS" type="checkbox" label="&newsgroups.label;"/>
+    <listitem value="RSS" type="checkbox" label="&rss.label;"/>
   </listbox>
 
   <separator class="thin"/>
   <checkbox id="checkOnStartup" checked="true" label="&checkOnStartup.label;" accesskey="&checkOnStartup.accesskey;"/>
 
 </dialog>
--- a/suite/installer/Makefile.in
+++ b/suite/installer/Makefile.in
@@ -62,16 +62,17 @@ ifneq (,$(filter-out OS2 Darwin,$(OS_ARC
 MOZ_PKG_MANIFEST_P = $(srcdir)/unix/packages
 endif
 endif
 
 MOZ_NONLOCALIZED_PKG_LIST = \
 	xpcom \
 	browser \
 	mail \
+	newsblog \
 	reporter \
 	$(NULL)
 
 MOZ_LOCALIZED_PKG_LIST = \
 	$(AB_CD) \
 	$(NULL)
 
 MOZ_OPTIONAL_PKG_LIST = \
--- a/suite/installer/windows/packages
+++ b/suite/installer/windows/packages
@@ -496,16 +496,19 @@ bin\components\msgsmime.dll
 bin\components\msgsmime.xpt
 bin\components\smime-service.js
 bin\MapiProxy.dll
 bin\mozMapi32.dll
 bin\components\msgMapi.dll
 bin\components\mapihook.xpt
 bin\components\mdn-service.js
 bin\components\offlineStartup.js
+bin\chrome\newsblog.jar
+bin\chrome\newsblog.manifest
+bin\components\newsblog.js
 
 [chatzilla]
 bin\extensions\{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}\components\chatzilla-service.js
 bin\extensions\{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}\chrome\chatzilla.jar
 bin\extensions\{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}\chrome\icons\default\chatzilla-window.ico
 bin\extensions\{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}\chrome.manifest
 bin\extensions\{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}\install.rdf
 bin\extensions\langpack-@AB_CD@@chatzilla.mozilla.org\chrome\chatzilla.jar
--- a/suite/locales/en-US/chrome/common/defaultClientDialog.dtd
+++ b/suite/locales/en-US/chrome/common/defaultClientDialog.dtd
@@ -1,9 +1,10 @@
 <!ENTITY defaultClient.title  "Default Client">
 <!ENTITY defaultClient.intro  "Use &brandShortName; as the default client for:">
 
 <!ENTITY browser.label "Browser">
 <!ENTITY email.label "E-Mail">
 <!ENTITY newsgroups.label "Newsgroups">
+<!ENTITY rss.label "RSS Feeds">
 
 <!ENTITY checkOnStartup.label "Always perform this check when starting &brandShortName;">
 <!ENTITY checkOnStartup.accesskey "A">
--- a/suite/locales/en-US/chrome/mailnews/messenger.properties
+++ b/suite/locales/en-US/chrome/mailnews/messenger.properties
@@ -47,16 +47,18 @@ compactFolder=Compact This Folder
 removeAccount=Delete Account…
 removeNewsAccount=Delete News Account…
 removeFolder=Delete Folder
 newFolderMenuItem=Folder…
 newSubfolderMenuItem=Subfolder…
 newFolder=New Folder…
 newSubfolder=New Subfolder…
 folderProperties=Folder Properties
+getMessages=Get Messages
+getMessagesFor=Get Messages For Account
 getNextNMessages=Get Next %S News Messages
 advanceNextPrompt=Advance to next unread message in %S?
 titleNewsPreHost=on
 titleMailPreHost=for
 replyToSender=Reply to Sender
 reply=Reply
 EMLFiles=Mail Files
 OpenEMLFiles=Open Message
copy from mail/locales/en-US/chrome/messenger-newsblog/am-newsblog.dtd
copy to suite/locales/en-US/chrome/mailnews/newsblog/am-newsblog.dtd
copy from mail/locales/en-US/chrome/messenger-newsblog/am-newsblog.properties
copy to suite/locales/en-US/chrome/mailnews/newsblog/am-newsblog.properties
copy from mail/locales/en-US/chrome/messenger-newsblog/feed-properties.dtd
copy to suite/locales/en-US/chrome/mailnews/newsblog/feed-properties.dtd
copy from mail/locales/en-US/chrome/messenger-newsblog/feed-subscriptions.dtd
copy to suite/locales/en-US/chrome/mailnews/newsblog/feed-subscriptions.dtd
copy from mail/locales/en-US/chrome/messenger-newsblog/newsblog.properties
copy to suite/locales/en-US/chrome/mailnews/newsblog/newsblog.properties
--- a/mail/locales/en-US/chrome/messenger-newsblog/newsblog.properties
+++ b/suite/locales/en-US/chrome/mailnews/newsblog/newsblog.properties
@@ -4,18 +4,18 @@ subscribe-validating=Verifying the RSS feed…
 subscribe-cancelSubscription=Are you sure you wish to cancel subscribing to the current feed?
 subscribe-cancelSubscriptionTitle=Subscribing to a Feed…
 subscribe-noFeedSelected=<no RSS feed selected>
 subscribe-feedAlreadySubscribed=You already have a subscription for this feed.
 subscribe-errorOpeningFile=Could not open the file.
 
 subscribe-OPMLImportTitle=Select OPML file to import
 subscribe-OPMLExportTitle=Export feeds as an OPML file
-subscribe-OPMLExportFileTitle=Thunderbird OPML Export
-subscribe-OPMLExportFileName=MyThunderbirdFeeds.opml
+subscribe-OPMLExportFileTitle=SeaMonkey OPML Export
+subscribe-OPMLExportFileName=MySeaMonkeyFeeds.opml
 #LOCALIZATION NOTE: %S is the name of the OPML file the user tried to import.
 subscribe-errorInvalidOPMLFile=Either %S is not a valid OPML file or there was an error importing the file.
 
 subscribe-OPMLExportOPMLFilesFilterText=OPML Files
 
 #LOCALIZATION NOTE: %S is the name of the feed the user wants to unsubscribe from.
 subsribe-confirmFeedDeletionTitle=Remove Feed
 subsribe-confirmFeedDeletion=Are you sure you want to unsubscribe from the feed: \n %S?
--- a/suite/locales/en-US/chrome/mailnews/pref/pref-mailnews.dtd
+++ b/suite/locales/en-US/chrome/mailnews/pref/pref-mailnews.dtd
@@ -46,26 +46,28 @@
 <!ENTITY preserveThreading.label          "Preserve threading when sorting messages">
 <!ENTITY preserveThreading.accesskey      "v">
 
 <!ENTITY defaultMailSettings.description  "Make &brandShortName; the default application for:">
 <!ENTITY setDefaultMail.label             "Mail">
 <!ENTITY setDefaultMail.accesskey         "M">
 <!ENTITY setDefaultNews.label             "News">
 <!ENTITY setDefaultNews.accesskey         "N">
+<!ENTITY setDefaultFeed.label             "Feeds">
+<!ENTITY setDefaultFeed.accesskey         "e">
 
 <!ENTITY messengerStartPage.caption       "Mail Start Page">
 <!ENTITY enableStartPage.label            "When Mail launches, show the Start Page in the message area">
 <!ENTITY enableStartPage.accesskey        "W">
 <!ENTITY location.label                   "Location:">
 <!ENTITY location.accesskey               "L">
 <!ENTITY useDefault.label                 "Restore Default">
 <!ENTITY useDefault.accesskey             "D">
 <!ENTITY rememberLastMsg.label            "Remember the last selected message">
-<!ENTITY rememberLastMsg.accesskey        "e">
+<!ENTITY rememberLastMsg.accesskey        "R">
 <!ENTITY toolbarIntro.caption             "Select the buttons you want to see in the toolbar">
 <!ENTITY fileButton.label                 "File">
 <!ENTITY fileButton.accesskey             "F">
 <!ENTITY nextButton.label                 "Next">
 <!ENTITY nextButton.accesskey             "x">
 <!ENTITY junkMailButton.label             "Junk">
 <!ENTITY junkMailButton.accesskey         "J">
 <!ENTITY printButton.label                "Print">
--- a/suite/locales/en-US/chrome/mailnews/start.dtd
+++ b/suite/locales/en-US/chrome/mailnews/start.dtd
@@ -40,16 +40,17 @@
 <!ENTITY headline.label
 'Welcome to <a id="vendorURL" href="">&brandShortName;</a> Mail &amp; Newsgroups!'>
 <!ENTITY description.label
 "&brandShortName; Mail &amp; Newsgroups is a powerful open-source mail and news
 client, supporting advanced junk mail detection and other useful features.">
 <!ENTITY features.title "Features">
 <!ENTITY feat_multiacc.label "Support for multiple accounts">
 <!ENTITY feat_junk.label "Junk Mail detection">
+<!ENTITY feat_rss.label "RSS Reader">
 <!ENTITY feat_filters.label "Message Filters">
 <!ENTITY feat_htmlmsg.label "HTML message support">
 <!ENTITY feat_abook.label "Address Book">
 <!ENTITY feat_labels.label "Customizable Labels and Mail Views">
 <!ENTITY feat_integration.label
 "Tight integration with the &brandShortName; application suite">
 <!ENTITY dict.title "Dictionaries">
 <!ENTITY dict_intro.label "Dictionaries are used to check the spelling of your messages.">
--- a/suite/locales/jar.mn
+++ b/suite/locales/jar.mn
@@ -7,16 +7,17 @@
 % locale communicator-platform @AB_CD@ %locale/@AB_CD@/communicator-platform/
 % locale communicator-region @AB_CD@ %locale/@AB_CD@/communicator-region/
 % locale messenger @AB_CD@ %locale/@AB_CD@/messenger/
 % locale messenger-mapi @AB_CD@ %locale/@AB_CD@/messenger-mapi/
 % locale messenger-region @AB_CD@ %locale/@AB_CD@/messenger-region/
 #ifdef MOZ_PSM
 % locale messenger-smime @AB_CD@ %locale/@AB_CD@/messenger-smime/
 #endif
+% locale messenger-newsblog @AB_CD@ %locale/@AB_CD@/messenger-newsblog/
 % locale mozldap @AB_CD@ %locale/@AB_CD@/mozldap/
 % locale navigator @AB_CD@ %locale/@AB_CD@/navigator/
 % locale navigator-platform @AB_CD@ %locale/@AB_CD@/navigator-platform/
 % locale navigator-region @AB_CD@ %locale/@AB_CD@/navigator-region/
   locale/@AB_CD@/branding/brand.dtd                                         (%chrome/branding/brand.dtd)
   locale/@AB_CD@/branding/brand.properties                                  (%chrome/branding/brand.properties)
   locale/@AB_CD@/communicator/askViewZoom.dtd                               (%chrome/common/askViewZoom.dtd)
   locale/@AB_CD@/communicator/consoleOverlay.dtd                            (%chrome/common/consoleOverlay.dtd)
@@ -309,16 +310,21 @@
   locale/@AB_CD@/messenger-smime/msgCompSecurityInfo.properties             (%chrome/mailnews/smime/msgCompSecurityInfo.properties)
   locale/@AB_CD@/messenger-smime/msgCompSMIMEOverlay.dtd                    (%chrome/mailnews/smime/msgCompSMIMEOverlay.dtd)
   locale/@AB_CD@/messenger-smime/msgCompSMIMEOverlay.properties             (%chrome/mailnews/smime/msgCompSMIMEOverlay.properties)
   locale/@AB_CD@/messenger-smime/msgReadSecurityInfo.dtd                    (%chrome/mailnews/smime/msgReadSecurityInfo.dtd)
   locale/@AB_CD@/messenger-smime/msgReadSMIMEOverlay.dtd                    (%chrome/mailnews/smime/msgReadSMIMEOverlay.dtd)
   locale/@AB_CD@/messenger-smime/msgReadSMIMEOverlay.properties             (%chrome/mailnews/smime/msgReadSMIMEOverlay.properties)
   locale/@AB_CD@/messenger-smime/msgSecurityInfo.properties                 (%chrome/mailnews/smime/msgSecurityInfo.properties)
 #endif
+  locale/@AB_CD@/messenger-newsblog/newsblog.properties                     (%chrome/mailnews/newsblog/newsblog.properties)
+  locale/@AB_CD@/messenger-newsblog/feed-subscriptions.dtd                  (%chrome/mailnews/newsblog/feed-subscriptions.dtd)
+  locale/@AB_CD@/messenger-newsblog/feed-properties.dtd                     (%chrome/mailnews/newsblog/feed-properties.dtd)
+  locale/@AB_CD@/messenger-newsblog/am-newsblog.properties                  (%chrome/mailnews/newsblog/am-newsblog.properties)
+  locale/@AB_CD@/messenger-newsblog/am-newsblog.dtd                         (%chrome/mailnews/newsblog/am-newsblog.dtd)
   locale/@AB_CD@/mozldap/ldap.properties                                    (%chrome/mozldap/ldap.properties)
   locale/@AB_CD@/navigator/linkToolbar.dtd                                  (%chrome/browser/linkToolbar.dtd)
   locale/@AB_CD@/navigator/mailNavigatorOverlay.dtd                         (%chrome/browser/mailNavigatorOverlay.dtd)
   locale/@AB_CD@/navigator/metadata.dtd                                     (%chrome/browser/metadata.dtd)
   locale/@AB_CD@/navigator/metadata.properties                              (%chrome/browser/metadata.properties)
   locale/@AB_CD@/navigator/navigator.dtd                                    (%chrome/browser/navigator.dtd)
   locale/@AB_CD@/navigator/navigator.properties                             (%chrome/browser/navigator.properties)
   locale/@AB_CD@/navigator/pageInfo.dtd                                     (%chrome/browser/pageInfo.dtd)
--- a/suite/shell/public/nsIShellService.idl
+++ b/suite/shell/public/nsIShellService.idl
@@ -45,42 +45,43 @@ interface nsIDOMElement;
 interface nsIShellService : nsISupports
 {
   /**
    * app types we can be registered to handle
    */
   const unsigned short BROWSER = 0x0001;
   const unsigned short MAIL    = 0x0002;
   const unsigned short NEWS    = 0x0004;
+  const unsigned short RSS     = 0x0008;
 
   /**
    * Determines whether or not SeaMonkey is the "Default Client" for the
    * passed in app type.
    *
    * This is simply whether or not SeaMonkey is registered to handle
    * the url schemes associated with the app.
    *
    * @param aStartupCheck true if this is the check being performed
    *                      by the first window at startup,
    *                      false otherwise.
-   * @param aApps the application types being tested (Browser, Mail, News)
+   * @param aApps the application types being tested (Browser, Mail, News, RSS)
    */
   boolean isDefaultClient(in boolean aStartupCheck, in unsigned short aApps);
 
   /**
    * Registers SeaMonkey as the "Default Client" for the
    * passed in app types.
    *
    * @param aForAllUsers   Whether or not SeaMonkey should attempt
    *                       to become the default client for all
    *                       users on a multi-user system.
    * @param aClaimAllTypes Register SeaMonkey as the handler for
    *                       additional protocols (ftp, chrome etc)
    *                       and web documents (.html, .xhtml etc).
-   * @param aApps the application types being tested (Mail, News, Browser)
+   * @param aApps the application types being tested (Mail, News, Browser, RSS)
    */
   void setDefaultClient(in boolean aForAllUsers, in boolean aClaimAllTypes, in unsigned short aApps);
 
   /**
    * Used to determine whether or not to show a "Set Default Client"
    * query dialog. This attribute is true if the application is starting
    * up and "shell.checkDefaultClient" is true, otherwise it
    * is false.
--- a/suite/shell/src/nsSetDefault.js
+++ b/suite/shell/src/nsSetDefault.js
@@ -35,16 +35,18 @@
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 /*
  * This component handles the startup command line arguments of the form:
  *   -setDefaultBrowser
  *   -setDefaultMail
+ *   -setDefaultNews
+ *   -setDefaultFeed
  */
 
 const nsIShellService = Components.interfaces.nsIShellService;
 const nsICommandLineHandler = Components.interfaces.nsICommandLineHandler;
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 
 function nsSetDefault() {
 }
@@ -61,21 +63,27 @@ nsSetDefault.prototype = {
                             .getService(nsIShellService);
       shell.setDefaultClient(true, true, nsIShellService.MAIL);
     }
     else if (aCmdline.handleFlag("setDefaultNews", false)) {
       var shell = Components.classes["@mozilla.org/browser/shell-service;1"]
                             .getService(nsIShellService);
       shell.setDefaultClient(true, true, nsIShellService.NEWS);
     }
+    else if (aCmdline.handleFlag("setDefaultFeed", false)) {
+      var shell = Components.classes["@mozilla.org/browser/shell-service;1"]
+                            .getService(nsIShellService);
+      shell.setDefaultClient(true, true, nsIShellService.RSS);
+    }
   },
 
   helpInfo: "  -setDefaultBrowser   Set this app as the default browser client.\n" +
             "  -setDefaultMail      Set this app as the default mail client.\n" +
-            "  -setDefaultNews      Set this app as the default newsreader.\n",
+            "  -setDefaultNews      Set this app as the default newsreader.\n" +
+            "  -setDefaultFeed      Set this app as the default feedreader.\n",
 
   classDescription: "Set Default Suite Cmdline Handler",
   contractID: "@mozilla.org/suite/default-browser-clh;1",
   classID: Components.ID("{A3D5B950-690A-491F-A881-2C2CDCD241CB}"),
   QueryInterface: XPCOMUtils.generateQI([nsICommandLineHandler]),
    _xpcom_categories: [{
      category: "command-line-handler",
      entry: "m-setdefault"
--- a/suite/shell/src/nsWindowsShellService.cpp
+++ b/suite/shell/src/nsWindowsShellService.cpp
@@ -296,16 +296,17 @@ typedef enum {
 #define APP_REG_NAME_MAIL L"SeaMonkey (Mail)"
 #define APP_REG_NAME_NEWS L"SeaMonkey (News)"
 #define CLS "SOFTWARE\\Classes\\"
 #define CLS_HTML "SeaMonkeyHTML"
 #define CLS_URL "SeaMonkeyURL"
 #define CLS_EML "SeaMonkeyEML"
 #define CLS_MAILTOURL "SeaMonkeyCOMPOSE"
 #define CLS_NEWSURL "SeaMonkeyNEWS"
+#define CLS_FEEDURL "SeaMonkeyFEED"
 #define SMI "SOFTWARE\\Clients\\StartMenuInternet\\"
 #define MAILCLIENTS "SOFTWARE\\Clients\\Mail\\"
 #define NEWSCLIENTS "SOFTWARE\\Clients\\News\\"
 #define MOZ_CLIENT_MAIL_KEY "Software\\Clients\\Mail"
 #define MOZ_CLIENT_NEWS_KEY "Software\\Clients\\News"
 #define DI "\\DefaultIcon"
 #define II "\\InstallInfo"
 #define SOP "\\shell\\open\\command"
@@ -489,16 +490,24 @@ static SETTING gBrowserSettings[] = {
      "%APPPATH%,0",
      APP_PATH_SUBSTITUTION | APP_NAME_SUBSTITUTION | HKLM_ONLY },
    { MAKE_KEY_NAME2(NEWSCLIENTS, "%APPNAME%", SOP),
      "",
      "\"%APPPATH%\" -mail",
      APP_PATH_SUBSTITUTION | APP_NAME_SUBSTITUTION | HKLM_ONLY },
 };
 
+ static SETTING gFeedSettings[] = {
+   // Protocol Handler Class - for Vista and above
+   { MAKE_KEY_NAME1(CLS_FEEDURL, SOP), "", "\"%APPPATH%\" -osint -mail \"%1\"", APP_PATH_SUBSTITUTION },
+
+   // Protocol Handlers
+   { MAKE_KEY_NAME1("feed", SOP), "", "\"%APPPATH%\" -osint -mail \"%1\"", APP_PATH_SUBSTITUTION },
+};
+
 /* helper routine. Iterate over the passed in settings object,
    testing each key with the USE_FOR_DEFAULT_TEST to see if
    we are handling it.
 */
 PRBool
 nsWindowsShellService::TestForDefault(SETTING aSettings[], PRInt32 aSize)
 {
   nsCOMPtr<nsILocalFile> lf;
@@ -696,16 +705,19 @@ nsWindowsShellService::IsDefaultClient(P
   // browser check needs to be at the top
   if (aApps & nsIShellService::BROWSER)
     *aIsDefaultClient &= TestForDefault(gBrowserSettings, sizeof(gBrowserSettings)/sizeof(SETTING));
 #ifdef MOZ_MAIL_NEWS
   if (aApps & nsIShellService::MAIL)
     *aIsDefaultClient &= TestForDefault(gMailSettings, sizeof(gMailSettings)/sizeof(SETTING));
   if (aApps & nsIShellService::NEWS)
     *aIsDefaultClient &= TestForDefault(gNewsSettings, sizeof(gNewsSettings)/sizeof(SETTING));
+  // RSS / feed protocol shell integration is to be completed in bug 453797.
+  // if (aApps & nsIShellService::RSS)
+  //  *aIsDefaultClient &= TestForDefault(gFeedSettings, sizeof(gFeedSettings)/sizeof(SETTING));
 #endif
 
   // If this is the first application window, maintain internal state that we've
   // checked this session (so that subsequent window opens don't show the
   // default client dialog).
   if (aStartupCheck)
     mCheckedThisSessionClient = PR_TRUE;
 
--- a/suite/themes/classic/jar.mn
+++ b/suite/themes/classic/jar.mn
@@ -1,14 +1,15 @@
 classic.jar:
 % skin communicator classic/1.0 %skin/classic/communicator/
 % skin editor classic/1.0 %skin/classic/editor/
 % skin global classic/1.0 %skin/classic/global/
 % skin messenger classic/1.0 %skin/classic/messenger/
 % skin navigator classic/1.0 %skin/classic/navigator/
+% skin messenger-newsblog classic/1.0 %skin/classic/messenger-newsblog/
   skin/classic/communicator/tasksOverlay.css                            (communicator/tasksOverlay.css)
 #ifdef XP_MACOSX
   skin/classic/communicator/button.css                                  (communicator/mac/button.css)
 #else
   skin/classic/communicator/button.css                                  (communicator/win/button.css)
 #endif
   skin/classic/communicator/brand.css                                   (communicator/brand.css)
   skin/classic/communicator/dialogs.css                                 (communicator/dialogs.css)
@@ -286,16 +287,17 @@ classic.jar:
   skin/classic/messenger/smime/icons/sbSignNotOk.gif                    (messenger/smime/icons/sbSignNotOk.gif)
   skin/classic/messenger/smime/icons/sbCryptoOk.gif                     (messenger/smime/icons/sbCryptoOk.gif)
   skin/classic/messenger/smime/icons/sbCryptoNotOk.gif                  (messenger/smime/icons/sbCryptoNotOk.gif)
   skin/classic/messenger/smime/icons/hdrSignOk.gif                      (messenger/smime/icons/hdrSignOk.gif)
   skin/classic/messenger/smime/icons/hdrSignUnknown.gif                 (messenger/smime/icons/hdrSignUnknown.gif)
   skin/classic/messenger/smime/icons/hdrSignNotOk.gif                   (messenger/smime/icons/hdrSignNotOk.gif)
   skin/classic/messenger/smime/icons/hdrCryptoOk.gif                    (messenger/smime/icons/hdrCryptoOk.gif)
   skin/classic/messenger/smime/icons/hdrCryptoNotOk.gif                 (messenger/smime/icons/hdrCryptoNotOk.gif)
+  skin/classic/messenger-newsblog/feed-subscriptions.css                (messenger/newsblog/feed-subscriptions.css)
   skin/classic/navigator/navigator.css                                  (navigator/navigator.css)
   skin/classic/navigator/linkToolbar.css                                (navigator/linkToolbar.css)
   skin/classic/navigator/pageInfo.css                                   (navigator/pageInfo.css)
 #ifdef XP_MACOSX
   skin/classic/navigator/tabbrowser.css                                 (navigator/mac/tabbrowser.css)
 #else
   skin/classic/navigator/tabbrowser.css                                 (navigator/win/tabbrowser.css)
 #endif
--- a/suite/themes/classic/messenger/accountCentral.css
+++ b/suite/themes/classic/messenger/accountCentral.css
@@ -113,16 +113,20 @@ separator.thin {
 #SubscribeNewsgroups {
   list-style-image: url("chrome://messenger/skin/icons/acct-subscribe.png");
 }
 
 #SubscribeImapFolders {
   list-style-image: url("chrome://messenger/skin/icons/acct-subscribe.png");
 }
 
+#SubscribeRSS {
+  list-style-image: url("chrome://messenger/skin/icons/acct-subscribe.png");
+}
+
 #SearchMessages {
   list-style-image: url("chrome://messenger/skin/icons/acct-search.png");
 }
 
 #AccountSettings {
   list-style-image: url("chrome://messenger/skin/icons/acct-prefs.png");
 }
 
--- a/suite/themes/classic/messenger/folderMenus.css
+++ b/suite/themes/classic/messenger/folderMenus.css
@@ -47,16 +47,21 @@
 .folderMenuItem {
   list-style-image: url("chrome://messenger/skin/icons/folder-closed.png");
 }
 
 .folderMenuItem[open="true"] {
 list-style-image: url("chrome://messenger/skin/icons/folder-open.png");
 }
 
+.folderMenuItem[ServerType="rss"],
+.folderMenuItem[ServerType="nntp"] {
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
+}
+
 /* ..... special folders ..... */
 
 .folderMenuItem[SpecialFolder="Inbox"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox.png");
 }
 
 .folderMenuItem[SpecialFolder="Inbox"][open="true"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox-open.png");
@@ -101,44 +106,41 @@ list-style-image: url("chrome://messenge
 .folderMenuItem[SpecialFolder="Trash"][open="true"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-trash-open.png");
 }
 
 .folderMenuItem[SpecialFolder="Virtual"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-search.png");
 }
 
+/* ..... servers ..... */
+
 .folderMenuItem[IsServer="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
 }
 
 .folderMenuItem[IsServer="true"][open="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
 }
 
-/* IMAP folders */
 .folderMenuItem[IsServer="true"][ServerType="imap"][IsSecure="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.png");
 }
 
-/* POP3 folders */
 .folderMenuItem[IsServer="true"][ServerType="pop3"][IsSecure="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.png");
 }
 
-/* Local Servers */
 .folderMenuItem[IsServer="true"][ServerType="none"] {
   list-style-image: url("chrome://messenger/skin/icons/server-local.png");
 }
 
-/* News folders */
-.folderMenuItem[ServerType="nntp"] {
-  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
+.folderMenuItem[IsServer="true"][ServerType="nntp"] {
+  list-style-image: url("chrome://messenger/skin/icons/server-news.png");
 }
 
 .folderMenuItem[IsServer="true"][ServerType="nntp"][IsSecure="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-news-lock.png");
 }
 
-.folderMenuItem[IsServer="true"][ServerType="nntp"] {
-  list-style-image: url("chrome://messenger/skin/icons/server-news.png");
+.folderMenuItem[IsServer="true"][ServerType="rss"] {
+  list-style-image: url("chrome://communicator/skin/icons/feedIcon16.png");
 }
-
--- a/suite/themes/classic/messenger/folderPane.css
+++ b/suite/themes/classic/messenger/folderPane.css
@@ -51,16 +51,28 @@ treechildren::-moz-tree-image(folderName
   margin-right: 2px;
   list-style-image: url("chrome://messenger/skin/icons/folder-closed.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, newMessages-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-new.png");
 }
 
+/* ..... News and Feeds ..... */
+
+treechildren::-moz-tree-image(folderNameCol, serverType-nntp),
+treechildren::-moz-tree-image(folderNameCol, serverType-rss) {
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
+}
+
+treechildren::-moz-tree-image(folderNameCol, serverType-nntp, newMessages-true),
+treechildren::-moz-tree-image(folderNameCol, serverType-rss, newMessages-true) {
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup-new.png");
+}
+
 /* ..... Inbox ..... */
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Inbox) {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox-new.png");
@@ -103,35 +115,34 @@ treechildren::-moz-tree-image(folderName
 }
 
 /* ..... Saved Searches ..... */
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Virtual) {
   list-style-image: url("chrome://messenger/skin/icons/folder-search.png");
 }
 
-treechildren::-moz-tree-image(folderNameCol, isServer-true) {
-  list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
-}
-
-treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true) {
-  list-style-image: url("chrome://messenger/skin/icons/server-mail-new.png");
-}
-
 treechildren::-moz-tree-cell-text(folderNameCol, newMessages-true),
 treechildren::-moz-tree-cell-text(folderNameCol, specialFolder-Inbox, newMessages-true) {
   font-weight: bold;
 }
 
 treechildren::-moz-tree-image(folderNameCol, imapShared-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-share.png");
 }
 
+/* ..... Server Folders ..... */
 
-/* ..... Server Folders ..... */
+treechildren::-moz-tree-image(folderNameCol, isServer-true) {
+  list-style-image: url("chrome://messenger/skin/icons/server-mail.png");
+}
+
+treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true) {
+  list-style-image: url("chrome://messenger/skin/icons/server-mail-new.png");
+}
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.png");
 }
@@ -139,30 +150,28 @@ treechildren::-moz-tree-image(folderName
 treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock-new.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-none) {
   list-style-image: url("chrome://messenger/skin/icons/server-local.png");
 }
 
-/* ..... News Folders ..... */
-
-treechildren::-moz-tree-image(folderNameCol, serverType-nntp) {
-  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
-}
-
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-nntp) {
   list-style-image: url("chrome://messenger/skin/icons/server-news.png");
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-news-lock.png");
 }
 
+treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-rss) {
+  list-style-image: url("chrome://communicator/skin/icons/feedIcon16.png");
+}
+
 /* ::::: All Servers ::::: */
 
 treechildren::-moz-tree-cell-text(closed, subfoldersHaveUnreadMessages-true) {
   font-weight: bold;
 }
 
 treechildren::-moz-tree-cell-text(folderNameCol, isServer-true),
 treechildren::-moz-tree-cell-text(hasUnreadMessages-true) {
--- a/suite/themes/classic/messenger/messageBody.css
+++ b/suite/themes/classic/messenger/messageBody.css
@@ -159,8 +159,16 @@ span.moz-txt-formfeed {
 .moz-attached-image[overflowing="true"] { 
   cursor: -moz-zoom-out;
 }
 
 .moz-attached-image[isshrunk="true"] { 
   cursor: -moz-zoom-in;
   max-width: 100%;
 }
+
+/* Correct style for messages already converted from RSS to HTML email;
+   see bug 363154. */
+    
+#\_mailrssiframe {
+  width: 100%;
+  height: 100%;
+}
copy from mail/themes/pinstripe/mail/newsblog/feed-subscriptions.css
copy to suite/themes/classic/messenger/newsblog/feed-subscriptions.css
--- a/mail/themes/pinstripe/mail/newsblog/feed-subscriptions.css
+++ b/suite/themes/classic/messenger/newsblog/feed-subscriptions.css
@@ -33,17 +33,17 @@
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ****** */
 
 /* ::::: Feed Subscription UI icons :::::: */
 
-#subscriptionsDialog { 
+#contentPane {
   padding: 14px;
 }
 
 #subscriptionChildren::-moz-tree-image(folderNameCol) {
   margin-right: 2px;
   list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
 }
 
@@ -57,16 +57,11 @@
 
 #rssFeedInfoBox {
   border: 1px solid ThreeDShadow;
   -moz-border-radius: 0px;
   margin: 4px;
   padding: 0px;
 }
 
-#rssFeedInfoBox textbox {
-  background-color: transparent;
+#backgroundBox {
+  background-color: ThreeDLightShadow;
 }
-
-#backgroundBox {
-  background-color: #FFFFFF; 
-  opacity: 0.5;
-}
--- a/suite/themes/classic/messenger/threadPane.css
+++ b/suite/themes/classic/messenger/threadPane.css
@@ -217,28 +217,30 @@ treechildren::-moz-tree-image(subjectCol
 tree[noattachcol="true"] > treechildren::-moz-tree-image(subjectCol, attach, offline) {
   list-style-image: url("chrome://messenger/skin/icons/message-mail-attach-offl.png");
 }
 
 treechildren::-moz-tree-image(subjectCol, imapdeleted, offline) {
   list-style-image: url("chrome://messenger/skin/icons/message-mail-delete-offl.png");
 }
 
+treechildren::-moz-tree-image(subjectCol, rss),
 treechildren::-moz-tree-image(subjectCol, news) {
   list-style-image: url("chrome://messenger/skin/icons/message-news.png");
 }
 
 tree[noattachcol="true"] > treechildren::-moz-tree-image(subjectCol, news, attach) {
   list-style-image: url("chrome://messenger/skin/icons/message-news-attach.png");
 }
 
 tree[noattachcol="true"] > treechildren::-moz-tree-image(subjectCol, news, attach, offline) {
   list-style-image: url("chrome://messenger/skin/icons/message-news-attach-offl.png");
 }
 
+treechildren::-moz-tree-image(subjectCol, rss, new),
 treechildren::-moz-tree-image(subjectCol, news, new) {
   list-style-image: url("chrome://messenger/skin/icons/message-news-new.png");
 }
 
 tree[noattachcol="true"] > treechildren::-moz-tree-image(subjectCol, news, new, attach) {
   list-style-image: url("chrome://messenger/skin/icons/message-news-new-attach.png");
 }
 
--- a/suite/themes/modern/global/textbox.css
+++ b/suite/themes/modern/global/textbox.css
@@ -99,16 +99,17 @@ textbox[disabled="true"] {
 
 textbox[readonly="true"] {
   background-color: #C7D0D9;
 }
 
 /* ::::: plain textbox ::::: */
 
 textbox.plain {
+  background-color: transparent;
   margin: 0px !important;
   border: none !important;
   padding: 0px !important;
 }
 
 /* ::::: search textbox ::::: */
 
 .textbox-search-icon {
--- a/suite/themes/modern/jar.mn
+++ b/suite/themes/modern/jar.mn
@@ -1,15 +1,16 @@
 modern.jar:
 % skin communicator modern/1.0 %skin/modern/communicator/
 % skin editor modern/1.0 %skin/modern/editor/
 % skin global modern/1.0 %skin/modern/global/
 % skin help modern/1.0 %skin/modern/help/
 % skin messenger modern/1.0 %skin/modern/messenger/
 % skin navigator modern/1.0 %skin/modern/navigator/
+% skin messenger-newsblog modern/1.0 %skin/modern/messenger-newsblog/
   skin/modern/communicator/brand.css                               (communicator/brand.css)
   skin/modern/communicator/prefpanels.css                          (communicator/prefpanels.css)
   skin/modern/communicator/preferences.css                         (communicator/preferences.css)
   skin/modern/communicator/tasksOverlay.css                        (communicator/tasksOverlay.css)
   skin/modern/communicator/button.css                              (communicator/button.css)
   skin/modern/communicator/toolbar.css                             (communicator/toolbar.css)
   skin/modern/communicator/dialogs.css                             (communicator/dialogs.css)
   skin/modern/communicator/helpOverlay.css                         (communicator/helpOverlay.css)
@@ -437,16 +438,17 @@ modern.jar:
   skin/modern/messenger/smime/icons/sbSignNotOk.gif                (messenger/smime/icons/sbSignNotOk.gif)
   skin/modern/messenger/smime/icons/sbCryptoOk.gif                 (messenger/smime/icons/sbCryptoOk.gif)
   skin/modern/messenger/smime/icons/sbCryptoNotOk.gif              (messenger/smime/icons/sbCryptoNotOk.gif)
   skin/modern/messenger/smime/icons/hdrSignOk.gif                  (messenger/smime/icons/hdrSignOk.gif)
   skin/modern/messenger/smime/icons/hdrSignUnknown.gif             (messenger/smime/icons/hdrSignUnknown.gif)
   skin/modern/messenger/smime/icons/hdrSignNotOk.gif               (messenger/smime/icons/hdrSignNotOk.gif)
   skin/modern/messenger/smime/icons/hdrCryptoOk.gif                (messenger/smime/icons/hdrCryptoOk.gif)
   skin/modern/messenger/smime/icons/hdrCryptoNotOk.gif             (messenger/smime/icons/hdrCryptoNotOk.gif)
+  skin/modern/messenger-newsblog/feed-subscriptions.css            (messenger/newsblog/feed-subscriptions.css)
   skin/modern/navigator/linkToolbar.css                            (navigator/linkToolbar.css)
   skin/modern/navigator/navigator.css                              (navigator/navigator.css)
   skin/modern/navigator/pageInfo.css                               (navigator/pageInfo.css)
   skin/modern/navigator/tabbrowser.css                             (navigator/tabbrowser.css)
   skin/modern/navigator/btn1/feeds.png                             (navigator/btn1/feeds.png)
   skin/modern/navigator/btn1/first-dis.gif                         (navigator/btn1/first-dis.gif)
   skin/modern/navigator/btn1/first-hov.gif                         (navigator/btn1/first-hov.gif)
   skin/modern/navigator/btn1/first.gif                             (navigator/btn1/first.gif)
--- a/suite/themes/modern/messenger/accountCentral.css
+++ b/suite/themes/modern/messenger/accountCentral.css
@@ -112,16 +112,20 @@ separator.thin {
 #SubscribeNewsgroups {
   list-style-image: url("chrome://messenger/skin/icons/acct-subscribe.gif");
 }
 
 #SubscribeImapFolders {
   list-style-image: url("chrome://messenger/skin/icons/acct-subscribe.gif");
 }
 
+#SubscribeRSS {
+  list-style-image: url("chrome://messenger/skin/icons/acct-subscribe.gif");
+}
+
 #SearchMessages {
   list-style-image: url("chrome://messenger/skin/icons/acct-search.gif");
 }
 
 #AccountSettings {
   list-style-image: url("chrome://messenger/skin/icons/acct-prefs.gif");
 }
 
--- a/suite/themes/modern/messenger/folderMenus.css
+++ b/suite/themes/modern/messenger/folderMenus.css
@@ -46,16 +46,21 @@
 .folderMenuItem {
   list-style-image: url("chrome://messenger/skin/icons/folder-closed.gif");
 }
 
 .folderMenuItem[open="true"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-open.gif");
 }
 
+.folderMenuItem[ServerType="rss"],
+.folderMenuItem[ServerType="nntp"] {
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
+}
+
 /* ..... special folders ..... */
 
 .folderMenuItem[SpecialFolder="Inbox"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox.gif");
 }
 
 .folderMenuItem[SpecialFolder="Inbox"][open="true"] {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox-open.gif");
@@ -118,21 +123,19 @@
 .folderMenuItem[IsServer="true"][ServerType="pop3"][IsSecure="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.gif");
 }
 
 .folderMenuItem[IsServer="true"][ServerType="none"] {
   list-style-image: url("chrome://messenger/skin/icons/server-local.gif");
 }
 
-/* ..... newsgroups ..... */
+.folderMenuItem[IsServer="true"][ServerType="nntp"] {
+  list-style-image: url("chrome://messenger/skin/icons/server-news.gif");
+}
 
 .folderMenuItem[IsServer="true"][ServerType="nntp"][IsSecure="true"] {
   list-style-image: url("chrome://messenger/skin/icons/server-news-lock.gif");
 }
 
-.folderMenuItem[IsServer="true"][ServerType="nntp"] {
-  list-style-image: url("chrome://messenger/skin/icons/server-news.gif");
+.folderMenuItem[IsServer="true"][ServerType="rss"] {
+  list-style-image: url("chrome://communicator/skin/icons/feedIcon16.png");
 }
-
-.folderMenuItem[ServerType="nntp"] {
-  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
-}
--- a/suite/themes/modern/messenger/folderPane.css
+++ b/suite/themes/modern/messenger/folderPane.css
@@ -49,16 +49,28 @@ treechildren::-moz-tree-image(folderName
   margin-right: 2px;
   list-style-image: url("chrome://messenger/skin/icons/folder-closed.gif");
 }
 
 treechildren::-moz-tree-image(folderNameCol, newMessages-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-new.gif");
 }
 
+/* ..... News and Feeds ..... */
+
+treechildren::-moz-tree-image(folderNameCol, serverType-nntp),
+treechildren::-moz-tree-image(folderNameCol, serverType-rss) {
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
+}
+
+treechildren::-moz-tree-image(folderNameCol, serverType-nntp, newMessages-true),
+treechildren::-moz-tree-image(folderNameCol, serverType-rss, newMessages-true) {
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup-new.gif");
+}
+
 /* ..... Inbox ..... */
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Inbox) {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox.gif");
 }
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-inbox-new.gif");
@@ -84,38 +96,38 @@ treechildren::-moz-tree-image(folderName
 
 /* ..... Unsent Messages ..... */
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Unsent Messages) {
   list-style-image: url("chrome://messenger/skin/icons/folder-outbox.gif");
 }
 
 /* ..... Junk ..... */
-
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Junk) {
   list-style-image: url("chrome://messenger/skin/icons/folder-junk.gif");
 }
 
 /* ..... Trash ..... */
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Trash) {
   list-style-image: url("chrome://messenger/skin/icons/folder-trash.gif");
 }
 
 /* ..... Saved Searches ..... */
 
 treechildren::-moz-tree-image(folderNameCol, specialFolder-Virtual) {
   list-style-image: url("chrome://messenger/skin/icons/folder-search.gif");
 }
 
+/* ...... Shared ..... */
+
 treechildren::-moz-tree-image(folderNameCol, imapShared-true) {
   list-style-image: url("chrome://messenger/skin/icons/folder-share.gif");
 }
 
-
 /* ..... Server Folders ..... */
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-mail.gif");
 }
 
 treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-mail-new.gif");
@@ -132,32 +144,28 @@ treechildren::-moz-tree-image(folderName
 treechildren::-moz-tree-image(folderNameCol, biffState-NewMail, isServer-true, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-remote-lock-new.gif");
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-none) {
   list-style-image: url("chrome://messenger/skin/icons/server-local.gif");
 }
 
-/* ..... News Folders ..... */
-
-treechildren::-moz-tree-image(folderNameCol, serverType-nntp) {
-  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
-}
-
-/* ..... News Servers ..... */
-
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-nntp) {
   list-style-image: url("chrome://messenger/skin/icons/server-news.gif");
 }
 
 treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
   list-style-image: url("chrome://messenger/skin/icons/server-news-lock.gif");
 }
 
+treechildren::-moz-tree-image(folderNameCol, isServer-true, serverType-rss) {
+  list-style-image: url("chrome://communicator/skin/icons/feedIcon16.png");
+}
+
 /* ::::: All Servers ::::: */
 
 treechildren::-moz-tree-cell-text(closed, subfoldersHaveUnreadMessages-true)
 {
   font-weight: bold;
 }
 
 treechildren::-moz-tree-cell-text(folderNameCol, isServer-true),
--- a/suite/themes/modern/messenger/messageBody.css
+++ b/suite/themes/modern/messenger/messageBody.css
@@ -162,8 +162,16 @@ span.moz-txt-formfeed {
 .moz-attached-image[overflowing="true"] { 
   cursor: -moz-zoom-out;
 }
 
 .moz-attached-image[isshrunk="true"] { 
   cursor: -moz-zoom-in;
   max-width: 100%;
 }
+
+/* Correct style for messages already converted from RSS to HTML email;
+   see bug 363154. */
+
+#\_mailrssiframe {
+  width: 100%;
+  height: 100%;
+}
copy from mail/themes/pinstripe/mail/newsblog/feed-subscriptions.css
copy to suite/themes/modern/messenger/newsblog/feed-subscriptions.css
--- a/mail/themes/pinstripe/mail/newsblog/feed-subscriptions.css
+++ b/suite/themes/modern/messenger/newsblog/feed-subscriptions.css
@@ -33,40 +33,35 @@
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ****** */
 
 /* ::::: Feed Subscription UI icons :::::: */
 
-#subscriptionsDialog { 
+#contentPane {
   padding: 14px;
 }
 
 #subscriptionChildren::-moz-tree-image(folderNameCol) {
   margin-right: 2px;
-  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.png");
+  list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
 }
 
 #subscriptionChildren::-moz-tree-image(folderNameCol, container) {
-  list-style-image: url("chrome://messenger/skin/icons/folder-closed.png");
+  list-style-image: url("chrome://messenger/skin/icons/folder-closed.gif");
 }
 
 #subscriptionChildren::-moz-tree-image(folderNameCol, container, open) {
-  list-style-image: url("chrome://messenger/skin/icons/folder-open.png");
+  list-style-image: url("chrome://messenger/skin/icons/folder-open.gif");
 }
 
 #rssFeedInfoBox {
-  border: 1px solid ThreeDShadow;
+  border: 1px solid #2D3B49;
   -moz-border-radius: 0px;
   margin: 4px;
   padding: 0px;
 }
 
-#rssFeedInfoBox textbox {
-  background-color: transparent;
+#backgroundBox {
+  background-color: #BBC6D1;
 }
-
-#backgroundBox {
-  background-color: #FFFFFF; 
-  opacity: 0.5;
-}
--- a/suite/themes/modern/messenger/threadPane.css
+++ b/suite/themes/modern/messenger/threadPane.css
@@ -252,28 +252,30 @@ treechildren::-moz-tree-image(subjectCol
 tree[noattachcol="true"] > treechildren::-moz-tree-image(subjectCol, attach, offline) {
   list-style-image: url("chrome://messenger/skin/icons/message-mail-attach-offl.gif");
 }
 
 treechildren::-moz-tree-image(subjectCol, imapdeleted, offline) {
   list-style-image: url("chrome://messenger/skin/icons/message-mail-delete-offl.gif");
 }
 
+treechildren::-moz-tree-image(subjectCol, rss),
 treechildren::-moz-tree-image(subjectCol, news) {
   list-style-image: url("chrome://messenger/skin/icons/message-news.gif");
 }
 
 tree[noattachcol="true"] > treechildren::-moz-tree-image(subjectCol, news, attach) {
   list-style-image: url("chrome://messenger/skin/icons/message-news-attach.gif");
 }
 
 tree[noattachcol="true"] > treechildren::-moz-tree-image(subjectCol, news, attach, offline) {
   list-style-image: url("chrome://messenger/skin/icons/message-news-attach-offl.gif");
 }
 
+treechildren::-moz-tree-image(subjectCol, rss, new),
 treechildren::-moz-tree-image(subjectCol, news, new) {
   list-style-image: url("chrome://messenger/skin/icons/message-news-new.gif");
 }
 
 tree[noattachcol="true"] > treechildren::-moz-tree-image(subjectCol, news, new, attach) {
   list-style-image: url("chrome://messenger/skin/icons/message-news-new-attach.gif");
 }