diff --git a/docs/dev/engines/index.rst b/docs/dev/engines/index.rst
index 88dd874d3..6558dc2c2 100644
--- a/docs/dev/engines/index.rst
+++ b/docs/dev/engines/index.rst
@@ -93,7 +93,7 @@ Online Currency
 
    - :py:obj:`processors.online_currency <searx.search.processors.online_currency>`
 
-*no engine of this type is documented yet / comming soon*
+*no engine of this type is documented yet / coming soon*
 
 .. _online dictionary:
 
@@ -104,4 +104,4 @@ Online Dictionary
 
    - :py:obj:`processors.online_dictionary <searx.search.processors.online_dictionary>`
 
-*no engine of this type is documented yet / comming soon*
+*no engine of this type is documented yet / coming soon*
diff --git a/searx/botdetection/config.py b/searx/botdetection/config.py
index 2a982ba64..274be77df 100644
--- a/searx/botdetection/config.py
+++ b/searx/botdetection/config.py
@@ -22,7 +22,7 @@ log = logging.getLogger(__name__)
 
 
 class FALSE:
-    """Class of ``False`` singelton"""
+    """Class of ``False`` singleton"""
 
     # pylint: disable=multiple-statements
     def __init__(self, msg):
@@ -81,7 +81,7 @@ class Config:
         return cfg
 
     def __init__(self, cfg_schema: typing.Dict, deprecated: typing.Dict[str, str]):
-        """Construtor of class Config.
+        """Constructor of class Config.
 
         :param cfg_schema: Schema of the configuration
         :param deprecated: dictionary that maps deprecated configuration names to a messages
@@ -159,7 +159,7 @@ class Config:
         return pathlib.Path(str(val))
 
     def pyobj(self, name, default=UNSET):
-        """Get python object refered by full qualiffied name (FQN) in the config
+        """Get python object referred by full qualiffied name (FQN) in the config
         string."""
 
         fqn = self.get(name, default)
diff --git a/searx/botdetection/link_token.py b/searx/botdetection/link_token.py
index 8f8e9839c..4273e22c5 100644
--- a/searx/botdetection/link_token.py
+++ b/searx/botdetection/link_token.py
@@ -55,10 +55,10 @@ from ._helpers import (
 )
 
 TOKEN_LIVE_TIME = 600
-"""Livetime (sec) of limiter's CSS token."""
+"""Lifetime (sec) of limiter's CSS token."""
 
 PING_LIVE_TIME = 3600
-"""Livetime (sec) of the ping-key from a client (request)"""
+"""Lifetime (sec) of the ping-key from a client (request)"""
 
 PING_KEY = 'SearXNG_limiter.ping'
 """Prefix of all ping-keys generated by :py:obj:`get_ping_key`"""
diff --git a/searx/engines/base.py b/searx/engines/base.py
index f81906482..4f99d6717 100755
--- a/searx/engines/base.py
+++ b/searx/engines/base.py
@@ -31,7 +31,7 @@ paging = True
 number_of_results = 10
 
 # shortcuts for advanced search
