diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder-image.js b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder-image.js
similarity index 100%
rename from polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder-image.js
rename to polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder-image.js
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder-side-by-side.js b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder-side-by-side.js
similarity index 100%
rename from polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder-side-by-side.js
rename to polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder-side-by-side.js
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder-unified.js b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder-unified.js
similarity index 100%
rename from polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder-unified.js
rename to polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder-unified.js
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.html b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.html
new file mode 100644
index 0000000..f647957
--- /dev/null
+++ b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.html
@@ -0,0 +1,125 @@
+<!--
+Copyright (C) 2016 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<link rel="import" href="../../../bower_components/polymer/polymer.html">
+
+<dom-module id="gr-diff-builder">
+  <template>
+    <div class="contentWrapper">
+      <content></content>
+    </div>
+  </template>
+  <script src="../gr-diff/gr-diff-line.js"></script>
+  <script src="../gr-diff/gr-diff-group.js"></script>
+  <script src="gr-diff-builder.js"></script>
+  <script src="gr-diff-builder-side-by-side.js"></script>
+  <script src="gr-diff-builder-unified.js"></script>
+  <script src="gr-diff-builder-image.js"></script>
+  <script>
+    (function() {
+      'use strict';
+
+      var DiffViewMode = {
+        SIDE_BY_SIDE: 'SIDE_BY_SIDE',
+        UNIFIED: 'UNIFIED_DIFF',
+      };
+
+      Polymer({
+        is: 'gr-diff-builder',
+
+        /**
+         * Fired when the diff is rendered.
+         *
+         * @event render
+         */
+
+        properties: {
+          viewMode: String,
+          isImageDiff: Boolean,
+          baseImage: Object,
+          revisionImage: Object,
+          _builder: Object,
+        },
+
+        get diffElement() {
+          return this.queryEffectiveChildren('#diffTable');
+        },
+
+        render: function(diff, comments, prefs) {
+          this._builder = this._getDiffBuilder(diff, comments, prefs);
+          this._renderDiff();
+        },
+
+        createCommentThread: function(changeNum, patchNum, path, side,
+            projectConfig) {
+          return this._builder.createCommentThread(changeNum, patchNum, path,
+              side, projectConfig);
+        },
+
+        emitGroup: function(group, sectionEl) {
+          this._builder.emitGroup(group, sectionEl);
+        },
+
+        emitDiff: function() {
+          this._builder.emitDiff();
+        },
+
+        showContext: function(newGroups, sectionEl) {
+          var groups = this._builder._groups;
+          // TODO(viktard): Polyfill findIndex for IE10.
+          var contextIndex = groups.findIndex(function(group) {
+            return group.element == sectionEl;
+          });
+          groups.splice.apply(groups, [contextIndex, 1].concat(newGroups));
+
+          newGroups.forEach(function(newGroup) {
+            this._builder.emitGroup(newGroup, sectionEl);
+          }.bind(this));
+          sectionEl.parentNode.removeChild(sectionEl);
+
+          this.async(function() {
+            this.fire('render');
+          }.bind(this), 1);
+        },
+
+        _getDiffBuilder: function(diff, comments, prefs) {
+          if (this.isImageDiff) {
+            return new GrDiffBuilderImage(diff, comments, prefs,
+                this.diffElement, this.baseImage, this.revisionImage);
+          } else if (this.viewMode === DiffViewMode.SIDE_BY_SIDE) {
+            return new GrDiffBuilderSideBySide(
+                diff, comments, prefs, this.diffElement);
+          } else if (this.viewMode === DiffViewMode.UNIFIED) {
+            return new GrDiffBuilderUnified(
+                diff, comments, prefs, this.diffElement);
+          }
+          throw Error('Unsupported diff view mode: ' + this.viewMode);
+        },
+
+        _renderDiff: function() {
+          this._clearDiffContent();
+          this.emitDiff();
+          this.async(function() {
+            this.fire('render');
+          }, 1);
+        },
+
+        _clearDiffContent: function() {
+          this.diffElement.innerHTML = null;
+        },
+      });
+    })();
+  </script>
+</dom-module>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder.js b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.js
similarity index 100%
rename from polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder.js
rename to polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.js
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder_test.html b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder_test.html
similarity index 99%
rename from polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder_test.html
rename to polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder_test.html
index 5905bd9..c47e05d 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-builder_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder_test.html
@@ -19,8 +19,8 @@
 <title>gr-diff-builder</title>
 
 <script src="../../../bower_components/web-component-tester/browser.js"></script>
-<script src="gr-diff-line.js"></script>
-<script src="gr-diff-group.js"></script>
+<script src="../gr-diff/gr-diff-line.js"></script>
+<script src="../gr-diff/gr-diff-group.js"></script>
 <script src="gr-diff-builder.js"></script>
 
 <script>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html
index 1913270..cfe5d66 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html
@@ -18,6 +18,7 @@
 <link rel="import" href="../../shared/gr-button/gr-button.html">
 <link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
 <link rel="import" href="../gr-diff-comment-thread/gr-diff-comment-thread.html">
+<link rel="import" href="../gr-diff-builder/gr-diff-builder.html">
 
 <dom-module id="gr-diff">
   <template>
@@ -153,15 +154,18 @@
         on-tap="_handleTap"
         on-mousedown="_handleMouseDown"
         on-copy="_handleCopy">
