diff --git a/reviewboard/static/rb/css/pages/diffviewer.less b/reviewboard/static/rb/css/pages/diffviewer.less
index 7b8bfe51c6f4d6edb5f6d30fd051850b3dc17311..8a13f43aee59b79e2b07481a38121682ee60c218 100644
--- a/reviewboard/static/rb/css/pages/diffviewer.less
+++ b/reviewboard/static/rb/css/pages/diffviewer.less
@@ -598,6 +598,22 @@
     padding-left: 30px;
   }
 
+  .diff-banner {
+    padding-bottom: 4em;
+
+    .banner {
+      border-left: 0;
+      border-right: 0;
+      border-top: 0;
+      margin-bottom: 0px;
+      box-shadow: @box-shadow;
+      left: 0;
+      position: fixed;
+      width: 100%;
+      z-index: @z-index-banner;
+    }
+  }
+
   .diff-container {
     margin-bottom: 1em;
     position: relative;
diff --git a/reviewboard/static/rb/js/pages/views/diffViewerPageView.js b/reviewboard/static/rb/js/pages/views/diffViewerPageView.js
index 99464ac742c3ce68036580599780381f94244302..092153660242bc5f3f54c79f2a49989f08e7ab9a 100644
--- a/reviewboard/static/rb/js/pages/views/diffViewerPageView.js
+++ b/reviewboard/static/rb/js/pages/views/diffViewerPageView.js
@@ -215,12 +215,25 @@ RB.DiffViewerPageView = RB.ReviewablePageView.extend({
         this._chunkHighlighter = new RB.ChunkHighlighterView();
         this._chunkHighlighter.render().$el.prependTo($diffs);
 
+        this.floatingBannerView = new RB.FloatingBannerView({
+            el: $('.diff-banner').find('.banner'),
+            $floatContainer: $('.diff-container'),
+            collection: this.model.get('files')
+        });
+        this.floatingBannerView.render().$el.prependTo($diffs);
+
         $('#diff-details').removeClass('loading');
 
         return this;
     },
 
     _fileEntryTemplate: _.template([
+        '<div class="diff-banner">',
+        ' <div class="banner">',
+        '  <h1>Navigate: </h1>',
+        '  <div id="diff-banner-navigate-container" class="split-btn"></div>',
+        ' </div>',
+        '</div>',
         '<div class="diff-container">',
         ' <div class="diff-box">',
         '  <table class="sidebyside loading <% if (newfile) { %>newfile<% } %>"',
diff --git a/reviewboard/static/rb/js/views/floatingBannerView.js b/reviewboard/static/rb/js/views/floatingBannerView.js
index e96f2f880a4a94beefe8614ae0837f9c60e0decb..d46a192fa59240599065b6b0d03bd7222c08e435 100644
--- a/reviewboard/static/rb/js/views/floatingBannerView.js
+++ b/reviewboard/static/rb/js/views/floatingBannerView.js
@@ -10,8 +10,19 @@
  */
 RB.FloatingBannerView = Backbone.View.extend({
     initialize: function() {
+        this._$items = [];
         this._$floatSpacer = null;
 
+        this.collection = this.options.collection;
+
+        this.collection.each(function(file) {
+            this._$items.push({
+                text: gettext(file.get('destFilename')),
+                click: _.bind(this._onNavigateClicked, this, file.get('index')),
+                id: 'diff-banner-navigate-anchor'
+            });
+        }, this);
+
         _.bindAll(this, '_updateFloatPosition', '_updateSize');
     },
 
@@ -19,6 +30,18 @@ RB.FloatingBannerView = Backbone.View.extend({
      * Renders the banner and listens for scroll and resize updates.
      */
     render: function() {
+
+        this._navigateButton = new RB.SplitButtonView({
+            el: $('#diff-banner-navigate-container'),
+            text: gettext(this._$items[0].text),
+            click: this._$items[0].click,
+            id: 'diff-banner-navigate',
+            zIndex: this.$('.diff-banner').css('zIndex'),
+            alternatives: this._$items
+        });
+
+        this._navigateButton.render();
+
         $(window)
             .scroll(this._updateFloatPosition)
             .resize(this._updateSize);
@@ -136,5 +159,14 @@ RB.FloatingBannerView = Backbone.View.extend({
                 .height('auto')
                 .css('margin', 0);
         }
+    },
+
+    /*
+     * Handler for when the navigate button is clicked.
+     *
+     * Navigates to the selected file.
+     */
+    _onNavigateClicked: function _onNavigateClicked(index) {
+        $('html, body').scrollTop($("a[name='" + index + "']").offset().top);
     }
 });
