diff --git a/.gitignore b/.gitignore
index 7cc7775e35ba7e3de336527c82fbc7e6665da40a..b54f20c9e291cab06f4db20cebb0820efb20284a 100755
--- a/.gitignore
+++ b/.gitignore
@@ -23,4 +23,5 @@ venv
 ipmd/.$IPMD_DSS_Metadata_structure.drawio.bkp
 .DS_Store
 .idea
-makefile
\ No newline at end of file
+makefile
+/static
\ No newline at end of file
diff --git a/VIPSWeb/locale/bg/LC_MESSAGES/django.po b/VIPSWeb/locale/bg/LC_MESSAGES/django.po
index 89518f80e21296997f64a194a9f690351b08c0ca..d6868ec03337301c99545de1bdb03a141f6a3ca2 100755
--- a/VIPSWeb/locale/bg/LC_MESSAGES/django.po
+++ b/VIPSWeb/locale/bg/LC_MESSAGES/django.po
@@ -19,7 +19,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 08:59+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: 2014-05-14 09:31+0200\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,38 +30,6 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.6.5\n"
 
-#: VIPSWeb/local_settings.py:211
-msgid "Risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:215
-msgid "About risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:219
-msgid "Septoria reference humidity model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:223
-msgid "Carrot rust fly temperature model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:234
-msgid "Cereals and oilseeds"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:267
-msgid "Potato and vegetables"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:277
-msgid "Fruits and berries"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:292
-msgid "Other models and services"
-msgstr ""
-
 #: VIPSWeb/templates/404.html:3 VIPSWeb/templates/404.html:5
 msgid "File not found"
 msgstr ""
diff --git a/VIPSWeb/locale/bs/LC_MESSAGES/django.po b/VIPSWeb/locale/bs/LC_MESSAGES/django.po
index b7eb4e1b96a0ba7f2784c8e503e66f838141b4d7..8fd8d1ad447b3518f6f79c8889c579261a5c85f5 100755
--- a/VIPSWeb/locale/bs/LC_MESSAGES/django.po
+++ b/VIPSWeb/locale/bs/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 08:59+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: 2015-02-13 11:26+0100\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -19,38 +19,6 @@ msgstr ""
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Poedit 1.7.4\n"
 
-#: VIPSWeb/local_settings.py:211
-msgid "Risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:215
-msgid "About risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:219
-msgid "Septoria reference humidity model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:223
-msgid "Carrot rust fly temperature model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:234
-msgid "Cereals and oilseeds"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:267
-msgid "Potato and vegetables"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:277
-msgid "Fruits and berries"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:292
-msgid "Other models and services"
-msgstr ""
-
 #: VIPSWeb/templates/404.html:3 VIPSWeb/templates/404.html:5
 msgid "File not found"
 msgstr ""
diff --git a/VIPSWeb/locale/de/LC_MESSAGES/django.po b/VIPSWeb/locale/de/LC_MESSAGES/django.po
index 59c5aa1375b0d82c0a800dc7ea3cca1c6f2c85a9..5d566efd25980f7d95521432735a39e1f598fb08 100755
--- a/VIPSWeb/locale/de/LC_MESSAGES/django.po
+++ b/VIPSWeb/locale/de/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 08:59+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,38 +18,6 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: VIPSWeb/local_settings.py:211
-msgid "Risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:215
-msgid "About risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:219
-msgid "Septoria reference humidity model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:223
-msgid "Carrot rust fly temperature model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:234
-msgid "Cereals and oilseeds"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:267
-msgid "Potato and vegetables"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:277
-msgid "Fruits and berries"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:292
-msgid "Other models and services"
-msgstr ""
-
 #: VIPSWeb/templates/404.html:3 VIPSWeb/templates/404.html:5
 msgid "File not found"
 msgstr ""
diff --git a/VIPSWeb/locale/fi/LC_MESSAGES/django.po b/VIPSWeb/locale/fi/LC_MESSAGES/django.po
index 8c9df78c79280db142836c23bac2db11f4b0781d..a8d6ee75c3aa6e01a800c98ff451b760b60b88a9 100755
--- a/VIPSWeb/locale/fi/LC_MESSAGES/django.po
+++ b/VIPSWeb/locale/fi/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 08:59+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,38 +18,6 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: VIPSWeb/local_settings.py:211
-msgid "Risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:215
-msgid "About risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:219
-msgid "Septoria reference humidity model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:223
-msgid "Carrot rust fly temperature model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:234
-msgid "Cereals and oilseeds"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:267
-msgid "Potato and vegetables"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:277
-msgid "Fruits and berries"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:292
-msgid "Other models and services"
-msgstr ""
-
 #: VIPSWeb/templates/404.html:3 VIPSWeb/templates/404.html:5
 msgid "File not found"
 msgstr ""
diff --git a/VIPSWeb/locale/nb/LC_MESSAGES/django.mo b/VIPSWeb/locale/nb/LC_MESSAGES/django.mo
index 41949b2b6ec954889301e56ec83cfd4515556de7..6e6787af22a0b68014df65a1b893ccb2cb96cb74 100755
Binary files a/VIPSWeb/locale/nb/LC_MESSAGES/django.mo and b/VIPSWeb/locale/nb/LC_MESSAGES/django.mo differ
diff --git a/VIPSWeb/locale/nb/LC_MESSAGES/django.po b/VIPSWeb/locale/nb/LC_MESSAGES/django.po
index 1e9d616c0bc240fd43256c15e3009b57021e442d..f1cb3ca41060326ae4a9f32e6354b43e05254573 100755
--- a/VIPSWeb/locale/nb/LC_MESSAGES/django.po
+++ b/VIPSWeb/locale/nb/LC_MESSAGES/django.po
@@ -19,7 +19,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VIPSWeb\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 08:59+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: 2024-03-22 09:25+0100\n"
 "Last-Translator: Tor-Einar Skog <tor-einar.skog@nibio.no>\n"
 "Language-Team: \n"
