diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index 4d0528b6ef0b9bcdc5788bcb2b8c523a536041b1..cfceedde3135918aae332af16ce6b12c0d1df04d 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -7,6 +7,7 @@ const settings = {
       hideAttachmentsLocal: this.$store.state.config.hideAttachments,
       hideAttachmentsInConvLocal: this.$store.state.config.hideAttachmentsInConv,
       hideNsfwLocal: this.$store.state.config.hideNsfw,
+      autoLoadLocal: this.$store.state.config.autoLoad,
       muteWordsString: this.$store.state.config.muteWords.join('\n')
     }
   },
@@ -23,6 +24,9 @@ const settings = {
     hideNsfwLocal (value) {
       this.$store.dispatch('setOption', { name: 'hideNsfw', value })
     },
+    autoLoadLocal (value) {
+      this.$store.dispatch('setOption', { name: 'autoLoad', value })
+    },
     muteWordsString (value) {
       value = filter(value.split('\n'), (word) => trim(word).length > 0)
       this.$store.dispatch('setOption', { name: 'muteWords', value })
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 33d46e7e3b9c3b2eff5549e834460da712594bcf..3fab1c1ce6da18cc536cbaa52743074dff562608 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -28,6 +28,10 @@
                 <input type="checkbox" id="hideNsfw" v-model="hideNsfwLocal">
                 <label for="hideNsfw">Enable clickthrough NSFW attachment hiding</label>
             </li>
+            <li>
+                <input type="checkbox" id="autoLoad" v-model="autoLoadLocal">
+                <label for="autoLoad">Enable automatic loading when scrolled to the bottom</label>
+            </li>
         </ul>
       </div>
     </div>
diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js
index d5a9adcc8ea1a97974cb558f964ed4b5f527e864..6070e4423c0d3a4d27b943d497fb1d5db658dbee 100644
--- a/src/components/timeline/timeline.js
+++ b/src/components/timeline/timeline.js
@@ -20,6 +20,8 @@ const Timeline = {
     const credentials = store.state.users.currentUser.credentials
     const showImmediately = this.timeline.visibleStatuses.length === 0
 
+    window.onscroll = this.scrollLoad
+
     timelineFetcher.fetchAndUpdate({
       store,
       credentials,
@@ -42,6 +44,11 @@ const Timeline = {
         older: true,
         showImmediately: true
       }).then(() => store.commit('setLoading', { timeline: this.timelineName, value: false }))
+    },
+    scrollLoad (e) {
+      if (this.timeline.loading === false && this.$store.state.config.autoLoad && (window.innerHeight + window.pageYOffset) >= (document.body.scrollHeight - 750)) {
+        this.fetchOlderStatuses()
+      }
     }
   }
 }
diff --git a/src/main.js b/src/main.js
index 35261578c1d2ff29b6ed2d7c0a58c7b58a85ce7a..351149f18073328ca062bd086f1aa186313c7b35 100644
--- a/src/main.js
+++ b/src/main.js
@@ -33,6 +33,7 @@ const persistedStateOptions = {
     'config.hideAttachments',
     'config.hideAttachmentsInConv',
     'config.hideNsfw',
+    'config.autoLoad',
     'config.muteWords',
     'statuses.notifications',
     'users.users'
diff --git a/src/modules/config.js b/src/modules/config.js
index f59dc6f0d753353f4142ab4a39954a2982e4d538..c9152eccc618f2169c423bd2e62fb79e27221bff 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -7,6 +7,7 @@ const defaultState = {
   hideAttachments: false,
   hideAttachmentsInConv: false,
   hideNsfw: true,
+  autoLoad: true,
   muteWords: []
 }