diff --git a/GreaterGood CTG AutoClicker.js b/GreaterGood CTG AutoClicker.js
index 1df361c202926127a6222558967368394a15b172..2dc04ec7629e25bb97c0d30bda5c325dfea79ea5 100644
--- a/GreaterGood CTG AutoClicker.js	
+++ b/GreaterGood CTG AutoClicker.js	
@@ -5,7 +5,7 @@
 // @description    Automatically clicks through all the buttons on all subsites of the GreaterGood ClickToGive program every two hours.
 // @description:de Klickt sich automatisch alle zwei Std. durch alle Buttons auf allen Seiten des GreaterGood-ClickToGive-Programms.
 
-// @version        3.0.0
+// @version        3.1.0
 // @copyright      2023+, Jan G. (Rsge)
 // @license        Mozilla Public License 2.0
 // @icon           https://http-aws.greatergood.com/img/ggc/favicon-96x96.png
@@ -13,6 +13,8 @@
 // @namespace      https://github.com/Rsge
 // @homepageURL    https://github.com/Rsge/GreaterGood-CTG-AutoClicker
 // @supportURL     https://github.com/Rsge/GreaterGood-CTG-AutoClicker/issues
+// @downloadURL    https://update.greasyfork.org/scripts/433055/GreaterGood%20CTG%20AutoClicker.user.js
+// @updateURL      https://update.greasyfork.org/scripts/433055/GreaterGood%20CTG%20AutoClicker.meta.js
 
 // @match          https://greatergood.com/*
 // @match          https://theanimalrescuesite.com/*
@@ -25,56 +27,68 @@
   'use strict';
 
   // Max amount of seconds to wait before clicking button
-  const MAX_RANDOM_TO_CLICK_SECONDS = 4;
+  const MAX_RANDOM_TO_CLICK_SECONDS = 3;
   // Amount of seconds to wait for site to load after click
-  const WAIT_SECONDS = 3
+  const WAIT_SECONDS = 2
+  // Max amount of tries to wait for buttons to load before giving up
+  const MAX_TRIES = 5
   // Minutes between possible click-throughs
   const INTERVAL_MINUTES = 120;
+  // Warning for buttons not found
+  const BUTTONS_NOT_FOUND_WARNING = "Buttons could not be found after " + (MAX_TRIES * WAIT_SECONDS) + " s.";
 
-  // Basic function
+  // Basic functions
   function sleep(ms) {
     return new Promise(resolve => setTimeout(resolve, ms));
   }
+  function sToMs(s) {
+    return s * 1000;
+  }
 
   // Vars
   let i;
-  let progButtonsLeft = true;
+  let progButtonsLeft;
   do {
-    // On button site, click button.
+    // When a CTG-button is present, click it.
     let ctgButton = document.getElementById("ctg-click-box-button");
     if (ctgButton !== null) {
-      let millisecondsToClick = (Math.floor(Math.random() * MAX_RANDOM_TO_CLICK_SECONDS) + 1) * 1000;
+      let millisecondsToClick = sToMs(WAIT_SECONDS + Math.floor(Math.random() * MAX_RANDOM_TO_CLICK_SECONDS));
       await sleep(millisecondsToClick);
       ctgButton.click();
     }
+    // Wait for alternate sites' buttons to load.
+    i = 0;
     let progButtons = [];
-    // Wait for buttons to load.
     do {
-      await sleep(WAIT_SECONDS * 1000)
-      progButtonsLeft = true;
-      // On thanks site, choose new site if not all are already clicked.
+      await sleep(sToMs(WAIT_SECONDS))
       progButtons = document.getElementsByClassName("ctg-click-grid-button");
-      let foundButton = false;
-      for (i = 0; i < progButtons.length; i++) {
-        let progButtonClass = progButtons[i].className;
-        //console.log(progButtonClass);
-        let progButtonValue = progButtons[i].attributes[0].value;
-        //console.log(progButtonValue);
-        if (!progButtonClass.includes("click-attempted") // Button clicked already
-            && !progButtonValue.startsWith("http")) { // Is external site
-          progButtons[i].click();
-          foundButton = true;
-          break;
-        }
+      i += 1
+      if (i > MAX_TRIES) {
+        console.warn(BUTTONS_NOT_FOUND_WARNING);
+        return;
       }
-      if (foundButton) {
+    } while (progButtons.length == 0);
+    // Choose next site if not all are already clicked.
+    progButtonsLeft = true;
+    let foundButton = false;
+    for (i = 0; i < progButtons.length; i++) {
+      let progButtonClass = progButtons[i].className;
+      //console.log(progButtonClass);
+      let progButtonValue = progButtons[i].attributes[0].value;
+      //console.log(progButtonValue);
+      if (!progButtonClass.includes("click-attempted") // Button clicked already
+          && !progButtonValue.startsWith("http")) { // Is external site
+        foundButton = true;
+        progButtons[i].click();
         break;
       }
+    }
+    if (!foundButton) {
       progButtonsLeft = false;
-    } while (progButtons.length == 0)
-  } while (progButtonsLeft)
+    }
+  } while (progButtonsLeft);
 
   // Wait for specified time, then reload page to click through again.
-  let intervalMilliseconds = (INTERVAL_MINUTES + 1) * 60 * 1000;
+  let intervalMilliseconds = sToMs((INTERVAL_MINUTES + 1) * 60);
   setTimeout(function(){location.reload(true);}, intervalMilliseconds);
 })();