@@ -30,38 +30,6 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 3.4.2\n"
 
-#: VIPSWeb/local_settings.py:211
-msgid "Risk maps"
-msgstr "Risikokart"
-
-#: VIPSWeb/local_settings.py:215
-msgid "About risk maps"
-msgstr "Om risikokart"
-
-#: VIPSWeb/local_settings.py:219
-msgid "Septoria reference humidity model"
-msgstr "Septoria referansefuktmodell"
-
-#: VIPSWeb/local_settings.py:223
-msgid "Carrot rust fly temperature model"
-msgstr "Gulrotflue svermetidspunktmodell"
-
-#: VIPSWeb/local_settings.py:234
-msgid "Cereals and oilseeds"
-msgstr "Korn og oljevekster"
-
-#: VIPSWeb/local_settings.py:267
-msgid "Potato and vegetables"
-msgstr "Poteter og grønnsaker"
-
-#: VIPSWeb/local_settings.py:277
-msgid "Fruits and berries"
-msgstr "Frukt og bær"
-
-#: VIPSWeb/local_settings.py:292
-msgid "Other models and services"
-msgstr "Andre modeller og tjenester"
-
 #: VIPSWeb/templates/404.html:3 VIPSWeb/templates/404.html:5
 msgid "File not found"
 msgstr "Fil ikke funnet"
@@ -230,5 +198,29 @@ msgstr "Modeller fra IPM Decisions"
 msgid "Saddle gall midge"
 msgstr "Salgallmygg"
 
+#~ msgid "Risk maps"
+#~ msgstr "Risikokart"
+
+#~ msgid "About risk maps"
+#~ msgstr "Om risikokart"
+
+#~ msgid "Septoria reference humidity model"
+#~ msgstr "Septoria referansefuktmodell"
+
+#~ msgid "Carrot rust fly temperature model"
+#~ msgstr "Gulrotflue svermetidspunktmodell"
+
+#~ msgid "Cereals and oilseeds"
+#~ msgstr "Korn og oljevekster"
+
+#~ msgid "Potato and vegetables"
+#~ msgstr "Poteter og grønnsaker"
+
+#~ msgid "Fruits and berries"
+#~ msgstr "Frukt og bær"
+
+#~ msgid "Other models and services"
+#~ msgstr "Andre modeller og tjenester"
+
 #~ msgid "Naerstad Late Blight Model"
 #~ msgstr "Nærstads modell"
diff --git a/VIPSWeb/locale/vi/LC_MESSAGES/django.po b/VIPSWeb/locale/vi/LC_MESSAGES/django.po
index d88a318d08550a09448bcf72446fac9bd1c418b3..fddb506111e918c6bc701beb603ac70d92af0c8b 100755
--- a/VIPSWeb/locale/vi/LC_MESSAGES/django.po
+++ b/VIPSWeb/locale/vi/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 08:59+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,38 +18,6 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: VIPSWeb/local_settings.py:211
-msgid "Risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:215
-msgid "About risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:219
-msgid "Septoria reference humidity model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:223
-msgid "Carrot rust fly temperature model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:234
-msgid "Cereals and oilseeds"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:267
-msgid "Potato and vegetables"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:277
-msgid "Fruits and berries"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:292
-msgid "Other models and services"
-msgstr ""
-
 #: VIPSWeb/templates/404.html:3 VIPSWeb/templates/404.html:5
 msgid "File not found"
 msgstr "File không tìm thấy"
diff --git a/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.mo b/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.mo
index 5aff4d0b67b3df1fe4431b16e46306c2539c48b3..ea3b4ec465f5f377c42f225e37df0bc01ecdc5b0 100644
Binary files a/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.mo and b/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.mo differ
diff --git a/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.po b/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.po
index 28ebb88a832c5c2254a87cdf881c4bf33748a689..59639d5033e1232cd0a66deb163df1aff3e23252 100644
--- a/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 08:59+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: 2019-06-24 12:21+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -17,38 +17,6 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 2.0.6\n"
 
-#: VIPSWeb/local_settings.py:211
-msgid "Risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:215
-msgid "About risk maps"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:219
-msgid "Septoria reference humidity model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:223
-msgid "Carrot rust fly temperature model"
-msgstr ""
-
-#: VIPSWeb/local_settings.py:234
-msgid "Cereals and oilseeds"
-msgstr "谷物和油籽"
-
-#: VIPSWeb/local_settings.py:267
-msgid "Potato and vegetables"
-msgstr "土豆和蔬菜"
-
-#: VIPSWeb/local_settings.py:277
-msgid "Fruits and berries"
-msgstr "水果和浆果"
-
-#: VIPSWeb/local_settings.py:292
-msgid "Other models and services"
-msgstr "其他模型和服务"
-
 #: VIPSWeb/templates/404.html:3 VIPSWeb/templates/404.html:5
 msgid "File not found"
 msgstr "找不到文件"
@@ -213,6 +181,18 @@ msgstr ""
 msgid "Saddle gall midge"
 msgstr ""
 
+#~ msgid "Cereals and oilseeds"
+#~ msgstr "谷物和油籽"
+
+#~ msgid "Potato and vegetables"
+#~ msgstr "土豆和蔬菜"
+
+#~ msgid "Fruits and berries"
+#~ msgstr "水果和浆果"
+
+#~ msgid "Other models and services"
+#~ msgstr "其他模型和服务"
+
 #~ msgid "Temporarily down for maintenance"
 #~ msgstr "暂时停机维护"
 
