diff --git a/index.html b/index.html
index c23d147..e95ef21 100644
--- a/index.html
+++ b/index.html
@@ -215,42 +215,98 @@
           </div>
           <hr width="100%" size="8" align="left">
           <p class="lead text-dark">
-            <label>If you're looking for Bliss OS (Android for PC's), we have moved to a new site. <br><br> <a class="btn mb-3 btn-dark" target="BLANK" href="https://blissroms-x86.github.io">Go to the Bliss OS website</a> </label>
+            <label>If you're looking for Bliss OS (Android for PC's), we have moved to a new site. <br><br> <a class="btn mb-3 btn-dark" target="BLANK" href="https://www.blissos.org">Go to the Bliss OS website</a> </label>
           </p>
         </div>
       </div>
     </div>
   </div>
   <!-- End Downloads -->
-  <div class="bg-secondary py-5" id="team">
+  <div class="py-5 bg-dark" id="documentation">
     <div class="container">
       <div class="row">
-        <div class="mx-auto col-md-12 text-center">
-          <h3 class="display-3 pt-5">The Team</h3>
+        <div class="col-md-12" style="">
+          <h3 class="display-3 text-truncate">Docs</h3>
+          <p class="mb-4 lead">Bliss ROMs documentation can be found on our <a href="https://docs.blissroms.com">docs site</a>, while our development update posts can be found on the XDA thread for that devices release version.<br><br> We recommend all users start with using the documentation we have provided before trying to hunt us down online and ask us questions as this action takes away the valuable development time we have commited towards this project. None of us are paid for the work we do on Bliss, so please set your expectations accordingly.&nbsp;<br><br> For questions on if Bliss will work on your device, please search our public <a href="https://www.blissroms.com/stats.html">stats site</a> for your device, failing that, search the XDA or Google for a Bliss build for your device.&nbsp;</p>
+          <div class="row">
+            <div class="col-md-3" style=""><img class="img-fluid d-block" src="images/github-logo.png"></div>
+            <div class="col-md-7" style="">
+              <h3>Want to help contribute towards our open source project?</h3>
+              <p>We're always adding to Bliss development, and if this is your way of giving back, then feel free to download the source and submit commits through the BlissROMs Gerrit Review or check out our <a href="https://github.com/BlissRoms">GitHub repo</a></p>
+            </div>
+            <div class="col-md-2 mx-auto" style="">
+              <a class="btn mb-3 btn-secondary" href="https://docs.blissroms.com" target="_blank">BlissROMs Docs</a>
+            </div>
+          </div>
         </div>
       </div>
-      <section id="content" class="team_content"></section>
-      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
-      <script>
-        $.ajax({
-          type: "GET",
-          url: "https://blissapi.blissroms.com/team/public/allteambliss", // TeamBliss JSON
-          success: function(data) {
-            var newContent = ''; // Variable to hold HTML
-            for (var i = 0; i < data.length; i++) { // Loop through object
-              newContent += '<div id="event" class="team_item">';
-              newContent += '<img class="image crop" src="' + data[i].image + '" ';
-              newContent += 'alt="' + data[i].member + '" />';
-              newContent += '<h3><b>' + data[i].member + '</b></h3>';
-              newContent += '<p class="team_data_text">' + data[i].descriptions + '</p>';
-              newContent += '<p class="team_data_text"><i>&quot;' + data[i].email + '&quot;</i></p>';
-              newContent += '</div>';
-            }
-            // Update the page with the new content
-            document.getElementById('content').innerHTML = newContent;
-          }
-        })
-      </script>
+    </div>
+  </div>
+  <div class="py-5 bg-light">
+    <div class="container">
+      <div class="row">
+        <div class="col-md-12">
+          <div class="row">
+            <div class="mx-auto col-md-12 text-center">
+              <h3 class="display-3">The Team</h3>
+            </div>
+          </div>
+          <ul class="nav nav-tabs nav-justified">
+            <li class="nav-item mx-auto font-weight-bold"> <a class="active nav-link" href="" data-toggle="tab" data-target="#tabone">Core Members</a> </li>
+            <li class="nav-item mx-auto font-weight-bold"> <a href="" class="nav-link" data-toggle="tab" data-target="#tabtwo">Maintainers</a> </li>
+          </ul>
+          <div class="tab-content mt-2">
+            <div class="tab-pane fade show active" id="tabone" role="tabpanel">
+              <section id="content" class="team_content"></section>
+              <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
+              <script>
+                $.ajax({
+                  type: "GET",
+                  url: "https://blissapi.blissroms.com/team/public/allteambliss", // TeamBliss JSON
+                  success: function(data) {
+                    var newContent = ''; // Variable to hold HTML
+                    for (var i = 0; i < data.length; i++) { // Loop through object
+                      newContent += '<div id="event" class="team_item">';
+                      newContent += '<img class="image crop" src="' + data[i].image + '" ';
+                      newContent += 'alt="' + data[i].member + '" />';
+                      newContent += '<h3><b>' + data[i].member + '</b></h3>';
+                      newContent += '<p class="team_data_text font-weight-bold">' + data[i].descriptions + '</p>';
+                      newContent += '<p class="team_data_text font-weight-bold"><i>&quot;' + data[i].email + '&quot;</i></p>';
+                      newContent += '</div>';
+                    }
+                    // Update the page with the new content
+                    document.getElementById('content').innerHTML = newContent;
+                  }
+                })
+              </script>
+            </div>
+            <div class="tab-pane fade" id="tabtwo" role="tabpanel">
+              <section id="content2" class="team_content"></section>
+              <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
+              <script>
+                $.ajax({
+                  type: "GET",
+                  url: "https://blissapi.blissroms.com/blissinfra/public/allmaintainers", // TeamBliss JSON
+                  success: function(data) {
+                    var newContent = ''; // Variable to hold HTML
+                    for (var i = 0; i < data.length; i++) { // Loop through object
+                      newContent += '<div id="event" class="team_item">';
+                      newContent += '<img class="image crop" src="' + data[i].image + '" ';
+                      newContent += 'alt="' + data[i].mname + '" />';
+                      newContent += '<h3><b>' + data[i].mname + '</b></h3>';
+                      newContent += '<p class="team_data_text font-weight-bold">' + data[i].device + '</p>';
+                      newContent += '<p class="team_data_text font-weight-bold"><i>&quot;' + data[i].codename + '&quot;</i></p>';
+                      newContent += '</div>';
+                    }
+                    // Update the page with the new content
+                    document.getElementById('content2').innerHTML = newContent;
+                  }
+                })
+              </script>
+            </div>
+          </div>
+        </div>
+      </div>
     </div>
   </div>
   <div class="py-4 text-center">
