diff --git a/_content/doc/download.js b/_content/doc/download.js
index 324545d..ef9efb4 100644
--- a/_content/doc/download.js
+++ b/_content/doc/download.js
@@ -20,18 +20,8 @@
         const files = data[0]['files'];
         for (var i = 0; i < files.length; i++) {
           let file = files[i].filename;
-          let fileSize = files[i].size;
           if (file.match('.linux-amd64.tar.gz$')) {
             this.linuxFileName = file;
-            this.linuxFileSize = Math.round(fileSize / Math.pow(1024, 2));
-          }
-          if (file.match('.darwin-amd64(-osx10.8)?.pkg$')) {
-            this.macFileName = file;
-            this.macFileSize = Math.round(fileSize / Math.pow(1024, 2));
-          }
-          if (file.match('.windows-amd64.msi$')) {
-            this.windowsFileName = file;
-            this.windowsFileSize = Math.round(fileSize / Math.pow(1024, 2));
           }
         }
         this.detectOS();
@@ -39,7 +29,7 @@
         if (osTab !== null) {
           osTab.click();
         }
-        this.setDownloadForOS(this.osName);
+        this.setVersion(data[0].version);
       })
       .catch(console.error);
       this.setEventListeners();
@@ -51,32 +41,10 @@
     });
   }
 
-  // Set the download button UI for a specific OS.
-  setDownloadForOS(osName) {
-    const baseURL = '/dl/';
-
-    switch(osName){
-      case 'linux':
-        document.querySelector('.js-downloadDescription').textContent =
-          'Download (' + this.parseVersionNumber(this.linuxFileName) + ')';
-        document.querySelector('.js-download').href = baseURL + this.linuxFileName;
-        break;
-      case 'mac':
-        document.querySelector('.js-downloadDescription').textContent =
-          'Download (' + this.parseVersionNumber(this.macFileName) + ')';
-        document.querySelector('.js-download').href = baseURL + this.macFileName;
-        break;
-      case 'windows':
-        document.querySelector('.js-downloadDescription').textContent =
-          'Download (' + this.parseVersionNumber(this.windowsFileName) + ')';
-        document.querySelector('.js-download').href = baseURL + this.windowsFileName;
-        break;
-      default:
-        document.querySelector('.js-downloadDescription').textContent =
-          'Visit the downloads page.';
-        document.querySelector('.js-download').href = baseURL;
-        break;
-    }
+  // Set the download button UI version.
+  setVersion(latest) {
+    document.querySelector('.js-downloadDescription').textContent =
+      `Download (${this.parseVersionNumber(latest)})`;
   }
 
   // Updates install tab with dynamic data.
@@ -125,7 +93,6 @@
   handleTabClick(e) {
     const el = (e.target);
     this.activateTab(Array.prototype.indexOf.call(this.tabs, el));
-    this.setDownloadForOS(el.id);
     this.setInstallTabData(el.id);
   }
 
diff --git a/_content/doc/install.html b/_content/doc/install.html
index bc4e829..4930583 100644
--- a/_content/doc/install.html
+++ b/_content/doc/install.html
@@ -20,8 +20,10 @@
   </li>
 </ul>
 <p class="DownloadBtn">
-  <a href="/dl/" id="start" class="btn download js-download">
-    <span id="download-description" class="js-downloadDescription"></span>
+  <a href="/dl/" id="start" class="btn download">
+    <span id="download-description" class="js-downloadDescription">
+      Download
+    </span>
   </a>
 </p>
 <p>