-shorcut_dict = {
+shortcut_dict = {
     # user-friendly keywords
     'format:': 'dcformat:',
     'author:': 'dccreator:',
@@ -55,7 +55,7 @@ shorcut_dict = {
 
 def request(query, params):
     # replace shortcuts with API advanced search keywords
-    for key, val in shorcut_dict.items():
+    for key, val in shortcut_dict.items():
         query = re.sub(key, val, query)
 
     # basic search
diff --git a/searx/engines/bing.py b/searx/engines/bing.py
index adb8e90a3..d4f46eaaf 100644
--- a/searx/engines/bing.py
+++ b/searx/engines/bing.py
@@ -10,7 +10,7 @@ On the `preference page`_ Bing offers a lot of languages an regions (see section
 LANGUAGE and COUNTRY/REGION).  The Language is the language of the UI, we need
 in SearXNG to get the translations of data such as *"published last week"*.
 
-There is a description of the offical search-APIs_, unfortunately this is not
+There is a description of the official search-APIs_, unfortunately this is not
 the API we can use or that bing itself would use.  You can look up some things
 in the API to get a better picture of bing, but the value specifications like
 the market codes are usually outdated or at least no longer used by bing itself.
@@ -91,7 +91,7 @@ def request(query, params):
     page = params.get('pageno', 1)
     query_params = {
         'q': query,
-        # if arg 'pq' is missed, somtimes on page 4 we get results from page 1,
+        # if arg 'pq' is missed, sometimes on page 4 we get results from page 1,
         # don't ask why it is only sometimes / its M$ and they have never been
         # deterministic ;)
         'pq': query,
@@ -177,7 +177,7 @@ def response(resp):
         logger.debug('result error :\n%s', e)
 
     if result_len and _page_offset(resp.search_params.get("pageno", 0)) > result_len:
-        # Avoid reading more results than avalaible.
+        # Avoid reading more results than available.
         # For example, if there is 100 results from some search and we try to get results from 120 to 130,
         # Bing will send back the results from 0 to 10 and no error.
         # If we compare results count with the first parameter of the request we can avoid this "invalid" results.
diff --git a/searx/engines/duckduckgo.py b/searx/engines/duckduckgo.py
index 36125556b..82b37f9d1 100644
--- a/searx/engines/duckduckgo.py
+++ b/searx/engines/duckduckgo.py
@@ -42,7 +42,7 @@ about = {
 }
 
 send_accept_language_header = True
-"""DuckDuckGo-Lite tries to guess user's prefered language from the HTTP
+"""DuckDuckGo-Lite tries to guess user's preferred language from the HTTP
 ``Accept-Language``.  Optional the user can select a region filter (but not a
 language).
 """
@@ -402,7 +402,7 @@ def fetch_traits(engine_traits: EngineTraits):
     """Fetch languages & regions from DuckDuckGo.
 
     SearXNG's ``all`` locale maps DuckDuckGo's "Alle regions" (``wt-wt``).
-    DuckDuckGo's language "Browsers prefered language" (``wt_WT``) makes no
+    DuckDuckGo's language "Browsers preferred language" (``wt_WT``) makes no
     sense in a SearXNG request since SearXNG's ``all`` will not add a
     ``Accept-Language`` HTTP header.  The value in ``engine_traits.all_locale``
     is ``wt-wt`` (the region).
diff --git a/searx/engines/startpage.py b/searx/engines/startpage.py
index 422ae7b20..f90cf2ac9 100644
--- a/searx/engines/startpage.py
+++ b/searx/engines/startpage.py
@@ -142,7 +142,7 @@ search_url = base_url + '/sp/search'
 
 # specific xpath variables
 # ads xpath //div[@id="results"]/div[@id="sponsored"]//div[@class="result"]
-# not ads: div[@class="result"] are the direct childs of div[@id="results"]
+# not ads: div[@class="result"] are the direct children of div[@id="results"]
 search_form_xpath = '//form[@id="search"]'
 """XPath of Startpage's origin search form
 
diff --git a/searx/engines/tineye.py b/searx/engines/tineye.py
index c35799c69..20f6e41fd 100644
--- a/searx/engines/tineye.py
+++ b/searx/engines/tineye.py
@@ -208,7 +208,7 @@ def response(resp):
                 'title': backlink['image_name'],
                 'img_src': backlink['url'],
                 'format': tineye_match['image_format'],
-                'widht': tineye_match['width'],
+                'width': tineye_match['width'],
                 'height': tineye_match['height'],
                 'publishedDate': backlink['crawl_date'],
             }
diff --git a/searx/engines/voidlinux.py b/searx/engines/voidlinux.py
index 0d807ace4..e38abd862 100644
--- a/searx/engines/voidlinux.py
+++ b/searx/engines/voidlinux.py
@@ -32,7 +32,7 @@ void_arch = 'x86_64'
 """Default architecture to search for.  For valid values see :py:obj:`ARCH_RE`"""
 
 ARCH_RE = re.compile('aarch64-musl|armv6l-musl|armv7l-musl|x86_64-musl|aarch64|armv6l|armv7l|i686|x86_64')
-"""Regular expresion that match a architecture in the query string."""
+"""Regular expression that match a architecture in the query string."""
 
 
 def request(query, params):
diff --git a/searx/limiter.toml b/searx/limiter.toml
index 9560ec8f6..b64a7bf28 100644
--- a/searx/limiter.toml
+++ b/searx/limiter.toml
@@ -12,7 +12,7 @@ ipv6_prefix = 48
 
 [botdetection.ip_limit]
 
-# To get unlimited access in a local network, by default link-lokal addresses
+# To get unlimited access in a local network, by default link-local addresses
 # (networks) are not monitored by the ip_limit
 filter_link_local = false
 
diff --git a/searx/locales.py b/searx/locales.py
index d7592df3d..3d14fe6e8 100644
--- a/searx/locales.py
+++ b/searx/locales.py
@@ -120,7 +120,7 @@ _TR_LOCALES: list[str] = []
 
 
 def get_translation_locales() -> list[str]:
-    """Returns the list of transaltion locales (*underscore*).  The list is
+    """Returns the list of translation locales (*underscore*).  The list is
     generated from the translation folders in :origin:`searx/translations`"""
 
     global _TR_LOCALES  # pylint:disable=global-statement
diff --git a/searx/plugins/unit_converter.py b/searx/plugins/unit_converter.py
index 057e66e78..c85996a76 100644
--- a/searx/plugins/unit_converter.py
+++ b/searx/plugins/unit_converter.py
@@ -234,7 +234,7 @@ def _parse_text_and_convert(search, from_query, to_query):
         value = target_from_si(float(value))
 
     if measured.group('E'):
-        # when incomming notation is scientific, outgoing notation is scientific
+        # when incoming notation is scientific, outgoing notation is scientific
         result = babel.numbers.format_scientific(value, locale=_locale)
     else:
         result = babel.numbers.format_decimal(value, locale=_locale, format='#,##0.##########;-#')
diff --git a/searx/preferences.py b/searx/preferences.py
index 18c3f08d8..c63ed904e 100644
--- a/searx/preferences.py
+++ b/searx/preferences.py
@@ -325,7 +325,7 @@ class ClientPref:
     # hint: searx.webapp.get_client_settings should be moved into this class
 
     locale: babel.Locale
-    """Locale prefered by the client."""
+    """Locale preferred by the client."""
 
     def __init__(self, locale: Optional[babel.Locale] = None):
         self.locale = locale
diff --git a/searx/static/themes/simple/src/js/head/00_init.js b/searx/static/themes/simple/src/js/head/00_init.js
index 4aeece8c2..a7c61c43e 100644
--- a/searx/static/themes/simple/src/js/head/00_init.js
+++ b/searx/static/themes/simple/src/js/head/00_init.js
@@ -13,8 +13,8 @@
   };
 
   // update the css
-  var hmtlElement = d.getElementsByTagName("html")[0];
-  hmtlElement.classList.remove('no-js');
-  hmtlElement.classList.add('js');
+  var htmlElement = d.getElementsByTagName("html")[0];
+  htmlElement.classList.remove('no-js');
+  htmlElement.classList.add('js');
 
 })(window, document);
diff --git a/searx/static/themes/simple/src/js/main/00_toolkit.js b/searx/static/themes/simple/src/js/main/00_toolkit.js
index e23142412..4e374a019 100644
--- a/searx/static/themes/simple/src/js/main/00_toolkit.js
+++ b/searx/static/themes/simple/src/js/main/00_toolkit.js
@@ -8,7 +8,7 @@ window.searxng = (function (w, d) {
 
   'use strict';
 
-  // not invented here tookit with bugs fixed elsewhere
+  // not invented here toolkit with bugs fixed elsewhere
   // purposes : be just good enough and as small as possible
 
   // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/
diff --git a/searx/static/themes/simple/src/js/main/keyboard.js b/searx/static/themes/simple/src/js/main/keyboard.js
index 1fb12cae1..e16134579 100644
--- a/searx/static/themes/simple/src/js/main/keyboard.js
+++ b/searx/static/themes/simple/src/js/main/keyboard.js
@@ -441,7 +441,7 @@ searxng.ready(function () {
       var body = document.getElementsByTagName('body')[0];
       body.appendChild(helpPanel);
     } else {
-      // togggle hidden
+      // toggle hidden
       helpPanel.classList.toggle('invisible');
       return;
     }
diff --git a/searx/static/themes/simple/src/js/main/mapresult.js b/searx/static/themes/simple/src/js/main/mapresult.js
index 419bfa9fa..2c3777678 100644
--- a/searx/static/themes/simple/src/js/main/mapresult.js
+++ b/searx/static/themes/simple/src/js/main/mapresult.js
@@ -67,7 +67,7 @@
         } */
       });
 
-      // this event occour only once per element
+      // this event occur only once per element
       event.preventDefault();
     });
   });