-      <table id="diffTable"></table>
+      <gr-diff-builder
+         id="diffBuilder"
+         view-mode="[[viewMode]]"
+         is-image-diff="[[isImageDiff]]"
+         base-image="[[_baseImage]]"
+         revision-image="[[_revisionImage]]">
+        <table id="diffTable"></table>
+      </gr-diff-builder>
     </div>
     <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
   </template>
   <script src="gr-diff-line.js"></script>
   <script src="gr-diff-group.js"></script>
-  <script src="gr-diff-builder.js"></script>
-  <script src="gr-diff-builder-side-by-side.js"></script>
-  <script src="gr-diff-builder-unified.js"></script>
-  <script src="gr-diff-builder-image.js"></script>
   <script src="gr-diff.js"></script>
 </dom-module>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
index 0056808..ea64581 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
@@ -27,12 +27,6 @@
   Polymer({
     is: 'gr-diff',
 
-    /**
-     * Fired when the diff is rendered.
-     *
-     * @event render
-     */
-
     properties: {
       changeNum: String,
       patchRange: Object,
@@ -59,7 +53,6 @@
         value: DiffViewMode.SIDE_BY_SIDE,
       },
       _diff: Object,
-      _diffBuilder: Object,
       _selectionSide: {
         type: String,
         observer: '_selectionSideChanged',
@@ -195,7 +188,7 @@
       var el = Polymer.dom(e).rootTarget;
 
       if (el.classList.contains('showContext')) {
-        this._showContext(e.detail.groups, e.detail.section);
+        this.$.diffBuilder.showContext(e.detail.groups, e.detail.section);
       } else if (el.classList.contains('lineNum')) {
         this.addDraftAtLine(el);
       }
@@ -223,8 +216,8 @@
             patchNum = this.patchRange.basePatchNum;
           }
         }
-        threadEl = this._builder.createCommentThread(this.changeNum, patchNum,
-            this.path, side, this.projectConfig);
+        threadEl = this.$.diffBuilder.createCommentThread(
+            this.changeNum, patchNum, this.path, side, this.projectConfig);
         contentEl.appendChild(threadEl);
       }
       threadEl.addDraft(opt_lineNum);
@@ -363,25 +356,6 @@
       return text;
     },
 
-    _showContext: function(newGroups, sectionEl) {
-      var groups = this._builder._groups;
-      // TODO(viktard): Polyfill findIndex for IE10.
-      var contextIndex = groups.findIndex(function(group) {
-        return group.element == sectionEl;
-      });
-
-      groups.splice.apply(groups, [contextIndex, 1].concat(newGroups));
-
-      newGroups.forEach(function(newGroup) {
-        this._builder.emitGroup(newGroup, sectionEl);
-      }.bind(this));
-      sectionEl.parentNode.removeChild(sectionEl);
-
-      this.async(function() {
-        this.fire('render', null, {bubbles: false});
-      }.bind(this), 1);
-    },
-
     _prefsChanged: function(prefsChangeRecord) {
       var prefs = prefsChangeRecord.base;
       this.customStyle['--content-width'] = prefs.line_length + 'ch';
@@ -393,17 +367,7 @@
     },
 
     _render: function() {
-      this._builder =
-          this._getDiffBuilder(this._diff, this._comments, this.prefs);
-      this._renderDiff();
-    },
-
-    _renderDiff: function() {
-      this._clearDiffContent();
-      this._builder.emitDiff();
-      this.async(function() {
-        this.fire('render', null, {bubbles: false});
-      }, 1);
+      this.$.diffBuilder.render(this._diff, this._comments, this.prefs);
     },
 
     _clearDiffContent: function() {
@@ -508,19 +472,6 @@
           this.changeNum, this._diff, this.patchRange);
     },
 
-    _getDiffBuilder: function(diff, comments, prefs) {
-      if (this.isImageDiff) {
-        return new GrDiffBuilderImage(diff, comments, prefs, this.$.diffTable,
-            this._baseImage, this._revisionImage);
-      } else if (this.viewMode === DiffViewMode.SIDE_BY_SIDE) {
-        return new GrDiffBuilderSideBySide(diff, comments, prefs,
-            this.$.diffTable);
-      } else if (this.viewMode === DiffViewMode.UNIFIED) {
-        return new GrDiffBuilderUnified(diff, comments, prefs,
-            this.$.diffTable);
-      }
-      throw Error('Unsupported diff view mode: ' + this.viewMode);
-    },
 
     _projectConfigChanged: function(projectConfig) {
       var threadEls = this._getCommentThreads();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html
index aec32b6..613c7fa 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html
@@ -226,8 +226,7 @@
         var rendered = function() {
           // Recognizes that it should be an image diff.
           assert.isTrue(element.isImageDiff);
-          assert.instanceOf(element._getDiffBuilder(element._diff,
-              element._comments, element.prefs), GrDiffBuilderImage);
+          assert.instanceOf(element.$.diffBuilder._builder, GrDiffBuilderImage);
 
           // Left image rendered with the parent commit's version of the file.
           var leftInmage = element.$.diffTable.querySelector('td.left img');
@@ -397,30 +396,5 @@
         });
       });
     });
-
-    suite('renderDiff', function() {
-      setup(function(done) {
-        sinon.stub(element, 'fire');
-        element._builder = {
-          emitDiff: sinon.stub(),
-        };
-        element._renderDiff();
-        flush(function() {
-          done();
-        });
-      });
-
-      teardown(function() {
-        element.fire.restore();
-      });
-
-      test('fires render', function() {
-        assert(element.fire.calledWithExactly(
-            'render', null, {bubbles: false}));
-      });
-      test('calls emitDiff on builder', function() {
-        assert(element._builder.emitDiff.calledOnce);
-      });
-    });
   });
 </script>
