diff --git a/changedetectionio/forms.py b/changedetectionio/forms.py
index 9f72a748..a4480cc1 100644
--- a/changedetectionio/forms.py
+++ b/changedetectionio/forms.py
@@ -465,6 +465,7 @@ class watchForm(commonSettingsForm):
method = SelectField('Request method', choices=valid_method, default=default_method)
ignore_status_codes = BooleanField('Ignore status codes (process non-2xx status codes as normal)', default=False)
check_unique_lines = BooleanField('Only trigger when unique lines appear', default=False)
+ sort_text_alphabetically = BooleanField('Sort text alphabetically', default=False)
filter_text_added = BooleanField('Added lines', default=True)
filter_text_replaced = BooleanField('Replaced/changed lines', default=True)
diff --git a/changedetectionio/model/Watch.py b/changedetectionio/model/Watch.py
index 2bb7a400..602df5cc 100644
--- a/changedetectionio/model/Watch.py
+++ b/changedetectionio/model/Watch.py
@@ -58,6 +58,7 @@ base_config = {
'previous_md5_before_filters': False, # Used for skipping changedetection entirely
'proxy': None, # Preferred proxy connection
'remote_server_reply': None, # From 'server' reply header
+ 'sort_text_alphabetically': False,
'subtractive_selectors': [],
'tag': '', # Old system of text name for a tag, to be removed
'tags': [], # list of UUIDs to App.Tags
diff --git a/changedetectionio/processors/text_json_diff.py b/changedetectionio/processors/text_json_diff.py
index 619a2856..0f185150 100644
--- a/changedetectionio/processors/text_json_diff.py
+++ b/changedetectionio/processors/text_json_diff.py
@@ -204,6 +204,12 @@ class perform_site_check(difference_detection_processor):
is_rss=is_rss # #1874 activate the
something will add an extra line feed to signify the paragraph gap
+ # we end up with 'Some text\n\n', sorting will add all those extra \n at the start, so we remove them here.
+ stripped_text_from_html = stripped_text_from_html.replace('\n\n', '\n')
+ stripped_text_from_html = '\n'.join( sorted(stripped_text_from_html.splitlines(), key=lambda x: x.lower() ))
+
# Re #340 - return the content before the 'ignore text' was applied
text_content_before_ignored_filter = stripped_text_from_html.encode('utf-8')
diff --git a/changedetectionio/res/stock-not-in-stock.js b/changedetectionio/res/stock-not-in-stock.js
index ef9594e6..e82f626b 100644
--- a/changedetectionio/res/stock-not-in-stock.js
+++ b/changedetectionio/res/stock-not-in-stock.js
@@ -36,6 +36,7 @@ function isItemInStock() {
'nicht zur verfügung',
'niet beschikbaar',
'niet leverbaar',
+ 'niet op voorraad',
'no disponible temporalmente',
'no longer in stock',
'no tickets available',
diff --git a/changedetectionio/templates/edit.html b/changedetectionio/templates/edit.html
index ddb1229b..ecce2128 100644
--- a/changedetectionio/templates/edit.html
+++ b/changedetectionio/templates/edit.html
@@ -339,6 +339,10 @@ nav
When content is merely moved in a list, it will also trigger an addition, consider enabling Only trigger when unique lines appear
+