Index: webroot/css/amo2009/developers.css
===================================================================
--- webroot/css/amo2009/developers.css	(revision 52419)
+++ webroot/css/amo2009/developers.css	(working copy)
@@ -801,12 +801,10 @@
 .addon-feed-loading {
     float: right;
     display: none;
-    padding: 24px 24px 10px 10px;
 }
 
 .html-rtl .addon-feed-loading {
     float: left;
-    padding: 24px 10px 10px 24px;
 }
 
 .secondary .addon-list {
@@ -857,6 +855,14 @@
     margin-top:0;
 }
 
+.addon-feed img.rss-icon {
+    float: right;
+}
+
+.html-rtl .addon-feed img.rss-icon {
+    float: left;
+}
+
 .addon-events {
     margin: 0;
     min-height: 240px;
Index: controllers/devhub_controller.php
===================================================================
--- controllers/devhub_controller.php	(revision 52419)
+++ controllers/devhub_controller.php	(working copy)
@@ -47,24 +47,31 @@
 
         if(isset($_GET['addon']) && isset($all_addons[$_GET['addon']])) {
             $feed['type'] = 'addon';
-            $feed['feed'] = array();
             $feed['feed'] = $this->Hub->getNewsForAddons(array($_GET['addon']));
             $feed['addon'] = htmlspecialchars($all_addons[$_GET['addon']]);
+            $feed['rss_url'] = $this->_feedRssUrl($session['id'], $_GET['addon']);
+            $feed['rss_title'] = sprintf(___('News Feed for %1$s'), $feed['addon']);
             $active_addon_id = $_GET['addon'];
         } else {
             $feed['type'] = 'full';
             $feed['feed'] = $this->Hub->getNewsForAddons(array_keys($all_addons));
             $feed['addon'] = false;
+            $feed['rss_url'] = empty($session['id']) ? false : $this->_feedRssUrl($session['id']);
+            $feed['rss_title'] = ___('News Feed for My Add-ons');
             $active_addon_id = false;
         }
 
         // Ajax requests get add-on news only
         if ($this->isAjax()) {
+            $this->autoRender = False;
             print $this->renderElement('amo2009/hub/promo_feed', array(
                 'feed' => $feed['feed'],
                 'limit' => 4,
                 'addon_id' => $active_addon_id,
                 'addon' => $feed['addon'],
+                'rss_url' => $feed['rss_url'],
+                'rss_title' => $feed['rss_title'],
+                'show_login' => !$is_developer,
             ));
             return;
         }
@@ -221,7 +228,30 @@
         $this->publish('rssAdd', $rssAdd);
     }
 
+    /**
+     * Lookup a private RSS newsfeed URL by add-on or user
+     *
+     * @param int $user_id
+     * @param mixed $addon_id integer or 'all' for all user's add-ons
+     * @param string $filter optional filter to include in querystring
+     * @return mixed string url or false on key generation failure
+     */
+    function _feedRssUrl($user_id, $addon_id='all', $filter='') {
+        if ($addon_id == 'all') {
+            $rss_key = $this->HubRssKey->getKeyForUser($user_id);
+        } else {
+            $rss_key = $this->HubRssKey->getKeyForAddon($addon_id);
+        }
 
+        if ($rss_key) {
+            $rss_url = "/developers/feed/{$addon_id}?";
+            $rss_url .= ($filter ? "filter={$filter}&" : '') . "privaterss={$rss_key}";
+            return $rss_url;
+        } else {
+            return false;
+        }
+    }
+
     /**
      * Add-on news feed RSS
      *
Index: views/elements/amo2009/hub/promo_feed.thtml
===================================================================
--- views/elements/amo2009/hub/promo_feed.thtml	(revision 52419)
+++ views/elements/amo2009/hub/promo_feed.thtml	(working copy)
@@ -43,18 +43,29 @@
  *  $limit integer specifying the maximim number of events to render
  *  $addon_id integer or false if events are for multiple addons
  *  $addon string name of add-on specified by $addon_id
+ *  $rss_url string URL of RSS feed
+ *  $rss_title string title of RSS feed
+ *  $show_login bool (optional) if set and true, show login message instead of feed
  */
 
+    $show_login = empty($show_login) ? false : true;
     $length = count($feed) > $limit ? $limit : count($feed); 
 ?>
-<div class="addon-feed-loading">
-    <img src="<?=$html->urlImage('ajax_loading.gif')?>" width="15" height="15" alt="loading" >
-</div>
 <div class="addon-feed">
+<?php if ($show_login): ?>
+    <h3><?=sprintf(___('Please <a href="%1$s">log in</a> to view add-on news feeds.'),
+                    $html->url($html->login_url('/developers', false)))?></h3>
+<?php else: ?>
     <h3>
+        <?php if (!empty($rss_url)): ?>
+        <?=$html->linkNoApp('<img src="'.$html->urlImage('amo2009/icons/rss.png').'" class="rss-icon" '
+            .'width="16" height="16" alt="'.sprintf(___('Subscribe to %1$s'), $rss_title).'" />',
+            $rss_url)?>
+        <?php endif; ?>
+        <img src="<?=$html->urlImage('ajax_loading.gif')?>" class="addon-feed-loading" width="15" height="15" alt="<?=___('Loading data...')?>" />
         <?php if ($addon_id): ?>
             <?=sprintf(___('Recent Activity for <a href="%1$s">%2$s</a>'),
-                $html->url('/developers/feed/'.$addon_id), $addon)?>
+                $html->url('/addon/'.$addon_id), $addon)?>
         <?php else: ?>
             <?=sprintf(___('Recent Activity for <a href="%1$s">All Add-ons</a>'), 
                 $html->url('/developers/feed/all'))?>
@@ -85,8 +96,9 @@
         </li>
     <?php endif; ?>
     </ul>
+<?php endif; ?>
 </div>
-<?php if ($addon_id): ?>
+<?php if ($addon_id && !$show_login): ?>
 <ul class="addon-info">
     <li><?=$html->linkNoApp(___('Edit Add-on'),
                             '/developers/addon/edit/'.$addon_id,
Index: views/elements/amo2009/hub/promo_developer.thtml
===================================================================
--- views/elements/amo2009/hub/promo_developer.thtml	(revision 52419)
+++ views/elements/amo2009/hub/promo_developer.thtml	(working copy)
@@ -69,6 +69,8 @@
         <div class="addon-feed-wrapper">
             <?=$this->renderElement('amo2009/hub/promo_feed', array(
                                         'feed'     => $feed['feed'],
+                                        'rss_url'  => $feed['rss_url'],
+                                        'rss_title'=> $feed['rss_title'],
                                         'limit'    => 4,
                                         'addon_id' => $active_addon_id,
                                         'addon'    => $feed['addon']))?>
@@ -81,6 +83,7 @@
     $(document).ready(function() {
         // fetch recent activity for clicked add-on
         $('.addon-list li:not(.more) a').click(function(){
+            $('.rss-icon').hide();
             $('.addon-feed-loading').show();
             var li = $(this).parent();
             $.get($(this).attr('href'), function(data, status){
@@ -89,7 +92,6 @@
                     $('.addon-list li:not(.more)').removeClass('active');
                     $(li).addClass('active');
                 }
-                $('.addon-feed-loading').hide();
             }, 'html');
             return false;
         });