diff --git a/searx/static/themes/simple/src/less/embedded.less b/searx/static/themes/simple/src/less/embedded.less
index 2e9216ad2..bd7b89ea6 100644
--- a/searx/static/themes/simple/src/less/embedded.less
+++ b/searx/static/themes/simple/src/less/embedded.less
@@ -13,8 +13,8 @@ iframe[src^="https://www.mixcloud.com"] {
   // issue with an image URL that is blocked since it is an a Cross-Origin
   // request. The alternative text (<img alt='Mixcloud Logo'> then cause an
   // scrollbar in the inner of the iframe we can't avoid.  Another quirk comes
-  // when pressing the play button, somtimes the shown player has an height of
-  // 200px, somtimes 250px.
+  // when pressing the play button, sometimes the shown player has an height of
+  // 200px, sometimes 250px.
   height: 250px;
 }
 
diff --git a/searx/static/themes/simple/src/less/style-center.less b/searx/static/themes/simple/src/less/style-center.less
index 30c52cd5a..8256f45ac 100644
--- a/searx/static/themes/simple/src/less/style-center.less
+++ b/searx/static/themes/simple/src/less/style-center.less
@@ -4,31 +4,31 @@ see the CSS rules for #results in style.less ( grid-template-columns and gap).
 
 In this file, the --center-page-width values comes from the Oscar theme (Bootstrap 3).
 