diff --git a/VIPSWeb/views.py b/VIPSWeb/views.py
index d2e71e4fcb14e14372a4ddfdd83747310b2de1c4..b94b7e43390d1a7e8b9aeb33d0a62676c30ea74f 100755
--- a/VIPSWeb/views.py
+++ b/VIPSWeb/views.py
@@ -101,8 +101,6 @@ def vipslogicproxy(request, path):
         return HttpResponseNotAllowed("Permitted methods are POST and GET")
     params = request.urlencode()
 
-
-    #print ("Params:" + params)
     try:
         url = "%s://%s/%s" % (settings.VIPSLOGIC_PROTOCOL, settings.VIPSLOGIC_SERVER_NAME,path)
         #print(url)
@@ -112,6 +110,17 @@ def vipslogicproxy(request, path):
     params_encoded = params.encode("ascii")
     response = r(url, params=params_encoded)
     if response.status_code == 200:
-        return HttpResponse(response.text, status=int(response.status_code), content_type=response.headers.get('content-type',"text/plain"))
+        content_type = response.headers.get('content-type')
+        if 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' in content_type: 
+            response_content = response.content
+            content_disposition = response.headers.get('Content-Disposition', '')
+            response = HttpResponse(response_content, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
+            if 'filename=' in content_disposition:
+                filename = content_disposition.split('filename=')[1].strip().strip('"')
+                response['Content-Disposition'] = f'attachment; filename="{filename}"'
+            return response
+        else:
+            # Handle other content types normally
+            return HttpResponse(response.text, status=response.status_code, content_type=content_type)
     else:
         return HttpResponse("[]", status=200, content_type="application/json")
diff --git a/observations/locale/bg/LC_MESSAGES/django.po b/observations/locale/bg/LC_MESSAGES/django.po
index 6986253ee030e7a814f662486226684808c8d3c0..24ae1e292ef96b9e5a0b8f311d6195feeafe6920 100644
--- a/observations/locale/bg/LC_MESSAGES/django.po
+++ b/observations/locale/bg/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:11+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,7 +30,7 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:36
 #: observations/templates/observations/index.html:46
-#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index.html:74
 #: observations/templates/observations/index_old.html:63
 #: observations/templates/observations/timeseries.html:34
 msgid "Organism"
@@ -38,27 +38,27 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:38
 #: observations/templates/observations/index.html:50
-#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index.html:75
 #: observations/templates/observations/index_old.html:64
 #: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
 #: observations/templates/observations/detail.html:40
-#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index.html:73
 #: observations/templates/observations/index_old.html:62
 msgid "Date of observation"
 msgstr ""
 
 #: observations/templates/observations/detail.html:43
-#: observations/templates/observations/index.html:71
+#: observations/templates/observations/index.html:77
 #: observations/templates/observations/timeseries.html:23
 #: observations/templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
 
 #: observations/templates/observations/detail.html:47
-#: observations/templates/observations/timeseries.html:38
+#: observations/templates/observations/timeseries.html:39
 msgid "Location"
 msgstr ""
 
@@ -71,7 +71,7 @@ msgid "Illustrations"
 msgstr ""
 
 #: observations/templates/observations/detail.html:68
-#: observations/templates/observations/timeseries.html:54
+#: observations/templates/observations/timeseries.html:56
 msgid "View all observations"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgid "Observation was not quantified"
 msgstr ""
 
 #: observations/templates/observations/detail.html:164
-#: observations/templates/observations/timeseries.html:165
+#: observations/templates/observations/timeseries.html:167
 msgid "Map view not available"
 msgstr ""
 
@@ -107,12 +107,20 @@ msgstr ""
 msgid "Filter"
 msgstr ""
 
-#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index.html:66
+msgid "No observations found for specified search criteria"
+msgstr ""
+
+#: observations/templates/observations/index.html:69
+msgid "Download as Excel"
+msgstr ""
+
+#: observations/templates/observations/index.html:76
 #: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: observations/templates/observations/index.html:72
+#: observations/templates/observations/index.html:78
 msgid "Details"
 msgstr ""
 
@@ -140,6 +148,6 @@ msgstr ""
 msgid "View details"
 msgstr ""
 
-#: observations/templates/observations/timeseries.html:40
+#: observations/templates/observations/timeseries.html:42
 msgid "Number of observations"
 msgstr ""
diff --git a/observations/locale/bg/LC_MESSAGES/djangojs.po b/observations/locale/bg/LC_MESSAGES/djangojs.po
index 30260e9f609041c509444fd2c0374e8b9c81a72a..55bdd4959fb59ee00ee1c35daf4d55427acf015b 100644
--- a/observations/locale/bg/LC_MESSAGES/djangojs.po
+++ b/observations/locale/bg/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:00+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,22 +18,22 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: observations/static/observations/js/observationList.js:185
+#: observations/static/observations/js/observationList.js:190
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:203
+#: observations/static/observations/js/observationList.js:208
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:637
+#: observations/static/observations/js/observationList.js:657
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:640
+#: observations/static/observations/js/observationList.js:660
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:642
+#: observations/static/observations/js/observationList.js:662
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/bs/LC_MESSAGES/django.po b/observations/locale/bs/LC_MESSAGES/django.po
index 5edfce4a804d57f0f9a8bfcd4d710d01bfe4680b..b23165f9ec0230d0ddb1519c6fe01b6e827e0946 100644
--- a/observations/locale/bs/LC_MESSAGES/django.po
+++ b/observations/locale/bs/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:11+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -31,7 +31,7 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:36
 #: observations/templates/observations/index.html:46
-#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index.html:74
 #: observations/templates/observations/index_old.html:63
 #: observations/templates/observations/timeseries.html:34
 msgid "Organism"
@@ -39,27 +39,27 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:38
 #: observations/templates/observations/index.html:50
-#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index.html:75
 #: observations/templates/observations/index_old.html:64
 #: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
 #: observations/templates/observations/detail.html:40
-#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index.html:73
 #: observations/templates/observations/index_old.html:62
 msgid "Date of observation"
 msgstr ""
 
 #: observations/templates/observations/detail.html:43
-#: observations/templates/observations/index.html:71
+#: observations/templates/observations/index.html:77
 #: observations/templates/observations/timeseries.html:23
 #: observations/templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
 
 #: observations/templates/observations/detail.html:47
-#: observations/templates/observations/timeseries.html:38
+#: observations/templates/observations/timeseries.html:39
 msgid "Location"
 msgstr ""
 
@@ -72,7 +72,7 @@ msgid "Illustrations"
 msgstr ""
 
 #: observations/templates/observations/detail.html:68
-#: observations/templates/observations/timeseries.html:54
+#: observations/templates/observations/timeseries.html:56
 msgid "View all observations"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgid "Observation was not quantified"
 msgstr ""
 
 #: observations/templates/observations/detail.html:164
-#: observations/templates/observations/timeseries.html:165
+#: observations/templates/observations/timeseries.html:167
 msgid "Map view not available"
 msgstr ""
 
@@ -108,12 +108,20 @@ msgstr ""
 msgid "Filter"
 msgstr ""
 
-#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index.html:66
+msgid "No observations found for specified search criteria"
+msgstr ""
+
+#: observations/templates/observations/index.html:69
+msgid "Download as Excel"
+msgstr ""
+
+#: observations/templates/observations/index.html:76
 #: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: observations/templates/observations/index.html:72
+#: observations/templates/observations/index.html:78
 msgid "Details"
 msgstr ""
 
@@ -141,6 +149,6 @@ msgstr ""
 msgid "View details"
 msgstr ""
 
-#: observations/templates/observations/timeseries.html:40
+#: observations/templates/observations/timeseries.html:42
 msgid "Number of observations"
 msgstr ""
diff --git a/observations/locale/bs/LC_MESSAGES/djangojs.po b/observations/locale/bs/LC_MESSAGES/djangojs.po
index 059f918afd36775468ff8671fef5e20fa998cc03..520a59f0a3dd60466ff37a990247597cccf3c318 100644
--- a/observations/locale/bs/LC_MESSAGES/djangojs.po
+++ b/observations/locale/bs/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:00+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -19,22 +19,22 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: observations/static/observations/js/observationList.js:185
+#: observations/static/observations/js/observationList.js:190
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:203
+#: observations/static/observations/js/observationList.js:208
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:637
+#: observations/static/observations/js/observationList.js:657
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:640
+#: observations/static/observations/js/observationList.js:660
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:642
+#: observations/static/observations/js/observationList.js:662
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/de/LC_MESSAGES/django.po b/observations/locale/de/LC_MESSAGES/django.po
index 6986253ee030e7a814f662486226684808c8d3c0..24ae1e292ef96b9e5a0b8f311d6195feeafe6920 100755
--- a/observations/locale/de/LC_MESSAGES/django.po
+++ b/observations/locale/de/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:11+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,7 +30,7 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:36
 #: observations/templates/observations/index.html:46
-#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index.html:74
 #: observations/templates/observations/index_old.html:63
 #: observations/templates/observations/timeseries.html:34
 msgid "Organism"
@@ -38,27 +38,27 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:38
 #: observations/templates/observations/index.html:50
-#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index.html:75
 #: observations/templates/observations/index_old.html:64
 #: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
 #: observations/templates/observations/detail.html:40
-#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index.html:73
 #: observations/templates/observations/index_old.html:62
 msgid "Date of observation"
 msgstr ""
 
 #: observations/templates/observations/detail.html:43
-#: observations/templates/observations/index.html:71
+#: observations/templates/observations/index.html:77
 #: observations/templates/observations/timeseries.html:23
 #: observations/templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
 
 #: observations/templates/observations/detail.html:47
-#: observations/templates/observations/timeseries.html:38
+#: observations/templates/observations/timeseries.html:39
 msgid "Location"
 msgstr ""
 
@@ -71,7 +71,7 @@ msgid "Illustrations"
 msgstr ""
 
 #: observations/templates/observations/detail.html:68
-#: observations/templates/observations/timeseries.html:54
+#: observations/templates/observations/timeseries.html:56
 msgid "View all observations"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgid "Observation was not quantified"
 msgstr ""
 
 #: observations/templates/observations/detail.html:164
-#: observations/templates/observations/timeseries.html:165
+#: observations/templates/observations/timeseries.html:167
 msgid "Map view not available"
 msgstr ""
 
@@ -107,12 +107,20 @@ msgstr ""
 msgid "Filter"
 msgstr ""
 
-#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index.html:66
+msgid "No observations found for specified search criteria"
+msgstr ""
+
+#: observations/templates/observations/index.html:69
+msgid "Download as Excel"
+msgstr ""
+
+#: observations/templates/observations/index.html:76
 #: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: observations/templates/observations/index.html:72
+#: observations/templates/observations/index.html:78
 msgid "Details"
 msgstr ""
 
@@ -140,6 +148,6 @@ msgstr ""
 msgid "View details"
 msgstr ""
 
-#: observations/templates/observations/timeseries.html:40
+#: observations/templates/observations/timeseries.html:42
 msgid "Number of observations"
 msgstr ""
diff --git a/observations/locale/de/LC_MESSAGES/djangojs.po b/observations/locale/de/LC_MESSAGES/djangojs.po
index 30260e9f609041c509444fd2c0374e8b9c81a72a..55bdd4959fb59ee00ee1c35daf4d55427acf015b 100644
--- a/observations/locale/de/LC_MESSAGES/djangojs.po
+++ b/observations/locale/de/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:00+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,22 +18,22 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: observations/static/observations/js/observationList.js:185
+#: observations/static/observations/js/observationList.js:190
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:203
+#: observations/static/observations/js/observationList.js:208
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:637
+#: observations/static/observations/js/observationList.js:657
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:640
+#: observations/static/observations/js/observationList.js:660
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:642
+#: observations/static/observations/js/observationList.js:662
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/fi/LC_MESSAGES/django.po b/observations/locale/fi/LC_MESSAGES/django.po
index 6986253ee030e7a814f662486226684808c8d3c0..24ae1e292ef96b9e5a0b8f311d6195feeafe6920 100644
--- a/observations/locale/fi/LC_MESSAGES/django.po
+++ b/observations/locale/fi/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:11+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,7 +30,7 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:36
 #: observations/templates/observations/index.html:46
-#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index.html:74
 #: observations/templates/observations/index_old.html:63
 #: observations/templates/observations/timeseries.html:34
 msgid "Organism"
@@ -38,27 +38,27 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:38
 #: observations/templates/observations/index.html:50
-#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index.html:75
 #: observations/templates/observations/index_old.html:64
 #: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
 #: observations/templates/observations/detail.html:40
-#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index.html:73
 #: observations/templates/observations/index_old.html:62
 msgid "Date of observation"
 msgstr ""
 
 #: observations/templates/observations/detail.html:43
-#: observations/templates/observations/index.html:71
+#: observations/templates/observations/index.html:77
 #: observations/templates/observations/timeseries.html:23
 #: observations/templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
 
 #: observations/templates/observations/detail.html:47
-#: observations/templates/observations/timeseries.html:38
+#: observations/templates/observations/timeseries.html:39
 msgid "Location"
 msgstr ""
 
@@ -71,7 +71,7 @@ msgid "Illustrations"
 msgstr ""
 
 #: observations/templates/observations/detail.html:68
-#: observations/templates/observations/timeseries.html:54
+#: observations/templates/observations/timeseries.html:56
 msgid "View all observations"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgid "Observation was not quantified"
 msgstr ""
 
 #: observations/templates/observations/detail.html:164
-#: observations/templates/observations/timeseries.html:165
+#: observations/templates/observations/timeseries.html:167
 msgid "Map view not available"
 msgstr ""
 
@@ -107,12 +107,20 @@ msgstr ""
 msgid "Filter"
 msgstr ""
 
-#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index.html:66
+msgid "No observations found for specified search criteria"
+msgstr ""
+
+#: observations/templates/observations/index.html:69
+msgid "Download as Excel"
+msgstr ""
+
+#: observations/templates/observations/index.html:76
 #: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: observations/templates/observations/index.html:72
+#: observations/templates/observations/index.html:78
 msgid "Details"
 msgstr ""
 
@@ -140,6 +148,6 @@ msgstr ""
 msgid "View details"
 msgstr ""
 
-#: observations/templates/observations/timeseries.html:40
+#: observations/templates/observations/timeseries.html:42
 msgid "Number of observations"
 msgstr ""
diff --git a/observations/locale/fi/LC_MESSAGES/djangojs.po b/observations/locale/fi/LC_MESSAGES/djangojs.po
index 30260e9f609041c509444fd2c0374e8b9c81a72a..55bdd4959fb59ee00ee1c35daf4d55427acf015b 100644
--- a/observations/locale/fi/LC_MESSAGES/djangojs.po
+++ b/observations/locale/fi/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:00+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,22 +18,22 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: observations/static/observations/js/observationList.js:185
+#: observations/static/observations/js/observationList.js:190
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:203
+#: observations/static/observations/js/observationList.js:208
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:637
+#: observations/static/observations/js/observationList.js:657
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:640
+#: observations/static/observations/js/observationList.js:660
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:642
+#: observations/static/observations/js/observationList.js:662
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/nb/LC_MESSAGES/django.mo b/observations/locale/nb/LC_MESSAGES/django.mo
deleted file mode 100755
index 837e55c3dbf467cf529f30e1cb84d1be06e12cd4..0000000000000000000000000000000000000000
Binary files a/observations/locale/nb/LC_MESSAGES/django.mo and /dev/null differ
diff --git a/observations/locale/nb/LC_MESSAGES/django.po b/observations/locale/nb/LC_MESSAGES/django.po
index 5250ff7cf3143a96bc7e721b943e44439f5f1649..28cbdc70709129dfddc87768807694f6ca437c7a 100755
--- a/observations/locale/nb/LC_MESSAGES/django.po
+++ b/observations/locale/nb/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:11+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: 2024-06-06 13:42+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -31,7 +31,7 @@ msgstr "Beskrivelse"
 
 #: observations/templates/observations/detail.html:36
 #: observations/templates/observations/index.html:46
-#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index.html:74
 #: observations/templates/observations/index_old.html:63
 #: observations/templates/observations/timeseries.html:34
 msgid "Organism"
@@ -39,27 +39,27 @@ msgstr "Organisme"
 
 #: observations/templates/observations/detail.html:38
 #: observations/templates/observations/index.html:50
-#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index.html:75
 #: observations/templates/observations/index_old.html:64
 #: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr "Kultur"
 
 #: observations/templates/observations/detail.html:40
-#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index.html:73
 #: observations/templates/observations/index_old.html:62
 msgid "Date of observation"
 msgstr "Observasjonsdato"
 
 #: observations/templates/observations/detail.html:43
-#: observations/templates/observations/index.html:71
+#: observations/templates/observations/index.html:77
 #: observations/templates/observations/timeseries.html:23
 #: observations/templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr "Tidsserie"
 
 #: observations/templates/observations/detail.html:47
-#: observations/templates/observations/timeseries.html:38
+#: observations/templates/observations/timeseries.html:39
 msgid "Location"
 msgstr "Sted"
 
@@ -72,7 +72,7 @@ msgid "Illustrations"
 msgstr "Illustrasjoner"
 
 #: observations/templates/observations/detail.html:68
-#: observations/templates/observations/timeseries.html:54
+#: observations/templates/observations/timeseries.html:56
 msgid "View all observations"
 msgstr "Se alle observasjoner"
 
@@ -81,7 +81,7 @@ msgid "Observation was not quantified"
 msgstr "Observasjonen ble ikke kvantifisert"
 
 #: observations/templates/observations/detail.html:164
-#: observations/templates/observations/timeseries.html:165
+#: observations/templates/observations/timeseries.html:167
 msgid "Map view not available"
 msgstr "Kartvisning ikke tilgjengelig"
 
@@ -108,12 +108,20 @@ msgstr "Vis registreringer uten funn"
 msgid "Filter"
 msgstr "Gjør utvalg"
 
-#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index.html:66
+msgid "No observations found for specified search criteria"
+msgstr "Ingen observasjoner funnet for angitte søkekriterier"
+
+#: observations/templates/observations/index.html:69
+msgid "Download as Excel"
+msgstr "Last ned som Excel"
+
+#: observations/templates/observations/index.html:76
 #: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr "Tittel"
 
-#: observations/templates/observations/index.html:72
+#: observations/templates/observations/index.html:78
 msgid "Details"
 msgstr "Detaljer"
 
@@ -141,7 +149,7 @@ msgstr "Kultur"
 msgid "View details"
 msgstr "Se detaljer"
 
-#: observations/templates/observations/timeseries.html:40
+#: observations/templates/observations/timeseries.html:42
 msgid "Number of observations"
 msgstr "Antall observasjoner"
 
diff --git a/observations/locale/nb/LC_MESSAGES/djangojs.mo b/observations/locale/nb/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 5c17154378d12510a2ba65b59e8b05a675d7e137..0000000000000000000000000000000000000000
Binary files a/observations/locale/nb/LC_MESSAGES/djangojs.mo and /dev/null differ
diff --git a/observations/locale/nb/LC_MESSAGES/djangojs.po b/observations/locale/nb/LC_MESSAGES/djangojs.po
index 4fe28cd072df53b6079c9fe3ad021057e007d020..57cb0dec20a11fcec2dc2748d7f0a0c450bec716 100644
--- a/observations/locale/nb/LC_MESSAGES/djangojs.po
+++ b/observations/locale/nb/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:00+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,23 +18,23 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: observations/static/observations/js/observationList.js:185
+#: observations/static/observations/js/observationList.js:190
 msgid "Observation(s) found at location"
 msgstr "Observasjon(er) funnet på lokalitet"
 
-#: observations/static/observations/js/observationList.js:203
+#: observations/static/observations/js/observationList.js:208
 msgid "in"
 msgstr "i"
 
-#: observations/static/observations/js/observationList.js:637
+#: observations/static/observations/js/observationList.js:657
 msgid "Days since observation"
 msgstr "Dager siden observasjon"
 
-#: observations/static/observations/js/observationList.js:640
+#: observations/static/observations/js/observationList.js:660
 msgid "Days"
 msgstr "Dager"
 
-#: observations/static/observations/js/observationList.js:642
+#: observations/static/observations/js/observationList.js:662
 msgid "Older"
 msgstr "Eldre"
 
diff --git a/observations/locale/vi/LC_MESSAGES/django.po b/observations/locale/vi/LC_MESSAGES/django.po
index 9c31f9f7208f8b7c048ae421a06193a1e4c0968f..ac8500b2f08bedcbda1a2baafe7ff60b3a1e96e7 100644
--- a/observations/locale/vi/LC_MESSAGES/django.po
+++ b/observations/locale/vi/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:11+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,7 +30,7 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:36
 #: observations/templates/observations/index.html:46
-#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index.html:74
 #: observations/templates/observations/index_old.html:63
 #: observations/templates/observations/timeseries.html:34
 msgid "Organism"
@@ -38,27 +38,27 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:38
 #: observations/templates/observations/index.html:50
-#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index.html:75
 #: observations/templates/observations/index_old.html:64
 #: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
 #: observations/templates/observations/detail.html:40
-#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index.html:73
 #: observations/templates/observations/index_old.html:62
 msgid "Date of observation"
 msgstr ""
 
 #: observations/templates/observations/detail.html:43
-#: observations/templates/observations/index.html:71
+#: observations/templates/observations/index.html:77
 #: observations/templates/observations/timeseries.html:23
 #: observations/templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
 
 #: observations/templates/observations/detail.html:47
-#: observations/templates/observations/timeseries.html:38
+#: observations/templates/observations/timeseries.html:39
 msgid "Location"
 msgstr ""
 
@@ -71,7 +71,7 @@ msgid "Illustrations"
 msgstr ""
 
 #: observations/templates/observations/detail.html:68
-#: observations/templates/observations/timeseries.html:54
+#: observations/templates/observations/timeseries.html:56
 msgid "View all observations"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgid "Observation was not quantified"
 msgstr ""
 
 #: observations/templates/observations/detail.html:164
-#: observations/templates/observations/timeseries.html:165
+#: observations/templates/observations/timeseries.html:167
 msgid "Map view not available"
 msgstr ""
 
@@ -107,12 +107,20 @@ msgstr ""
 msgid "Filter"
 msgstr ""
 
-#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index.html:66
+msgid "No observations found for specified search criteria"
+msgstr ""
+
+#: observations/templates/observations/index.html:69
+msgid "Download as Excel"
+msgstr ""
+
+#: observations/templates/observations/index.html:76
 #: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: observations/templates/observations/index.html:72
+#: observations/templates/observations/index.html:78
 msgid "Details"
 msgstr ""
 
@@ -140,6 +148,6 @@ msgstr ""
 msgid "View details"
 msgstr ""
 
-#: observations/templates/observations/timeseries.html:40
+#: observations/templates/observations/timeseries.html:42
 msgid "Number of observations"
 msgstr ""
diff --git a/observations/locale/vi/LC_MESSAGES/djangojs.po b/observations/locale/vi/LC_MESSAGES/djangojs.po
index fd1b187766fb7137a45186a257166abef7048cef..cc3cb0bf5e316a56a09b403479c0da7122816533 100644
--- a/observations/locale/vi/LC_MESSAGES/djangojs.po
+++ b/observations/locale/vi/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:00+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,22 +18,22 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: observations/static/observations/js/observationList.js:185
+#: observations/static/observations/js/observationList.js:190
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:203
+#: observations/static/observations/js/observationList.js:208
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:637
+#: observations/static/observations/js/observationList.js:657
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:640
+#: observations/static/observations/js/observationList.js:660
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:642
+#: observations/static/observations/js/observationList.js:662
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/zh_Hans/LC_MESSAGES/django.po b/observations/locale/zh_Hans/LC_MESSAGES/django.po
index 7c83a7a09d34879d9f48a4fb73a3b91998cb3bfd..ac151a14fb19b4d34748734796f9058cc02e9eee 100755
--- a/observations/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/observations/locale/zh_Hans/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:11+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: 2016-10-27 11:26+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -29,7 +29,7 @@ msgstr ""
 
 #: observations/templates/observations/detail.html:36
 #: observations/templates/observations/index.html:46
-#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index.html:74
 #: observations/templates/observations/index_old.html:63
 #: observations/templates/observations/timeseries.html:34
 msgid "Organism"
@@ -37,27 +37,27 @@ msgstr "生物"
 
 #: observations/templates/observations/detail.html:38
 #: observations/templates/observations/index.html:50
-#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index.html:75
 #: observations/templates/observations/index_old.html:64
 #: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr "作物"
 
 #: observations/templates/observations/detail.html:40
-#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index.html:73
 #: observations/templates/observations/index_old.html:62
 msgid "Date of observation"
 msgstr "观测时间"
 
 #: observations/templates/observations/detail.html:43
-#: observations/templates/observations/index.html:71
+#: observations/templates/observations/index.html:77
 #: observations/templates/observations/timeseries.html:23
 #: observations/templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
 
 #: observations/templates/observations/detail.html:47
-#: observations/templates/observations/timeseries.html:38
+#: observations/templates/observations/timeseries.html:39
 msgid "Location"
 msgstr ""
 
@@ -72,7 +72,7 @@ msgid "Illustrations"
 msgstr "观测"
 
 #: observations/templates/observations/detail.html:68
-#: observations/templates/observations/timeseries.html:54
+#: observations/templates/observations/timeseries.html:56
 msgid "View all observations"
 msgstr "查看所有观测"
 
@@ -81,7 +81,7 @@ msgid "Observation was not quantified"
 msgstr "观测没有定量化"
 
 #: observations/templates/observations/detail.html:164
-#: observations/templates/observations/timeseries.html:165
+#: observations/templates/observations/timeseries.html:167
 msgid "Map view not available"
 msgstr ""
 
@@ -108,12 +108,20 @@ msgstr ""
 msgid "Filter"
 msgstr ""
 
-#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index.html:66
+msgid "No observations found for specified search criteria"
+msgstr ""
+
+#: observations/templates/observations/index.html:69
+msgid "Download as Excel"
+msgstr ""
+
+#: observations/templates/observations/index.html:76
 #: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr "标题"
 
-#: observations/templates/observations/index.html:72
+#: observations/templates/observations/index.html:78
 #, fuzzy
 #| msgid "View details"
 msgid "Details"
@@ -145,7 +153,7 @@ msgstr "作物"
 msgid "View details"
 msgstr "看细节"
 
-#: observations/templates/observations/timeseries.html:40
+#: observations/templates/observations/timeseries.html:42
 #, fuzzy
 #| msgid "Date of observation"
 msgid "Number of observations"
diff --git a/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po b/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po
index fd1b187766fb7137a45186a257166abef7048cef..cc3cb0bf5e316a56a09b403479c0da7122816533 100644
--- a/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po
+++ b/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-26 09:00+0200\n"
+"POT-Creation-Date: 2024-08-20 12:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,22 +18,22 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: observations/static/observations/js/observationList.js:185
+#: observations/static/observations/js/observationList.js:190
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:203
+#: observations/static/observations/js/observationList.js:208
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:637
+#: observations/static/observations/js/observationList.js:657
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:640
+#: observations/static/observations/js/observationList.js:660
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:642
+#: observations/static/observations/js/observationList.js:662
 msgid "Older"
 msgstr ""
diff --git a/observations/static/observations/js/observationList.js b/observations/static/observations/js/observationList.js
index 7ca4bc6025ba1e881060b184a65b257b6d6175a5..5917232d795c357dc613dcb007f09cbe3066e26d 100644
--- a/observations/static/observations/js/observationList.js
+++ b/observations/static/observations/js/observationList.js
@@ -155,9 +155,14 @@ var initMap = function(
     }
     
     // Get observations from backend
-    $.getJSON( "/vipslogicproxy/rest/observation/list/filter/" + organizationId + (params.length > 0 ? "?" + params.join("&") : ""), function( data ) {
+    const filterPath =  "/vipslogicproxy/rest/observation/list/filter/" + organizationId;
+    const filterParams = (params.length > 0 ? "?" + params.join("&") : "");
+    const jsonUrl = filterPath + filterParams;
+    const xlsxUrl = filterPath + "/xlsx" + filterParams;
+
+    $.getJSON( jsonUrl, function( data ) {
         allObservations = data;
-        renderObservationTable(data);
+        renderObservationTable(data, xlsxUrl);
         renderObservationFeatures();
 
     });
@@ -296,8 +301,23 @@ var getObservation = function(observationId)
 /**
  * Show the table of observations
  */
-var renderObservationTable = function(data)
+var renderObservationTable = function(data, xlsxUrl)
 {
+    const emptyResult = document.getElementById("emptyResult");
+    const downloadLink = document.getElementById('downloadLink');
+
+    const tableElement = document.getElementById("observationTable");
+    
+    if (data.length === 0) {
+        emptyResult.style.display = "block";
+        downloadLink.style.display = "none";
+        tableElement.style.display = "none";
+        return;
+    } 
+    emptyResult.style.display = "none";
+    downloadLink.style.display = "block";
+    downloadLink.href = xlsxUrl;
+
     var tbody = document.getElementById("observationTableBody");
     var tbodyHTML = [];
     for(var i=0; i<data.length;i++)
diff --git a/observations/templates/observations/index.html b/observations/templates/observations/index.html
index d55ae212a5b4fb6a7ccdaa7deba57b6e00be437c..398e1df4c5075c253eedc9e06c86bb23592a77b5 100644
--- a/observations/templates/observations/index.html
+++ b/observations/templates/observations/index.html
@@ -34,33 +34,54 @@
 	</div>
 	<div id="legend"></div>
 </div>
-<form class="form-inline" method="get" action="">
-            <div class="form-group">
-                <input class="form-control" type="date" id="dateFrom" name="from" value="{{from|safe}}"/>
-            </div>
-            -
-            <div class="form-group">
-                <input class="form-control" type="date" id="dateTo" name="to" value="{{to|safe}}"/>
-            </div>
-            <div class="form-group">
-                    <select name="pestId" id="observationPestList" class="form-control chosen-select" data-placeholder="{% trans "Organism" %}">
-                    </select>
-            </div>
-            <div class="form-group">
-                    <select name="cropId" id="observationCropList" class="form-control chosen-select" data-placeholder="{% trans "Crop" %}">	
-                    </select>
-            </div>
-            <div class="form-group">
-                    <select name="cropCategoryId" id="cropCategoryList" style="min-width: 150px;" class="form-control chosen-select" data-placeholder="{% trans "Crop categories" %}">	
-                    </select>
-            </div>
+<form method="get" action="" class="">
+    <div class="row">
+        <!-- Date Range Fields -->
+        <div class="form-group col-sm-3">
+            <label for="dateFrom">{% trans "From" %}</label>
+            <input class="form-control" type="date" id="dateFrom" name="from" value="{{from|safe}}"/>
+        </div>
+        <div class="form-group col-sm-3">
+            <label for="dateTo">{% trans "To" %}</label>
+            <input class="form-control" type="date" id="dateTo" name="to" value="{{to|safe}}"/>
+        </div>
+        <div class="form-group col-sm-6">
             <div class="checkbox">
+                &nbsp;<br>
                 <label>
-                  <input type="checkbox" name="includeNegative"{% if include_negative  %}checked{% endif %} value="true"> {% trans "Include registrations without pest presence" %}
+                    <input type="checkbox" name="includeNegative"{% if include_negative %}checked{% endif %} value="true"> {% trans "Include registrations without pest presence" %}
                 </label>
-              </div>
+            </div>
+        </div>
+    </div>
+    
+    <div class="row mt-2">
+        <div class="form-group col-sm-3">
+            <label for="observationPestList">{% trans "Organism" %}</label>
+            <select name="pestId" id="observationPestList" class="form-control chosen-select" data-placeholder="{% trans "Organism" %}">
+            </select>
+        </div>
+        <div class="form-group col-sm-3">
+            <label for="observationCropList">{% trans "Crop" %}</label>
+            <select name="cropId" id="observationCropList" class="form-control chosen-select" data-placeholder="{% trans "Crop" %}">    
+            </select>
+        </div>
+        <div class="form-group col-sm-3">
+            <label for="cropCategoryList">{% trans "Crop categories" %}</label>
+            <select name="cropCategoryId" id="cropCategoryList" class="form-control chosen-select" style="min-width: 150px;" data-placeholder="{% trans "Crop categories" %}">
+            </select>
+        </div>
+        <div class="form-group col-sm-3">
+            &nbsp;<br>
             <button type="submit" class="btn btn-primary">{% trans "Filter" %}</button>
-        </form>
+        </div>
+    </div>
+</form>
+
+        <div style="padding: 10px 0px">
+            <span id="emptyResult">{% trans "No observations found for specified search criteria" %}</span>
+        </div>
+        <a id="downloadLink" href="">{% trans "Download as Excel" %}</a>
         <div class="table-responsive">
             <table class="table table-striped" id="observationTable">
                     <thead>