diff --git a/background.js b/background.js
new file mode 100644
index 0000000..513d12e
--- /dev/null
+++ b/background.js
@@ -0,0 +1,13 @@
+function isEmpty(obj) {
+  return Object.keys(obj).length === 0;
+}
+
+chrome.runtime.onInstalled.addListener(function(details) {
+  chrome.storage.sync.get(null, function(items) {
+    if (details.reason == "install") {
+      if (isEmpty(items)) {
+        chrome.storage.sync.set({"list": true, "thread": true});
+      }
+    }
+  });
+});
diff --git a/console_inject.js b/console_inject.js
index 0cfbeae..2bc6f15 100644
--- a/console_inject.js
+++ b/console_inject.js
@@ -1,12 +1,14 @@
+var mutationObserver, intersectionObserver, options;
+
 function mutationCallback(mutationList, observer) {
   mutationList.forEach((mutation) => {
     if (mutation.type == "childList") {
       mutation.addedNodes.forEach(function (node) {
-        if ((typeof node.classList !== "undefined") && node.classList.contains("view-more-button-container")) {
+        if (options.list && (typeof node.classList !== "undefined") && node.classList.contains("view-more-button-container")) {
           intersectionObserver.observe(node.querySelector(".view-more-button"));
         }
 
-        if ((typeof node.classList !== "undefined") && node.classList.contains("load-more-bar")) {
+        if (options.thread && (typeof node.classList !== "undefined") && node.classList.contains("load-more-bar")) {
           intersectionObserver.observe(node.querySelector(".load-more-button"));
         }     
       });
@@ -28,13 +30,17 @@
   subtree: true
 }
 
-var mutationObserver = new MutationObserver(mutationCallback);
-mutationObserver.observe(document.querySelector(".scrollable-content"), observerOptions);
-
 var intersectionOptions = {
   root: document.querySelector('.scrollable-content'),
   rootMargin: '0px',
   threshold: 1.0
 }
 
-var intersectionObserver = new IntersectionObserver(intersectionCallback, intersectionOptions);
+chrome.storage.sync.get(null, function(items) {
+  options = items;
+
+  mutationObserver = new MutationObserver(mutationCallback);
+  mutationObserver.observe(document.querySelector(".scrollable-content"), observerOptions);
+
+  intersectionObserver = new IntersectionObserver(intersectionCallback, intersectionOptions);
+});
diff --git a/forum_inject.js b/forum_inject.js
index 204c2fc..a2209cd 100644
--- a/forum_inject.js
+++ b/forum_inject.js
@@ -1,3 +1,5 @@
+var intersectionObserver;
+
 function intersectionCallback(entries, observer) {
   entries.forEach(entry => {
     if (entry.isIntersecting) {
@@ -10,5 +12,10 @@
   threshold: 1.0
 }
 
-var intersectionObserver = new IntersectionObserver(intersectionCallback, intersectionOptions);
-intersectionObserver.observe(document.querySelector(".thread-list-threads__load-more-button"));
+chrome.storage.sync.get(null, function(items) {
+  var button = document.querySelector(".thread-list-threads__load-more-button");
+  if (items.list && button !== null) {
+    intersectionObserver = new IntersectionObserver(intersectionCallback, intersectionOptions);
+    intersectionObserver.observe(button);
+  }
+});
diff --git a/manifest.json b/manifest.json
index 83171f9..5587c04 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,7 @@
 {
   "manifest_version": 2,
   "name": "Infinite Scroll in TW",
-  "version": "0.0.4",
+  "version": "0.1.0",
   "description": "Get infinite Scroll in the Google Forums and the Community Console",
   "icons": {
     "512": "icons/512.png",
@@ -15,10 +15,26 @@
     {
       "matches": ["https://support.google.com/*/threads*"],
       "js": ["forum_inject.js"]
+    },
+    {
+      "matches": ["https://support.google.com/*/thread/*"],
+      "js": ["thread_inject.js"]
     }
   ],
   "permissions": [
     "https://support.google.com/s/community*",
-    "https://support.google.com/*/threads*"
-  ]
+    "https://support.google.com/*/threads*",
+    "https://support.google.com/*/thread/*",
+    "storage"
+  ],
+  "options_page": "options.html",
+  "options_ui": {
+    "page": "options.html",
+    "chrome_style": true,
+    "open_in_tab": false
+  },
+  "background": {
+    "scripts": ["background.js"],
+    "persistent": false
+  }
 }
diff --git a/options.html b/options.html
new file mode 100644
index 0000000..48ce91e
--- /dev/null
+++ b/options.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>Options</title>
+  </head>
+  <body>
+    <p><input type="checkbox" id="list"><label for="list"> Enable infinite scrolling in thread lists.</label><br>
+    <input type="checkbox" id="thread"><label for="thread"> Enable infinite scrolling inside threads.</label></p>
+    <p style="text-align: center;"><button id="save">Save</button></p>
+    <script src="options.js"></script>
+  </body>
+</html>
diff --git a/options.js b/options.js
new file mode 100644
index 0000000..d8ce844
--- /dev/null
+++ b/options.js
@@ -0,0 +1,31 @@
+function isEmpty(obj) {
+  return Object.keys(obj).length === 0;
+}
+
+function save() {
+  chrome.storage.sync.set({
+    "list": document.querySelector("#list").checked,
+    "thread": document.querySelector("#thread").checked
+  }, function() {
+    window.close();
+  });
+}
+
+window.addEventListener("load", function() {
+  chrome.storage.sync.get(null, function(items) {
+    if (isEmpty(items)) {
+      items = {"list": true, "thread": true};
+      chrome.storage.sync.set(items);
+    }
+
+    if (items.list === true) {
+      document.querySelector("#list").checked = true;
+    }
+
+    if (items.thread === true) {
+      document.querySelector("#thread").checked = true;
+    }
+
+    document.querySelector("#save").addEventListener("click", save);
+  });
+});
diff --git a/thread_inject.js b/thread_inject.js
new file mode 100644
index 0000000..0cbc254
--- /dev/null
+++ b/thread_inject.js
@@ -0,0 +1,21 @@
+var intersectionObserver;
+
+function intersectionCallback(entries, observer) {
+  entries.forEach(entry => {
+    if (entry.isIntersecting) {
+      entry.target.click();
+    }
+  });
+};
+
+var intersectionOptions = {
+  threshold: 1.0
+}
+
+chrome.storage.sync.get(null, function(items) {
+  var button = document.querySelector(".thread-all-replies__load-more-button");
+  if (items.thread && button !== null) {
+    intersectionObserver = new IntersectionObserver(intersectionCallback, intersectionOptions);
+    intersectionObserver.observe(button);
+  }
+});