-All rules starts with ".center-aligment-yes #main_results" to be enabled only
+All rules starts with ".center-alignment-yes #main_results" to be enabled only
 on the /search URL and when the "center alignment" preference is enabled.
 */
 
 @media screen and (min-width: @phone) {
-  .center-aligment-yes #main_results {
+  .center-alignment-yes #main_results {
     --center-page-width: 48rem;
   }
 }
 
 @media screen and (min-width: 62rem) {
-  .center-aligment-yes #main_results {
+  .center-alignment-yes #main_results {
     --center-page-width: 60rem;
   }
 }
 
 @media screen and (min-width: @tablet) {
-  .center-aligment-yes #main_results {
+  .center-alignment-yes #main_results {
     --center-page-width: 73rem;
   }
 }
 
 @media screen and (min-width: @phone) and (max-width: @tablet) {
   // any change must be reset in @media screen and (min-width: @tablet) { ... }
-  .center-aligment-yes #main_results {
+  .center-alignment-yes #main_results {
     #results {
       grid-template-columns: 60% calc(40% - @results-gap);
       margin-left: 0;
@@ -50,7 +50,7 @@ on the /search URL and when the "center alignment" preference is enabled.
 }
 
 @media screen and (min-width: @tablet) {
-  .center-aligment-yes #main_results {
+  .center-alignment-yes #main_results {
     display: flex;
     flex-direction: column;
     align-items: center;
diff --git a/searx/static/themes/simple/src/less/style.less b/searx/static/themes/simple/src/less/style.less
index cbc722894..6f8549f70 100644
--- a/searx/static/themes/simple/src/less/style.less
+++ b/searx/static/themes/simple/src/less/style.less
@@ -297,7 +297,7 @@ article[data-vim-selected].category-social {
     padding-top: 0.6rem;
     .ltr-padding-right(1rem);
     width: 7rem;
-    height: unset; // remove heigth value that was needed for lazy loading
+    height: unset; // remove height value that was needed for lazy loading
   }
 
   .break {
@@ -399,7 +399,7 @@ article[data-vim-selected].category-social {
     padding-top: 0.6rem;
     .ltr-padding-right(1rem);
     width: 20rem;
-    height: unset; // remove heigth value that was needed for lazy loading
+    height: unset; // remove height value that was needed for lazy loading
   }
 }
 
@@ -639,12 +639,12 @@ summary.title {
   padding-top: 1em;
 }
 
-.sidebar-collapsable {
+.sidebar-collapsible {
   border-top: 1px solid var(--color-sidebar-border);
   padding-bottom: 0.5em;
 }
 
-#sidebar-end-collapsable {
+#sidebar-end-collapsible {
   border-bottom: 1px solid var(--color-sidebar-border);
   width: 100%;
 }
@@ -1007,10 +1007,10 @@ summary.title {
 }
 
 @media screen and (min-width: @phone) and (max-width: @tablet) {
-  // when .center-aligment-yes, see style-center.less
+  // when .center-alignment-yes, see style-center.less
   // the media query includes "min-width: @phone"
   // because the phone layout includes the tablet layout unconditionally.
-  .center-aligment-no {
+  .center-alignment-no {
     .results-tablet();
   }
 }
diff --git a/searx/templates/simple/base.html b/searx/templates/simple/base.html
index 4aeab383a..93a1a3902 100644
--- a/searx/templates/simple/base.html
+++ b/searx/templates/simple/base.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class="no-js theme-{{ preferences.get_value('simple_style') or 'auto' }} center-aligment-{{ preferences.get_value('center_alignment') and 'yes' or 'no' }}" lang="{{ locale_rfc5646 }}" {% if rtl %} dir="rtl"{% endif %}>
+<html class="no-js theme-{{ preferences.get_value('simple_style') or 'auto' }} center-alignment-{{ preferences.get_value('center_alignment') and 'yes' or 'no' }}" lang="{{ locale_rfc5646 }}" {% if rtl %} dir="rtl"{% endif %}>
 <head>
   <meta charset="UTF-8">
   <meta name="description" content="SearXNG — a privacy-respecting, open metasearch engine">
diff --git a/searx/templates/simple/elements/apis.html b/searx/templates/simple/elements/apis.html
index 5c7a07110..d1d5ec60d 100644
--- a/searx/templates/simple/elements/apis.html
+++ b/searx/templates/simple/elements/apis.html
@@ -1,5 +1,5 @@
 <div id="apis" role="complementary" aria-labelledby="apis-title">
-  <details class="sidebar-collapsable">
+  <details class="sidebar-collapsible">
     <summary class="title" id="apis-title">{{ _('Download results') }}</summary>
     <div class="wrapper">
       {%- for output_type in search_formats -%}
diff --git a/searx/templates/simple/elements/engines_msg.html b/searx/templates/simple/elements/engines_msg.html
index 7a843ac14..addf0edc6 100644
--- a/searx/templates/simple/elements/engines_msg.html
+++ b/searx/templates/simple/elements/engines_msg.html
@@ -1,9 +1,9 @@
 <div id="engines_msg">
   {% if (not results and not answers) or not max_response_time %}
-  <details class="sidebar-collapsable" open>
+  <details class="sidebar-collapsible" open>
     <summary class="title" id="engines_msg-title">{{ _('Messages from the search engines') }}</summary>
   {% else %}
-  <details class="sidebar-collapsable">
+  <details class="sidebar-collapsible">
     <summary class="title" id="engines_msg-title">{{ _('Response time') }}: {{ max_response_time | round(1) }} {{ _('seconds') }}</summary>
   {% endif %}
     <table class="engine-stats" id="engines_msg-table">
diff --git a/searx/templates/simple/elements/search_url.html b/searx/templates/simple/elements/search_url.html
index 77c956dac..a585ff70b 100644
--- a/searx/templates/simple/elements/search_url.html
+++ b/searx/templates/simple/elements/search_url.html
@@ -1,5 +1,5 @@
 <div id="search_url" role="complementary" aria-labelledby="search_url-title">
-  <details class="sidebar-collapsable">
+  <details class="sidebar-collapsible">
     <summary class="title" id="search_url-title">{{ _('Search URL') }}</summary>
     <button id="copy_url" type="submit" data-copied-text="{{ _('Copied') }}">{{ _('Copy') }}</button>
     <div class="selectable_url">
diff --git a/searx/templates/simple/elements/suggestions.html b/searx/templates/simple/elements/suggestions.html
index 077a8ed2d..e90755176 100644
--- a/searx/templates/simple/elements/suggestions.html
+++ b/searx/templates/simple/elements/suggestions.html
@@ -1,5 +1,5 @@
 <div id="suggestions" role="complementary" aria-labelledby="suggestions-title">
-  <details class="sidebar-collapsable">
+  <details class="sidebar-collapsible">
     <summary class="title" id="suggestions-title">{{ _('Suggestions') }}</summary>
     <div class="wrapper">
       {%- for suggestion in suggestions -%}
diff --git a/searx/templates/simple/new_issue.html b/searx/templates/simple/new_issue.html
index ba7997bd4..142da727a 100644
--- a/searx/templates/simple/new_issue.html
+++ b/searx/templates/simple/new_issue.html
@@ -61,7 +61,7 @@ or manually by executing the searx/webapp.py file? -->
 {%- endfor -%}
     </textarea>
     <input type="checkbox" id="step1">
-    <label for="step1">{{ _('Start submiting a new issue on GitHub') }}</label>
+    <label for="step1">{{ _('Start submitting a new issue on GitHub') }}</label>
     <div class="step1 step_content">
         <p><a href="{{ get_setting('brand.issue_url') }}?q=is%3Aissue+Bug:%20{{ engine_name }} {{ technical_report }}" target="_blank" rel="noreferrer noreferrer">{{ _('Please check for existing bugs about this engine on GitHub') }}</a></p>
     </div>
diff --git a/searx/templates/simple/results.html b/searx/templates/simple/results.html
index fbc41a17a..e2d4217d5 100644
--- a/searx/templates/simple/results.html
+++ b/searx/templates/simple/results.html
@@ -44,7 +44,7 @@
 
         {%- if infoboxes -%}
           <div id="infoboxes">
-            <details open class="sidebar-collapsable">
+            <details open class="sidebar-collapsible">
               <summary class="title">{{ _('Info') }}</summary>
               {%- for infobox in infoboxes -%}
                 {%- include 'simple/elements/infobox.html' -%}
@@ -67,7 +67,7 @@
           {%- include 'simple/elements/apis.html' -%}
         {%- endif -%}
 
-        <div id="sidebar-end-collapsable"></div>
+        <div id="sidebar-end-collapsible"></div>
     </div>
 
     {% if corrections %}
diff --git a/searx/translations/messages.pot b/searx/translations/messages.pot
index 209251a49..0d5776c63 100644
--- a/searx/translations/messages.pot
+++ b/searx/translations/messages.pot
@@ -677,7 +677,7 @@ msgid "proxied"
 msgstr ""
 
 #: searx/templates/simple/new_issue.html:64
-msgid "Start submiting a new issue on GitHub"
+msgid "Start submitting a new issue on GitHub"
 msgstr ""
 
 #: searx/templates/simple/new_issue.html:66
diff --git a/searx/utils.py b/searx/utils.py
index c0c6261f9..4fcbd9e3c 100644
--- a/searx/utils.py
+++ b/searx/utils.py
@@ -48,7 +48,7 @@ _XPATH_CACHE: Dict[str, XPath] = {}
 _LANG_TO_LC_CACHE: Dict[str, Dict[str, str]] = {}
 
 _FASTTEXT_MODEL: Optional["fasttext.FastText._FastText"] = None  # type: ignore
-"""fasttext model to predict laguage of a search term"""
+"""fasttext model to predict language of a search term"""
 
 SEARCH_LANGUAGE_CODES = frozenset([searxng_locale[0].split('-')[0] for searxng_locale in sxng_locales])
 """Languages supported by most searxng engines (:py:obj:`searx.sxng_locales.sxng_locales`)."""
diff --git a/searx/webadapter.py b/searx/webadapter.py
index 53d9bfa89..134724b25 100644
--- a/searx/webadapter.py
+++ b/searx/webadapter.py
@@ -225,7 +225,7 @@ def get_search_query_from_webapp(
     """Assemble data from preferences and request.form (from the HTML form) needed
     in a search query.
 
-    The returned tuple consits of:
+    The returned tuple consists of:
 
     1. instance of :py:obj:`searx.search.SearchQuery`
     2. instance of :py:obj:`searx.query.RawTextQuery`
diff --git a/searxng_extra/docs_prebuild b/searxng_extra/docs_prebuild
index 9e4a18524..b245dc509 100755
--- a/searxng_extra/docs_prebuild
+++ b/searxng_extra/docs_prebuild
@@ -72,7 +72,7 @@ def _instance_infosetset_ctx(base_url):
     #   from searx.network import network
     #   network.done()
 
-    # waiting some seconds before ending the comand line was the only solution I
+    # waiting some seconds before ending the command line was the only solution I
     # found ..
 
     time.sleep(3)
diff --git a/searxng_extra/update/update_engine_traits.py b/searxng_extra/update/update_engine_traits.py
index e31a143ea..663275950 100755
--- a/searxng_extra/update/update_engine_traits.py
+++ b/searxng_extra/update/update_engine_traits.py
@@ -85,7 +85,7 @@ def main():
 
 
 def fetch_traits_map():
-    """Fetchs supported languages for each engine and writes json file with those."""
+    """Fetches supported languages for each engine and writes json file with those."""
     network.set_timeout_for_thread(10.0)
 
     def log(msg):
diff --git a/searxng_extra/update/update_locales.py b/searxng_extra/update/update_locales.py
index 04abaecda..ef7a91263 100755
--- a/searxng_extra/update/update_locales.py
+++ b/searxng_extra/update/update_locales.py
@@ -25,7 +25,7 @@ from searx.locales import (
 )
 
 LOCALE_DATA_FILE = Path(searx_dir) / 'data' / 'locales.json'
-TRANSLATOINS_FOLDER = Path(searx_dir) / 'translations'
+TRANSLATIONS_FOLDER = Path(searx_dir) / 'translations'
 
 
 def main():
diff --git a/tests/robot/__main__.py b/tests/robot/__main__.py
index 20b15ef04..7a3e8f34c 100644
--- a/tests/robot/__main__.py
+++ b/tests/robot/__main__.py
@@ -65,7 +65,7 @@ def main():
         test_layer.setUp()
         run_robot_tests([getattr(test_webapp, x) for x in dir(test_webapp) if x.startswith('test_')])
     except Exception:  # pylint: disable=broad-except
-        print('Error occured: {0}'.format(traceback.format_exc()))
+        print('Error occurred: {0}'.format(traceback.format_exc()))
         sys.exit(1)
     finally:
         test_layer.tearDown()
diff --git a/utils/lib.sh b/utils/lib.sh
index 7e80b12f1..ead4b0c61 100755
--- a/utils/lib.sh
+++ b/utils/lib.sh
@@ -772,7 +772,7 @@ docs.clean() {
 
 docs.prebuild() {
     # Dummy function to run some actions before sphinx-doc build gets started.
-    # This finction needs to be overwritten by the application script.
+    # This function needs to be overwritten by the application script.
     true
     dump_return $?
 }
@@ -1065,7 +1065,7 @@ nginx_remove_app() {
     # usage:  nginx_remove_app <myapp.conf>
 
     info_msg "remove nginx app: $1"
-    nginx_dissable_app "$1"
+    nginx_disable_app "$1"
     rm -f "${NGINX_APPS_AVAILABLE}/$1"
 }
 
@@ -1082,7 +1082,7 @@ nginx_enable_app() {
     nginx_reload
 }
 
-nginx_dissable_app() {
+nginx_disable_app() {
 
     # usage:  nginx_disable_app <myapp.conf>
 
@@ -1192,7 +1192,7 @@ apache_remove_site() {
     # usage:  apache_remove_site <mysite.conf>
 
     info_msg "remove apache site: $1"
-    apache_dissable_site "$1"
+    apache_disable_site "$1"
     rm -f "${APACHE_SITES_AVAILABLE}/$1"
 }
 
@@ -1222,7 +1222,7 @@ apache_enable_site() {
     apache_reload
 }
 
-apache_dissable_site() {
+apache_disable_site() {
 
     # usage:  apache_disable_site <mysite.conf>
 
diff --git a/utils/lib_go.sh b/utils/lib_go.sh
index 0b58fad61..06522f005 100755
--- a/utils/lib_go.sh
+++ b/utils/lib_go.sh
@@ -56,7 +56,7 @@ EOF
 
 go.ver_info(){
 
-    # print informations about a golang distribution. To print filename
+    # print information about a golang distribution. To print filename
     # sha256 and size of the archive that fits to your OS and host:
     #
     #   go.ver_info "${GO_VERSION}" archive "$(go.os)" "$(go.arch)" filename sha256 size
diff --git a/utils/lib_nvm.sh b/utils/lib_nvm.sh
index aaea5cd31..30f7781d7 100755
--- a/utils/lib_nvm.sh
+++ b/utils/lib_nvm.sh
@@ -36,7 +36,7 @@ nvm.is_installed() {
 }
 
 if [[ -z "${NVM_DIR}" ]]; then
-    # nvm is not pre-intalled in $HOME.  Prepare for using nvm from <repo-root>
+    # nvm is not pre-installed in $HOME.  Prepare for using nvm from <repo-root>
     NVM_DIR="$(git rev-parse --show-toplevel)/${NVM_LOCAL_FOLDER}"
 fi
 export NVM_DIR
@@ -93,7 +93,7 @@ nvm.help() {
 nvm.: use nvm (without dot) to execute nvm commands directly
   install   : install NVM locally at $(git rev-parse --show-toplevel)/${NVM_LOCAL_FOLDER}
   clean     : remove NVM installation
-  status    : prompt some status informations about nvm & node
+  status    : prompt some status information about nvm & node
   nodejs    : install Node.js latest LTS
   cmd ...   : run command ... in NVM environment
   bash      : start bash interpreter with NVM environment sourced
@@ -108,7 +108,7 @@ nvm.install() {
         pushd "${NVM_DIR}" &> /dev/null
         git fetch --all | prefix_stdout "  ${_Yellow}||${_creset} "
     else
-        # delete any leftovers from previos installations
+        # delete any leftovers from previous installations
         if nvm.is_local; then
             rm -rf "${NVM_DIR}"
         fi
diff --git a/utils/lib_sxng_static.sh b/utils/lib_sxng_static.sh
index 8271cc144..2f074b91e 100755
--- a/utils/lib_sxng_static.sh
+++ b/utils/lib_sxng_static.sh
@@ -96,7 +96,7 @@ static.build.commit() {
         return 1
     fi
 
-    # drop existing commit from previos build
+    # drop existing commit from previous build
     static.build.drop &>/dev/null
 
     (   set -e
diff --git a/utils/lxc.sh b/utils/lxc.sh
index 6fdcfc9eb..f9daa51f5 100755
--- a/utils/lxc.sh
+++ b/utils/lxc.sh
@@ -159,7 +159,7 @@ main() {
             ;;
         copy)
             case $2 in
-                ''|images) lxc_copy_images_localy;;
+                ''|images) lxc_copy_images_locally;;
                 *) usage "$_usage"; exit 42;;
             esac
             ;;
@@ -167,7 +167,7 @@ main() {
             sudo_or_exit
             case $2 in
                 ''|--|containers) remove_containers ;;
-                images) lxc_delete_images_localy ;;
+                images) lxc_delete_images_locally ;;
                 ${LXC_HOST_PREFIX}-*)
                     ! lxc_exists "$2" && warn_msg "container not yet exists: $2" && exit 0
                     if ask_yn "Do you really want to delete container $2"; then
@@ -291,7 +291,7 @@ build_all_containers() {
     rst_title "Build all LXC containers of suite"
     echo
     usage_containers
-    lxc_copy_images_localy
+    lxc_copy_images_locally
     lxc_init_all_containers
     lxc_config_all_containers
     lxc_boilerplate_all_containers
@@ -361,7 +361,7 @@ remove_containers() {
 # images
 # ------
 
-lxc_copy_images_localy() {
+lxc_copy_images_locally() {
     rst_title "copy images" section
     for ((i=0; i<${#LXC_SUITE[@]}; i+=2)); do
         lxc_image_copy "${LXC_SUITE[i]}" "${LXC_SUITE[i+1]}"
@@ -369,7 +369,7 @@ lxc_copy_images_localy() {
     # lxc image list local: && wait_key
 }
 
-lxc_delete_images_localy() {
+lxc_delete_images_locally() {
     rst_title "Delete LXC images"
     rst_para "local existing images"
     echo
diff --git a/utils/templates/etc/searxng/settings.yml b/utils/templates/etc/searxng/settings.yml
index fbd935b0a..be79810b1 100644
--- a/utils/templates/etc/searxng/settings.yml
+++ b/utils/templates/etc/searxng/settings.yml
@@ -33,7 +33,7 @@ ui:
 
 enabled_plugins:
   - 'Hash plugin'
-  - 'Self Informations'
+  - 'Self Information'
   - 'Tracker URL remover'
   - 'Ahmia blacklist'
   # - 'Hostnames plugin'  # see 'hostnames' configuration below