diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..f6cb8ad
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1 @@
+BasedOnStyle: Google
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..e5dd176
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,15 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_line = true
+charset = utf-8
+
+[*.{sh,bash}]
+indent_style = space
+indent_size = 2
+switch_case_indent = true
+
+[*.{html,css,js,json}]
+indent_style = space
+indent_size = 2
diff --git a/README.md b/README.md
index f651f8b..c3bf730 100644
--- a/README.md
+++ b/README.md
@@ -1,51 +1,96 @@
 # TW Power Tools
 [![Available in the Chrome Web Store](https://developer.chrome.com/webstore/images/ChromeWebStore_Badge_v2_206x58.png)](https://chrome.google.com/webstore/detail/infinite-scroll-in-tw/hpgakoecmgibigdbnljgecablpipbajb)
 
-An extension which brings several enhancements to the Google Forums and the Community Console.
+An extension which brings several enhancements to the Google Forums and the
+Community Console.
 
 ## Release cycle
-When the code in the `master` branch is considered to be stable, a release can be made. This is the procedure:
+When the code in the `master` branch is considered to be stable, a release can
+be made. This is the procedure:
 
-1. Tag the last commit with a version number (in the format `vx`, where x is the extension's [version number](https://developer.chrome.com/extensions/manifest/version) for that release) by running `git tag -a vx -m "vx"`. Note that the tag should be an annotated tag and not a lightweight tag, and it must be pushed to Gerrit after being created.
-2. Build the extension for both the stable and beta channels (this is explained in the next section). This will output a ZIP file for each release channel and each supported browser.
+1. Tag the last commit with a version number (in the format `vx`, where x is the
+extension's [version number](https://developer.chrome.com/extensions/manifest/version)
+for that release) by running `git tag -a vx -m "vx"`. Note that the tag should
+be an annotated tag and not a lightweight tag, and it must be pushed to Gerrit
+after being created.
+2. Build the extension for both the stable and beta channels (this is explained
+in the next section). This will output a ZIP file for each release channel and
+each supported browser.
 
-Afterwards, the release/build files must be submitted to the Chrome Web Store and addons.mozilla.org.
+Afterwards, the release/build files must be submitted to the Chrome Web Store
+and addons.mozilla.org.
 
 ### Submitting to the Chrome Web Store
-1. [Upload both release files](https://developer.chrome.com/webstore/publish#upload-your-item) to the Chrome Web Store, one for each release channel.
-2. [Submit both releases](https://developer.chrome.com/webstore/publish#submit-your-item-for-publishing) to be reviewed by the Chrome Web Store team, but in the case of the stable channel uncheck the "Publish automatically after it has passed review" option.
-3. Upload the beta release file to the [GitHub releases page](https://github.com/avm99963/infinitegforums/releases) under the newly created tag. Mark that release as a pre-release at GitHub.
+1. [Upload both release files](https://developer.chrome.com/webstore/publish#upload-your-item)
+to the Chrome Web Store, one for each release channel.
+2. [Submit both releases](https://developer.chrome.com/webstore/publish#submit-your-item-for-publishing)
+to be reviewed by the Chrome Web Store team, but in the case of the stable
+channel uncheck the "Publish automatically after it has passed review" option.
+3. Upload the beta release file to the
+[GitHub releases page](https://github.com/avm99963/infinitegforums/releases)
+under the newly created tag. Mark that release as a pre-release at GitHub.
 4. Wait until the beta release is reviewed and approved by Google.
-5. Test again the extension by using the beta channel. Check if the options have been transfered correctly from version to version, and wait some days (for instance between 3 and 5 days) to see if other people report issues with the updated version.
-6. If everything goes well, publish the update in the stable channel. The updated version should have already been reviewed by the Chrome Web Store team at this time.
-7. Update the release file in the GitHub releases page by removing the beta release file and uploading the stable release file. Also, remove the pre-release label.
+5. Test again the extension by using the beta channel. Check if the options have
+been transfered correctly from version to version, and wait some days (for
+instance between 3 and 5 days) to see if other people report issues with the
+updated version.
+6. If everything goes well, publish the update in the stable channel. The
+updated version should have already been reviewed by the Chrome Web Store team
+at this time.
+7. Update the release file in the GitHub releases page by removing the beta
+release file and uploading the stable release file. Also, remove the pre-release
+label.
 
-If during this process the release wasn't approved by Google or an issue was found during beta testing, a new release which fixes this should be created.
+If during this process the release wasn't approved by Google or an issue was
+found during beta testing, a new release which fixes this should be created.
 
 ### Submitting to addons.mozilla.org
 The procedure is similar to the one with the Chrome Web Store.
 
-@TODO: Add more details once the first version of the extension has been uploaded to addons.mozilla.org.
+@TODO: Add more details once the first version of the extension has been
+uploaded to addons.mozilla.org.
 
 ## Build the extension
-A zip file with the contents of the extension, which can be uploaded to the Chrome Web Store and addons.mozilla.org, can be created with any of the following procedures:
+A zip file with the contents of the extension, which can be uploaded to the
+Chrome Web Store and addons.mozilla.org, can be created with any of the
+following procedures:
 
 ### Using the release.bash script
-Run `bash release.bash -h` in order to learn how to use this command. To summarize, the command accepts the `--channel` and `--browser` flags (or their short versions `-c` and `-b`).
+Run `bash release.bash -h` in order to learn how to use this command. To
+summarize, the command accepts the `--channel` and `--browser` flags (or their
+short versions `-c` and `-b`).
 
-As an example, if you wanted to create a ZIP file of the beta-branded extension targeted for Firefox, you would run `bash release.bash -c beta -b gecko`.
+As an example, if you wanted to create a ZIP file of the beta-branded extension
+targeted for Firefox, you would run `bash release.bash -c beta -b gecko`.
 
 ### Using make
-You can also use _make_ to build the extension. This is just a wrapper for the `release.bash` command.
+You can also use _make_ to build the extension. This is just a wrapper for the
+`release.bash` command.
 
-Run `make all` to build the extension for all the available channels and browsers. You can also run `make {target}` where `{target}` is one of the following: `chromium-stable`, `chromium-beta`, `gecko-stable`, `gecko-beta`.
+Run `make all` to build the extension for all the available channels and
+browsers. You can also run `make {target}` where `{target}` is one of the
+following: `chromium-stable`, `chromium-beta`, `gecko-stable`, `gecko-beta`.
 
-Run `make clean` to clean all the release files (this removes the `out` folder, which is where the release files are saved).
+Run `make clean` to clean all the release files (this removes the `out` folder,
+which is where the release files are saved).
 
 ## Testing notes
-When testing the extension during development, you don't have to build the extension each time you want to import an updated version to Chrome/Firefox. Instead, run `bash generateManifest.bash {browser}` once, where `{browser}` is either `CHROMIUM` or `GECKO`, and this will generate a `manifest.json` file for the specified browser in the `src` directory. Now, you can load the `src` folder directly in the browser in order to import the extension, which removes the need to build it. When the `manifest.gjson` file is modified, you'll have to generate the manifest again.
+When testing the extension during development, you don't have to build the
+extension each time you want to import an updated version to Chrome/Firefox.
+Instead, run `bash generateManifest.bash {browser}` once, where `{browser}`
+is either `CHROMIUM` or `GECKO`, and this will generate a `manifest.json`
+file for the specified browser in the `src` directory. Now, you can load the
+`src` folder directly in the browser in order to import the extension, which
+removes the need to build it. When the `manifest.gjson` file is modified, you'll
+have to generate the manifest again.
 
-To test translations, you might want to set your browser's locale. This section tells you how to set the locale in [Windows](https://developer.chrome.com/extensions/i18n#testing-win), [Mac OS X](https://developer.chrome.com/extensions/i18n#testing-mac), [Linux](https://developer.chrome.com/extensions/i18n#testing-linux), and [Chrome OS](https://developer.chrome.com/extensions/i18n#testing-chromeos).
+To test translations, you might want to set your browser's locale. This section
+tells you how to set the locale in
+[Windows](https://developer.chrome.com/extensions/i18n#testing-win),
+[Mac OS X](https://developer.chrome.com/extensions/i18n#testing-mac),
+[Linux](https://developer.chrome.com/extensions/i18n#testing-linux),
+and [Chrome OS](https://developer.chrome.com/extensions/i18n#testing-chromeos).
 
 ## Beta channel
-The beta channel for Chrome is available [here](https://chrome.google.com/webstore/detail/infinite-scroll-in-tw-bet/memmklnkkhifmflmidnflfcdepamljef).
+The beta channel for Chrome is available
+[here](https://chrome.google.com/webstore/detail/infinite-scroll-in-tw-bet/memmklnkkhifmflmidnflfcdepamljef).
diff --git a/generateManifest.bash b/generateManifest.bash
index dd7df4e..29839c0 100644
--- a/generateManifest.bash
+++ b/generateManifest.bash
@@ -1,15 +1,17 @@
 #!/bin/bash
-
+#
 # Generates the manifest.json file according to the dependencies passed
 # via CLI arguments
 
-dependencies=( "$@" )
+dependencies=("$@")
 
 rm -f src/manifest.json
 cp templates/manifest.gjson src/manifest.json
 
 for dep in "${dependencies[@]}"; do
-  perl -0777 -pi -e "s/^#if defined\($dep\)\n([^#]*)#endif\n/\$1/gms" src/manifest.json
+  perl -0777 -pi -e "s/^#if defined\($dep\)\n([^#]*)#endif\n/\$1/gms" \
+    src/manifest.json
 done
 
-perl -0777 -pi -e "s/^#if defined\([^\n#]+\)\n[^#]*#endif\n//gms" src/manifest.json
+perl -0777 -pi -e "s/^#if defined\([^\n#]+\)\n[^#]*#endif\n//gms" \
+  src/manifest.json
diff --git a/release.bash b/release.bash
index fb03c6e..e261c37 100644
--- a/release.bash
+++ b/release.bash
@@ -1,8 +1,10 @@
 #!/bin/bash
+#
+# Generate release files (ZIP archives of the extension source code).
 
 # Prints help text
-function usage {
-  cat << END
+function usage() {
+  cat <<END
 
   Usage: $progname [--channel CHANNEL]
 
@@ -17,7 +19,7 @@
 }
 
 # Updates manifest.json field
-function set_manifest_field {
+function set_manifest_field() {
   sed -i -E "s/\"$1\": \"[^\"]*\"/\"$1\": \"$2\"/" src/manifest.json
 }
 
@@ -30,21 +32,30 @@
 
 while true; do
   case "$1" in
-    -h | --help ) usage; exit; ;;
-    -c | --channel ) channel="$2"; shift 2 ;;
-    -b | --browser ) browser="$2"; shift 2 ;;
-    * ) break ;;
+    -h | --help)
+      usage
+      exit
+      ;;
+    -c | --channel)
+      channel="$2"
+      shift 2
+      ;;
+    -b | --browser)
+      browser="$2"
+      shift 2
+      ;;
+    *) break ;;
   esac
 done
 
 if [[ $channel != "stable" && $channel != "beta" ]]; then
-  echo "channel parameter value is incorrect."
+  echo "channel parameter value is incorrect." >&2
   usage
   exit
 fi
 
 if [[ $browser != "chromium" && $browser != "gecko" ]]; then
-  echo "browser parameter value is incorrect."
+  echo "browser parameter value is incorrect." >&2
   usage
   exit
 fi
@@ -53,7 +64,7 @@
 
 # First of all, generate the appropriate manifest.json file for the
 # target browser
-dependencies=( ${browser^^} )
+dependencies=(${browser^^})
 
 bash generateManifest.bash "${dependencies[@]}"
 
@@ -90,7 +101,8 @@
 # Create ZIP file for upload to the Chrome Web Store
 mkdir -p out
 rm -rf out/twpowertools-$version-$browser-$channel.zip
-(cd src && zip -rq ../out/twpowertools-$version-$browser-$channel.zip * -x *.git*)
+(cd src &&
+  zip -rq ../out/twpowertools-$version-$browser-$channel.zip * -x *.git*)
 
 # Clean generated manifest.json file
 rm -f src/manifest.json
diff --git a/src/background.js b/src/background.js
index 315d6d8..3e73282 100644
--- a/src/background.js
+++ b/src/background.js
@@ -3,23 +3,23 @@
 }
 
 const defaultOptions = {
-  "list": true,
-  "thread": true,
-  "threadall": false,
-  "fixedtoolbar": false,
-  "redirect": false,
-  "history": false,
-  "loaddrafts": false,
-  "batchduplicate": false,
-  "escalatethreads": false,
-  "movethreads": false,
-  "increasecontrast": false,
-  "stickysidebarheaders": false
+  'list': true,
+  'thread': true,
+  'threadall': false,
+  'fixedtoolbar': false,
+  'redirect': false,
+  'history': false,
+  'loaddrafts': false,
+  'batchduplicate': false,
+  'escalatethreads': false,
+  'movethreads': false,
+  'increasecontrast': false,
+  'stickysidebarheaders': false,
 };
 
 function cleanUpOptions() {
   chrome.storage.sync.get(null, function(options) {
-    console.log("[cleanUpOptions] Previous options", options);
+    console.log('[cleanUpOptions] Previous options', options);
     var ok = true;
     for (const [opt, value] of Object.entries(defaultOptions)) {
       if (!(opt in options)) {
@@ -28,7 +28,7 @@
       }
     }
 
-    console.log("[cleanUpOptions] New options", options);
+    console.log('[cleanUpOptions] New options', options);
 
     if (!ok) {
       chrome.storage.sync.set(options);
@@ -37,7 +37,7 @@
 }
 
 chrome.runtime.onInstalled.addListener(function(details) {
-  if (details.reason == "install" || details.reason == "update") {
+  if (details.reason == 'install' || details.reason == 'update') {
     cleanUpOptions();
   }
 });
diff --git a/src/console_inject.js b/src/console_inject.js
index c97483b..646beba 100644
--- a/src/console_inject.js
+++ b/src/console_inject.js
@@ -9,35 +9,43 @@
   }
 
   return {
-    "forum": forum_a[1],
-    "thread": thread_a[1]
+    'forum': forum_a[1],
+    'thread': thread_a[1],
   };
 }
 
 function mutationCallback(mutationList, observer) {
   mutationList.forEach((mutation) => {
-    if (mutation.type == "childList") {
-      mutation.addedNodes.forEach(function (node) {
-        if (typeof node.classList !== "undefined") {
-          if (options.thread && node.classList.contains("load-more-bar")) {
-            intersectionObserver.observe(node.querySelector(".load-more-button"));
+    if (mutation.type == 'childList') {
+      mutation.addedNodes.forEach(function(node) {
+        if (typeof node.classList !== 'undefined') {
+          if (options.thread && node.classList.contains('load-more-bar')) {
+            intersectionObserver.observe(
+                node.querySelector('.load-more-button'));
           }
 
-          if (options.threadall && node.classList.contains("load-more-bar")) {
-            intersectionObserver.observe(node.querySelector(".load-all-button"));
+          if (options.threadall && node.classList.contains('load-more-bar')) {
+            intersectionObserver.observe(
+                node.querySelector('.load-all-button'));
           }
 
-          if (options.history && ("parentNode" in node) && node.parentNode !== null && ("tagName" in node.parentNode) && node.parentNode.tagName == "EC-USER") {
-            var nameElement = node.querySelector(".name span");
+          if (options.history && ('parentNode' in node) &&
+              node.parentNode !== null && ('tagName' in node.parentNode) &&
+              node.parentNode.tagName == 'EC-USER') {
+            var nameElement = node.querySelector('.name span');
             if (nameElement !== null) {
               var name = nameElement.innerHTML;
-              var query = encodeURIComponent("(creator:\""+name+"\" | replier:\""+name+"\") -forum:0");
-              var urlpart = encodeURIComponent("query="+query);
-              var link = document.createElement("a");
-              link.setAttribute("href", "https://support.google.com/s/community/search/"+urlpart);
-              link.innerText = chrome.i18n.getMessage("inject_previousposts");
-              node.querySelector(".main-card-content").appendChild(document.createElement("br"));
-              node.querySelector(".main-card-content").appendChild(link);
+              var query = encodeURIComponent(
+                  '(creator:"' + name + '" | replier:"' + name + '") -forum:0');
+              var urlpart = encodeURIComponent('query=' + query);
+              var link = document.createElement('a');
+              link.setAttribute(
+                  'href',
+                  'https://support.google.com/s/community/search/' + urlpart);
+              link.innerText = chrome.i18n.getMessage('inject_previousposts');
+              node.querySelector('.main-card-content')
+                  .appendChild(document.createElement('br'));
+              node.querySelector('.main-card-content').appendChild(link);
             }
           }
         }
@@ -56,40 +64,46 @@
 
 function injectStyles(css) {
   var link = document.createElement('link');
-  link.setAttribute("rel", "stylesheet");
-  link.setAttribute("href", "data:text/css;charset=UTF-8,"+encodeURIComponent(css));
+  link.setAttribute('rel', 'stylesheet');
+  link.setAttribute(
+      'href', 'data:text/css;charset=UTF-8,' + encodeURIComponent(css));
   document.head.appendChild(link);
 }
 
 var observerOptions = {
   childList: true,
   attributes: true,
-  subtree: true
+  subtree: true,
 }
 
-var intersectionOptions = {
-  root: document.querySelector('.scrollable-content'),
-  rootMargin: '0px',
-  threshold: 1.0
-}
+var intersectionOptions =
+    {
+      root: document.querySelector('.scrollable-content'),
+      rootMargin: '0px',
+      threshold: 1.0,
+    }
 
-chrome.storage.sync.get(null, function(items) {
-  options = items;
+    chrome.storage.sync.get(null, function(items) {
+      options = items;
 
-  mutationObserver = new MutationObserver(mutationCallback);
-  mutationObserver.observe(document.querySelector(".scrollable-content"), observerOptions);
+      mutationObserver = new MutationObserver(mutationCallback);
+      mutationObserver.observe(
+          document.querySelector('.scrollable-content'), observerOptions);
 
-  intersectionObserver = new IntersectionObserver(intersectionCallback, intersectionOptions);
+      intersectionObserver =
+          new IntersectionObserver(intersectionCallback, intersectionOptions);
 
-  if (options.fixedtoolbar) {
-    injectStyles("ec-bulk-actions{position: sticky; top: 0; background: white; z-index: 96;}");
-  }
+      if (options.fixedtoolbar) {
+        injectStyles(
+            'ec-bulk-actions{position: sticky; top: 0; background: white; z-index: 96;}');
+      }
 
-  if (options.increasecontrast) {
-    injectStyles(".thread-summary.read{background: #ecedee!important;}");
-  }
+      if (options.increasecontrast) {
+        injectStyles('.thread-summary.read{background: #ecedee!important;}');
+      }
 
-  if (options.stickysidebarheaders) {
-    injectStyles("material-drawer .main-header{background: #fff; position: sticky; top: 0; z-index: 1;}");
-  }
-});
+      if (options.stickysidebarheaders) {
+        injectStyles(
+            'material-drawer .main-header{background: #fff; position: sticky; top: 0; z-index: 1;}');
+      }
+    });
diff --git a/src/console_inject_start.js b/src/console_inject_start.js
index 4b6a7ba..92ad72b 100644
--- a/src/console_inject_start.js
+++ b/src/console_inject_start.js
@@ -1,11 +1,13 @@
 chrome.storage.sync.get(null, function(items) {
   if (items.loaddrafts) {
-    var startup = JSON.parse(document.querySelector("html").getAttribute("data-startup"));
+    var startup =
+        JSON.parse(document.querySelector('html').getAttribute('data-startup'));
 
     if (items.loaddrafts) {
       startup[4][13] = true;
     }
 
-    document.querySelector("html").setAttribute("data-startup", JSON.stringify(startup));
+    document.querySelector('html').setAttribute(
+        'data-startup', JSON.stringify(startup));
   }
 });
diff --git a/src/forum_inject.js b/src/forum_inject.js
index a2209cd..38b56ce 100644
--- a/src/forum_inject.js
+++ b/src/forum_inject.js
@@ -9,13 +9,14 @@
 };
 
 var intersectionOptions = {
-  threshold: 1.0
-}
+  threshold: 1.0,
+};
 
 chrome.storage.sync.get(null, function(items) {
-  var button = document.querySelector(".thread-list-threads__load-more-button");
+  var button = document.querySelector('.thread-list-threads__load-more-button');
   if (items.list && button !== null) {
-    intersectionObserver = new IntersectionObserver(intersectionCallback, intersectionOptions);
+    intersectionObserver =
+        new IntersectionObserver(intersectionCallback, intersectionOptions);
     intersectionObserver.observe(button);
   }
 });
diff --git a/src/options.js b/src/options.js
index 1a321b4..5f965b9 100644
--- a/src/options.js
+++ b/src/options.js
@@ -3,25 +3,25 @@
 }
 
 const defaultOptions = {
-  "list": true,
-  "thread": true,
-  "threadall": false,
-  "fixedtoolbar": false,
-  "redirect": false,
-  "history": false,
-  "loaddrafts": false,
-  "batchduplicate": false,
-  "escalatethreads": false,
-  "movethreads": false,
-  "increasecontrast": false,
-  "stickysidebarheaders": false
+  'list': true,
+  'thread': true,
+  'threadall': false,
+  'fixedtoolbar': false,
+  'redirect': false,
+  'history': false,
+  'loaddrafts': false,
+  'batchduplicate': false,
+  'escalatethreads': false,
+  'movethreads': false,
+  'increasecontrast': false,
+  'stickysidebarheaders': false,
 };
 
 const deprecatedOptions = [
-  "list",
-  "escalatethreads",
-  "movethreads",
-  "batchduplicate"
+  'list',
+  'escalatethreads',
+  'movethreads',
+  'batchduplicate',
 ];
 
 function cleanUpOptions(options) {
@@ -43,9 +43,9 @@
 function save() {
   var options = defaultOptions;
 
-  Object.keys(options).forEach(function (opt) {
+  Object.keys(options).forEach(function(opt) {
     if (deprecatedOptions.includes(opt)) return;
-    options[opt] = document.querySelector("#"+opt).checked || false;
+    options[opt] = document.querySelector('#' + opt).checked || false;
   });
 
   chrome.storage.sync.set(options, function() {
@@ -54,16 +54,21 @@
 }
 
 function i18n() {
-  document.querySelectorAll("[data-i18n]").forEach(el => el.innerHTML = chrome.i18n.getMessage("options_"+el.getAttribute("data-i18n")));
+  document.querySelectorAll('[data-i18n]')
+      .forEach(
+          el => el.innerHTML = chrome.i18n.getMessage(
+              'options_' + el.getAttribute('data-i18n')));
 }
 
 function thread() {
-  if (document.querySelector("#thread").checked && document.querySelector("#threadall").checked) {
-    document.querySelector("#"+(this.id == "thread" ? "threadall" : "thread")).checked = false;
+  if (document.querySelector('#thread').checked &&
+      document.querySelector('#threadall').checked) {
+    document.querySelector('#' + (this.id == 'thread' ? 'threadall' : 'thread'))
+        .checked = false;
   }
 }
 
-window.addEventListener("load", function() {
+window.addEventListener('load', function() {
   i18n();
 
   chrome.storage.sync.get(null, function(items) {
@@ -71,11 +76,13 @@
 
     Object.keys(defaultOptions).forEach(function(opt) {
       if (items[opt] === true && !deprecatedOptions.includes(opt)) {
-        document.querySelector("#"+opt).checked = true;
+        document.querySelector('#' + opt).checked = true;
       }
     });
 
-    ["thread", "threadall"].forEach(el => document.querySelector("#"+el).addEventListener("change", thread));
-    document.querySelector("#save").addEventListener("click", save);
+    ['thread', 'threadall'].forEach(
+        el => document.querySelector('#' + el).addEventListener(
+            'change', thread));
+    document.querySelector('#save').addEventListener('click', save);
   });
 });
diff --git a/src/profile_inject.js b/src/profile_inject.js
index 6cdfc91..a84eba3 100644
--- a/src/profile_inject.js
+++ b/src/profile_inject.js
@@ -1,10 +1,21 @@
 chrome.storage.sync.get(null, function(items) {
-  if (items.history && document.querySelector(".user-profile__user-links") === null) {
-    var nameElement = document.querySelector(".user-profile__user-name");
+  if (items.history &&
+      document.querySelector('.user-profile__user-links') === null) {
+    var nameElement = document.querySelector('.user-profile__user-name');
     if (nameElement !== null) {
       var name = encodeURIComponent(nameElement.innerHTML);
-      var link = document.location.pathname.split("/profile")[0]+"/threads?thread_filter=(creator:%22"+name+"%22+%7C+replier:%22"+name+"%22)";
-      document.querySelector(".user-profile__user-details-container").insertAdjacentHTML('beforeend', '<div class="user-profile__user-links"><div class="user-profile__user-link-title">'+chrome.i18n.getMessage("inject_links")+'</div><ul><li class="user-profile__user-link"><a href="'+link+'" data-stats-id="my-posts-link">'+chrome.i18n.getMessage("inject_previousposts")+'</a></li></ul></div>');
+      var link = document.location.pathname.split('/profile')[0] +
+          '/threads?thread_filter=(creator:%22' + name + '%22+%7C+replier:%22' +
+          name + '%22)';
+      document.querySelector('.user-profile__user-details-container')
+          .insertAdjacentHTML(
+              'beforeend',
+              '<div class="user-profile__user-links"><div class="user-profile__user-link-title">' +
+                  chrome.i18n.getMessage('inject_links') +
+                  '</div><ul><li class="user-profile__user-link"><a href="' +
+                  link + '" data-stats-id="my-posts-link">' +
+                  chrome.i18n.getMessage('inject_previousposts') +
+                  '</a></li></ul></div>');
     }
   }
 });
diff --git a/src/thread_inject.js b/src/thread_inject.js
index c3b484e..b94f405 100644
--- a/src/thread_inject.js
+++ b/src/thread_inject.js
@@ -9,30 +9,30 @@
 };
 
 var intersectionOptions = {
-  threshold: 1.0
-}
+  threshold: 1.0,
+};
 
 chrome.storage.sync.get(null, function(items) {
-  var path = document.location.pathname.split("/");
-  if (path[path.length - 1] == "new" ||
-      (path.length > 1 && path[path.length - 1] == "" &&
-          path[path.length - 2] == "new")) {
+  var path = document.location.pathname.split('/');
+  if (path[path.length - 1] == 'new' ||
+      (path.length > 1 && path[path.length - 1] == '' &&
+       path[path.length - 2] == 'new')) {
     return;
   }
 
-  var redirectLink = document.querySelector(".community-console");
+  var redirectLink = document.querySelector('.community-console');
   if (items.redirect && redirectLink !== null) {
     window.location = redirectLink.href;
   } else {
     var button =
-        document.querySelector(".thread-all-replies__load-more-button");
+        document.querySelector('.thread-all-replies__load-more-button');
     if (items.thread && button !== null) {
       intersectionObserver =
           new IntersectionObserver(intersectionCallback, intersectionOptions);
       intersectionObserver.observe(button);
     }
     var allbutton =
-        document.querySelector(".thread-all-replies__load-all-button");
+        document.querySelector('.thread-all-replies__load-all-button');
     if (items.threadall && button !== null) {
       intersectionObserver =
           new IntersectionObserver(intersectionCallback, intersectionOptions);
