diff --git a/.gitignore b/.gitignore
index cc526f32568dd34b48d0c288af8ad7fc5fa8d649..7cc7775e35ba7e3de336527c82fbc7e6665da40a 100755
--- a/.gitignore
+++ b/.gitignore
@@ -18,5 +18,9 @@ VIPSWeb/static/test/dot_green.png
 VIPSWeb/static/test/oatFloweringModelForm.html
 VIPSWeb.code-workspace
 venv
+.venv
 *.bkp
 ipmd/.$IPMD_DSS_Metadata_structure.drawio.bkp
+.DS_Store
+.idea
+makefile
\ 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 bdfa96ae38ec7fe3d541bbe35d561bd6f8f2e22a..89518f80e21296997f64a194a9f690351b08c0ca 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-03-22 09:23+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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,35 +30,35 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.6.5\n"
 
-#: VIPSWeb/local_settings.py:192
+#: VIPSWeb/local_settings.py:211
 msgid "Risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:196
+#: VIPSWeb/local_settings.py:215
 msgid "About risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:200
-msgid "Naerstad Late Blight Model"
+#: VIPSWeb/local_settings.py:219
+msgid "Septoria reference humidity model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:204
+#: VIPSWeb/local_settings.py:223
 msgid "Carrot rust fly temperature model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:215
+#: VIPSWeb/local_settings.py:234
 msgid "Cereals and oilseeds"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:226
+#: VIPSWeb/local_settings.py:267
 msgid "Potato and vegetables"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:232
+#: VIPSWeb/local_settings.py:277
 msgid "Fruits and berries"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:239
+#: VIPSWeb/local_settings.py:292
 msgid "Other models and services"
 msgstr ""
 
diff --git a/VIPSWeb/locale/bs/LC_MESSAGES/django.po b/VIPSWeb/locale/bs/LC_MESSAGES/django.po
index 157b2b6256a7bfc32e83817948e5082014a4a356..b7eb4e1b96a0ba7f2784c8e503e66f838141b4d7 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-03-22 09:23+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+0200\n"
 "PO-Revision-Date: 2015-02-13 11:26+0100\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -19,35 +19,35 @@ msgstr ""
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Poedit 1.7.4\n"
 
-#: VIPSWeb/local_settings.py:192
+#: VIPSWeb/local_settings.py:211
 msgid "Risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:196
+#: VIPSWeb/local_settings.py:215
 msgid "About risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:200
-msgid "Naerstad Late Blight Model"
+#: VIPSWeb/local_settings.py:219
+msgid "Septoria reference humidity model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:204
+#: VIPSWeb/local_settings.py:223
 msgid "Carrot rust fly temperature model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:215
+#: VIPSWeb/local_settings.py:234
 msgid "Cereals and oilseeds"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:226
+#: VIPSWeb/local_settings.py:267
 msgid "Potato and vegetables"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:232
+#: VIPSWeb/local_settings.py:277
 msgid "Fruits and berries"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:239
+#: VIPSWeb/local_settings.py:292
 msgid "Other models and services"
 msgstr ""
 
diff --git a/VIPSWeb/locale/de/LC_MESSAGES/django.po b/VIPSWeb/locale/de/LC_MESSAGES/django.po
index f5ddef14c5e4dd9729ea700f4b9ac03318203d9b..59c5aa1375b0d82c0a800dc7ea3cca1c6f2c85a9 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-03-22 09:23+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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,35 +18,35 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: VIPSWeb/local_settings.py:192
+#: VIPSWeb/local_settings.py:211
 msgid "Risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:196
+#: VIPSWeb/local_settings.py:215
 msgid "About risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:200
-msgid "Naerstad Late Blight Model"
+#: VIPSWeb/local_settings.py:219
+msgid "Septoria reference humidity model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:204
+#: VIPSWeb/local_settings.py:223
 msgid "Carrot rust fly temperature model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:215
+#: VIPSWeb/local_settings.py:234
 msgid "Cereals and oilseeds"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:226
+#: VIPSWeb/local_settings.py:267
 msgid "Potato and vegetables"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:232
+#: VIPSWeb/local_settings.py:277
 msgid "Fruits and berries"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:239
+#: VIPSWeb/local_settings.py:292
 msgid "Other models and services"
 msgstr ""
 
diff --git a/VIPSWeb/locale/fi/LC_MESSAGES/django.po b/VIPSWeb/locale/fi/LC_MESSAGES/django.po
index a9e251edf12fffe4631caa94f9cf70df9a6a2b1b..8c9df78c79280db142836c23bac2db11f4b0781d 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-03-22 09:23+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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,35 +18,35 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: VIPSWeb/local_settings.py:192
+#: VIPSWeb/local_settings.py:211
 msgid "Risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:196
+#: VIPSWeb/local_settings.py:215
 msgid "About risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:200
-msgid "Naerstad Late Blight Model"
+#: VIPSWeb/local_settings.py:219
+msgid "Septoria reference humidity model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:204
+#: VIPSWeb/local_settings.py:223
 msgid "Carrot rust fly temperature model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:215
+#: VIPSWeb/local_settings.py:234
 msgid "Cereals and oilseeds"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:226
+#: VIPSWeb/local_settings.py:267
 msgid "Potato and vegetables"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:232
+#: VIPSWeb/local_settings.py:277
 msgid "Fruits and berries"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:239
+#: VIPSWeb/local_settings.py:292
 msgid "Other models and services"
 msgstr ""
 
diff --git a/VIPSWeb/locale/nb/LC_MESSAGES/django.mo b/VIPSWeb/locale/nb/LC_MESSAGES/django.mo
index f4270641c7b7d8cf8bffb7162126d73cfe04eed7..41949b2b6ec954889301e56ec83cfd4515556de7 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 2716215f0edc43ddd4d829109da346a56356df2e..1e9d616c0bc240fd43256c15e3009b57021e442d 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-03-22 09:23+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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,35 +30,35 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 3.4.2\n"
 
-#: VIPSWeb/local_settings.py:192
+#: VIPSWeb/local_settings.py:211
 msgid "Risk maps"
 msgstr "Risikokart"
 
-#: VIPSWeb/local_settings.py:196
+#: VIPSWeb/local_settings.py:215
 msgid "About risk maps"
 msgstr "Om risikokart"
 
-#: VIPSWeb/local_settings.py:200
-msgid "Naerstad Late Blight Model"
-msgstr "Nærstads modell"
+#: VIPSWeb/local_settings.py:219
+msgid "Septoria reference humidity model"
+msgstr "Septoria referansefuktmodell"
 
-#: VIPSWeb/local_settings.py:204
+#: VIPSWeb/local_settings.py:223
 msgid "Carrot rust fly temperature model"
 msgstr "Gulrotflue svermetidspunktmodell"
 
-#: VIPSWeb/local_settings.py:215
+#: VIPSWeb/local_settings.py:234
 msgid "Cereals and oilseeds"
 msgstr "Korn og oljevekster"
 
-#: VIPSWeb/local_settings.py:226
+#: VIPSWeb/local_settings.py:267
 msgid "Potato and vegetables"
 msgstr "Poteter og grønnsaker"
 
-#: VIPSWeb/local_settings.py:232
+#: VIPSWeb/local_settings.py:277
 msgid "Fruits and berries"
 msgstr "Frukt og bær"
 
-#: VIPSWeb/local_settings.py:239
+#: VIPSWeb/local_settings.py:292
 msgid "Other models and services"
 msgstr "Andre modeller og tjenester"
 
@@ -230,5 +230,5 @@ msgstr "Modeller fra IPM Decisions"
 msgid "Saddle gall midge"
 msgstr "Salgallmygg"
 
-#~ msgid "Septoria reference humidity model"
-#~ msgstr "Septoria referansefuktmodell"
+#~ 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 1bb1dd08ea194a5a3eb2183330a526cb43b6ae9f..d88a318d08550a09448bcf72446fac9bd1c418b3 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-03-22 09:23+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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,35 +18,35 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: VIPSWeb/local_settings.py:192
+#: VIPSWeb/local_settings.py:211
 msgid "Risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:196
+#: VIPSWeb/local_settings.py:215
 msgid "About risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:200
-msgid "Naerstad Late Blight Model"
+#: VIPSWeb/local_settings.py:219
+msgid "Septoria reference humidity model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:204
+#: VIPSWeb/local_settings.py:223
 msgid "Carrot rust fly temperature model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:215
+#: VIPSWeb/local_settings.py:234
 msgid "Cereals and oilseeds"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:226
+#: VIPSWeb/local_settings.py:267
 msgid "Potato and vegetables"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:232
+#: VIPSWeb/local_settings.py:277
 msgid "Fruits and berries"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:239
+#: VIPSWeb/local_settings.py:292
 msgid "Other models and services"
 msgstr ""
 
diff --git a/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.po b/VIPSWeb/locale/zh_Hans/LC_MESSAGES/django.po
index 19395d2670d0b29ce9db06cf063dacd9ef038177..28ebb88a832c5c2254a87cdf881c4bf33748a689 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-03-22 09:23+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+0200\n"
 "PO-Revision-Date: 2019-06-24 12:21+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -17,35 +17,35 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 2.0.6\n"
 
-#: VIPSWeb/local_settings.py:192
+#: VIPSWeb/local_settings.py:211
 msgid "Risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:196
+#: VIPSWeb/local_settings.py:215
 msgid "About risk maps"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:200
-msgid "Naerstad Late Blight Model"
+#: VIPSWeb/local_settings.py:219
+msgid "Septoria reference humidity model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:204
+#: VIPSWeb/local_settings.py:223
 msgid "Carrot rust fly temperature model"
 msgstr ""
 
-#: VIPSWeb/local_settings.py:215
+#: VIPSWeb/local_settings.py:234
 msgid "Cereals and oilseeds"
 msgstr "谷物和油籽"
 
-#: VIPSWeb/local_settings.py:226
+#: VIPSWeb/local_settings.py:267
 msgid "Potato and vegetables"
 msgstr "土豆和蔬菜"
 
-#: VIPSWeb/local_settings.py:232
+#: VIPSWeb/local_settings.py:277
 msgid "Fruits and berries"
 msgstr "水果和浆果"
 
-#: VIPSWeb/local_settings.py:239
+#: VIPSWeb/local_settings.py:292
 msgid "Other models and services"
 msgstr "其他模型和服务"
 
diff --git a/VIPSWeb/static/css/vipsweb.css b/VIPSWeb/static/css/vipsweb.css
index b2d983cf2fd697b06d1343b3730bf31b8b80b1c2..859cf7a763ec1bbc86596fee6c1d106b465986e0 100755
--- a/VIPSWeb/static/css/vipsweb.css
+++ b/VIPSWeb/static/css/vipsweb.css
@@ -432,6 +432,17 @@ span.inverseSign {
 	 font-size: 80%;
 }
 
+span.timeseries-label {
+	display: inline-block;
+	background-color: #008136;
+	font-family: monospace;
+	border-radius: 5px;
+	color: #FFFFFF;
+	padding: 3px;
+	text-decoration: none !important;
+	font-size: 80%;
+}
+
 div.second {
 	 /*font-family: "Roboto", Arial, Helvetica, sans-serif;*/
 	 width: 320px;
@@ -782,7 +793,21 @@ td.dateCell {
 	background-color: white;
 }
 
+#observationTimeSeriesDetails .label, #observationDetails .label  {
+	color: #969696;
+	font-size: 1.2em;
+	padding: 0;
+	font-weight: lighter;
+}
 
+#observationData table {
+	margin: 8px 0px;
+}
+
+#observationData td {
+	border: 1px solid #C9C9C9;
+	padding: 2px 10px;
+}
 
 table.messageTable tr, table.messageTable td
 {
diff --git a/forecasts/locale/bg/LC_MESSAGES/django.po b/forecasts/locale/bg/LC_MESSAGES/django.po
index 70106b45e7ac725b2485c34eadbdbce65107d6c8..7299ce12961909fb6555e7194e512a7a6d4112d2 100755
--- a/forecasts/locale/bg/LC_MESSAGES/django.po
+++ b/forecasts/locale/bg/LC_MESSAGES/django.po
@@ -19,7 +19,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VIPS BG\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-03-21 09:21+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+0200\n"
 "PO-Revision-Date: 2014-05-14 09:37+0200\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,7 +30,7 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.6.5\n"
 
-#: forecasts/models.py:550
+#: forecasts/models.py:551
 msgid "Language code"
 msgstr ""
 
diff --git a/forecasts/locale/bs/LC_MESSAGES/django.po b/forecasts/locale/bs/LC_MESSAGES/django.po
index 955f78ab1fef9858e9f0a466d65593c531801d3a..ed6add2ff8fb257cf18c59353863dd6994a4d30e 100755
--- a/forecasts/locale/bs/LC_MESSAGES/django.po
+++ b/forecasts/locale/bs/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VIPS\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-03-21 09:21+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+0200\n"
 "PO-Revision-Date: 2015-02-13 11:10+0100\n"
 "Last-Translator: Mladen Cucak <mladencucak@gmail.com>\n"
 "Language-Team: LANGUAGE <wvjeko@gmail.com>\n"
@@ -20,7 +20,7 @@ msgstr ""
 "X-Generator: Poedit 1.7.4\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
-#: forecasts/models.py:550
+#: forecasts/models.py:551
 msgid "Language code"
 msgstr ""
 
diff --git a/forecasts/locale/de/LC_MESSAGES/django.po b/forecasts/locale/de/LC_MESSAGES/django.po
index b7a0ad17c9ed4f4aaff715623da598953433516b..648d7e2ec13071518c2898807a9a1867a3584b69 100755
--- a/forecasts/locale/de/LC_MESSAGES/django.po
+++ b/forecasts/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-03-21 09:21+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: forecasts/models.py:550
+#: forecasts/models.py:551
 msgid "Language code"
 msgstr ""
 
diff --git a/forecasts/locale/fi/LC_MESSAGES/django.po b/forecasts/locale/fi/LC_MESSAGES/django.po
index b7a0ad17c9ed4f4aaff715623da598953433516b..648d7e2ec13071518c2898807a9a1867a3584b69 100644
--- a/forecasts/locale/fi/LC_MESSAGES/django.po
+++ b/forecasts/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-03-21 09:21+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: forecasts/models.py:550
+#: forecasts/models.py:551
 msgid "Language code"
 msgstr ""
 
diff --git a/forecasts/locale/nb/LC_MESSAGES/django.po b/forecasts/locale/nb/LC_MESSAGES/django.po
index 26175efd32d098d913a5780bd84239b9b2eca39c..2e2cb76479421fd60450a44ecf5cbaede386a7e1 100755
--- a/forecasts/locale/nb/LC_MESSAGES/django.po
+++ b/forecasts/locale/nb/LC_MESSAGES/django.po
@@ -21,7 +21,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-03-21 09:21+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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 ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: forecasts/models.py:550
+#: forecasts/models.py:551
 msgid "Language code"
 msgstr "Språkkode"
 
diff --git a/forecasts/locale/vi/LC_MESSAGES/django.po b/forecasts/locale/vi/LC_MESSAGES/django.po
index 9dba82effda222eeebb17b68721c05ef4d847681..105d8597ecf7069cc4332f36471813226237f61f 100644
--- a/forecasts/locale/vi/LC_MESSAGES/django.po
+++ b/forecasts/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-03-21 09:21+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+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,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: forecasts/models.py:550
+#: forecasts/models.py:551
 msgid "Language code"
 msgstr ""
 
diff --git a/forecasts/locale/zh_Hans/LC_MESSAGES/django.po b/forecasts/locale/zh_Hans/LC_MESSAGES/django.po
index 3c0dfd3125a9e4726e733771ca92c52c6a6fc748..6e70a4d01b92f56716d542394fed2e2704840582 100755
--- a/forecasts/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/forecasts/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-03-21 09:21+0100\n"
+"POT-Creation-Date: 2024-06-26 08:59+0200\n"
 "PO-Revision-Date: 2016-05-27 17:31+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 1.8.7\n"
 
-#: forecasts/models.py:550
+#: forecasts/models.py:551
 msgid "Language code"
 msgstr "语言代码"
 
diff --git a/observations/locale/bg/LC_MESSAGES/django.po b/observations/locale/bg/LC_MESSAGES/django.po
index db3efa648b9bb3ac713041e793743ef2c048e6bf..6986253ee030e7a814f662486226684808c8d3c0 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-06 13:36+0200\n"
+"POT-Creation-Date: 2024-06-26 09:11+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,94 +18,128 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: templates/observations/detail.html:25 templates/observations/detail.html:28
+#: observations/templates/observations/detail.html:25
+#: observations/templates/observations/detail.html:30
 msgid "Observation"
 msgstr ""
 
-#: templates/observations/detail.html:29
-msgid "View all observations"
+#: observations/templates/observations/detail.html:33
+#: observations/templates/observations/timeseries.html:31
+msgid "Description"
 msgstr ""
 
-#: templates/observations/detail.html:32 templates/observations/index.html:46
-#: templates/observations/index.html:68
-#: templates/observations/index_old.html:63
+#: observations/templates/observations/detail.html:36
+#: observations/templates/observations/index.html:46
+#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index_old.html:63
+#: observations/templates/observations/timeseries.html:34
 msgid "Organism"
 msgstr ""
 
-#: templates/observations/detail.html:34 templates/observations/index.html:50
-#: templates/observations/index.html:69
-#: templates/observations/index_old.html:64
+#: observations/templates/observations/detail.html:38
+#: observations/templates/observations/index.html:50
+#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index_old.html:64
+#: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
-#: templates/observations/detail.html:36 templates/observations/index.html:67
-#: templates/observations/index_old.html:62
-msgid "Time of observation"
+#: observations/templates/observations/detail.html:40
+#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index_old.html:62
+msgid "Date of observation"
 msgstr ""
 
-#: templates/observations/detail.html:40
-msgid "Observation data"
+#: observations/templates/observations/detail.html:43
+#: observations/templates/observations/index.html:71
+#: observations/templates/observations/timeseries.html:23
+#: observations/templates/observations/timeseries.html:28
+msgid "Time series"
 msgstr ""
 
-#: templates/observations/detail.html:86
-msgid "Observation was not quantified"
+#: observations/templates/observations/detail.html:47
+#: observations/templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: observations/templates/observations/detail.html:50
+msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:90
+#: observations/templates/observations/detail.html:60
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:119
+#: observations/templates/observations/detail.html:68
+#: observations/templates/observations/timeseries.html:54
+msgid "View all observations"
+msgstr ""
+
+#: observations/templates/observations/detail.html:126
+msgid "Observation was not quantified"
+msgstr ""
+
+#: observations/templates/observations/detail.html:164
+#: observations/templates/observations/timeseries.html:165
 msgid "Map view not available"
 msgstr ""
 
-#: templates/observations/index.html:25 templates/observations/index.html:27
-#: templates/observations/index_old.html:25
-#: templates/observations/index_old.html:28
+#: observations/templates/observations/index.html:25
+#: observations/templates/observations/index.html:27
+#: observations/templates/observations/index_old.html:25
+#: observations/templates/observations/index_old.html:28
 msgid "Observations"
 msgstr ""
 
-#: templates/observations/index.html:31
+#: observations/templates/observations/index.html:31
 msgid "Current date"
 msgstr ""
 
-#: templates/observations/index.html:54
+#: observations/templates/observations/index.html:54
 msgid "Crop categories"
 msgstr ""
 
-#: templates/observations/index.html:59
+#: observations/templates/observations/index.html:59
 msgid "Include registrations without pest presence"
 msgstr ""
 
-#: templates/observations/index.html:62
+#: observations/templates/observations/index.html:62
 msgid "Filter"
 msgstr ""
 
-#: templates/observations/index.html:70
-#: templates/observations/index_old.html:65
+#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: templates/observations/index_old.html:33
+#: observations/templates/observations/index.html:72
+msgid "Details"
+msgstr ""
+
+#: observations/templates/observations/index_old.html:33
 msgid "All pests"
 msgstr ""
 
-#: templates/observations/index_old.html:49
+#: observations/templates/observations/index_old.html:49
 msgid "From"
 msgstr ""
 
-#: templates/observations/index_old.html:53
+#: observations/templates/observations/index_old.html:53
 msgid "To"
 msgstr ""
 
-#: templates/observations/index_old.html:55
+#: observations/templates/observations/index_old.html:55
 msgid "Date search"
 msgstr ""
 
-#: templates/observations/index_old.html:96
+#: observations/templates/observations/index_old.html:96
 msgid "Crops"
 msgstr ""
 
-#: templates/observations/index_old.html:136
+#: observations/templates/observations/index_old.html:136
 msgid "View details"
 msgstr ""
+
+#: observations/templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/bg/LC_MESSAGES/djangojs.po b/observations/locale/bg/LC_MESSAGES/djangojs.po
index a9ed1e023c98cee8a6c4f5edd76bde814aad547e..30260e9f609041c509444fd2c0374e8b9c81a72a 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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -17,6 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
 #: observations/static/observations/js/observationList.js:185
 msgid "Observation(s) found at location"
 msgstr ""
@@ -25,18 +26,14 @@ msgstr ""
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:360
-msgid "Details"
-msgstr ""
-
-#: observations/static/observations/js/observationList.js:630
+#: observations/static/observations/js/observationList.js:637
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:633
+#: observations/static/observations/js/observationList.js:640
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:635
+#: observations/static/observations/js/observationList.js:642
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/bs/LC_MESSAGES/django.po b/observations/locale/bs/LC_MESSAGES/django.po
index 1f7fa66a246c63afcbc522b651672887020f53a6..5edfce4a804d57f0f9a8bfcd4d710d01bfe4680b 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-06 13:36+0200\n"
+"POT-Creation-Date: 2024-06-26 09:11+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,94 +19,128 @@ 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"
 
-#: templates/observations/detail.html:25 templates/observations/detail.html:28
+#: observations/templates/observations/detail.html:25
+#: observations/templates/observations/detail.html:30
 msgid "Observation"
 msgstr ""
 
-#: templates/observations/detail.html:29
-msgid "View all observations"
+#: observations/templates/observations/detail.html:33
+#: observations/templates/observations/timeseries.html:31
+msgid "Description"
 msgstr ""
 
-#: templates/observations/detail.html:32 templates/observations/index.html:46
-#: templates/observations/index.html:68
-#: templates/observations/index_old.html:63
+#: observations/templates/observations/detail.html:36
+#: observations/templates/observations/index.html:46
+#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index_old.html:63
+#: observations/templates/observations/timeseries.html:34
 msgid "Organism"
 msgstr ""
 
-#: templates/observations/detail.html:34 templates/observations/index.html:50
-#: templates/observations/index.html:69
-#: templates/observations/index_old.html:64
+#: observations/templates/observations/detail.html:38
+#: observations/templates/observations/index.html:50
+#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index_old.html:64
+#: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
-#: templates/observations/detail.html:36 templates/observations/index.html:67
-#: templates/observations/index_old.html:62
-msgid "Time of observation"
+#: observations/templates/observations/detail.html:40
+#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index_old.html:62
+msgid "Date of observation"
 msgstr ""
 
-#: templates/observations/detail.html:40
-msgid "Observation data"
+#: observations/templates/observations/detail.html:43
+#: observations/templates/observations/index.html:71
+#: observations/templates/observations/timeseries.html:23
+#: observations/templates/observations/timeseries.html:28
+msgid "Time series"
 msgstr ""
 
-#: templates/observations/detail.html:86
-msgid "Observation was not quantified"
+#: observations/templates/observations/detail.html:47
+#: observations/templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: observations/templates/observations/detail.html:50
+msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:90
+#: observations/templates/observations/detail.html:60
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:119
+#: observations/templates/observations/detail.html:68
+#: observations/templates/observations/timeseries.html:54
+msgid "View all observations"
+msgstr ""
+
+#: observations/templates/observations/detail.html:126
+msgid "Observation was not quantified"
+msgstr ""
+
+#: observations/templates/observations/detail.html:164
+#: observations/templates/observations/timeseries.html:165
 msgid "Map view not available"
 msgstr ""
 
-#: templates/observations/index.html:25 templates/observations/index.html:27
-#: templates/observations/index_old.html:25
-#: templates/observations/index_old.html:28
+#: observations/templates/observations/index.html:25
+#: observations/templates/observations/index.html:27
+#: observations/templates/observations/index_old.html:25
+#: observations/templates/observations/index_old.html:28
 msgid "Observations"
 msgstr ""
 
-#: templates/observations/index.html:31
+#: observations/templates/observations/index.html:31
 msgid "Current date"
 msgstr ""
 
-#: templates/observations/index.html:54
+#: observations/templates/observations/index.html:54
 msgid "Crop categories"
 msgstr ""
 
-#: templates/observations/index.html:59
+#: observations/templates/observations/index.html:59
 msgid "Include registrations without pest presence"
 msgstr ""
 
-#: templates/observations/index.html:62
+#: observations/templates/observations/index.html:62
 msgid "Filter"
 msgstr ""
 
-#: templates/observations/index.html:70
-#: templates/observations/index_old.html:65
+#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: templates/observations/index_old.html:33
+#: observations/templates/observations/index.html:72
+msgid "Details"
+msgstr ""
+
+#: observations/templates/observations/index_old.html:33
 msgid "All pests"
 msgstr ""
 
-#: templates/observations/index_old.html:49
+#: observations/templates/observations/index_old.html:49
 msgid "From"
 msgstr ""
 
-#: templates/observations/index_old.html:53
+#: observations/templates/observations/index_old.html:53
 msgid "To"
 msgstr ""
 
-#: templates/observations/index_old.html:55
+#: observations/templates/observations/index_old.html:55
 msgid "Date search"
 msgstr ""
 
-#: templates/observations/index_old.html:96
+#: observations/templates/observations/index_old.html:96
 msgid "Crops"
 msgstr ""
 
-#: templates/observations/index_old.html:136
+#: observations/templates/observations/index_old.html:136
 msgid "View details"
 msgstr ""
+
+#: observations/templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/bs/LC_MESSAGES/djangojs.po b/observations/locale/bs/LC_MESSAGES/djangojs.po
index d48ba98a41dee137883e0f97868e853d3a0f3cad..059f918afd36775468ff8671fef5e20fa998cc03 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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -16,8 +16,9 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"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"
+"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
 msgid "Observation(s) found at location"
 msgstr ""
@@ -26,18 +27,14 @@ msgstr ""
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:360
-msgid "Details"
-msgstr ""
-
-#: observations/static/observations/js/observationList.js:630
+#: observations/static/observations/js/observationList.js:637
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:633
+#: observations/static/observations/js/observationList.js:640
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:635
+#: observations/static/observations/js/observationList.js:642
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/de/LC_MESSAGES/django.po b/observations/locale/de/LC_MESSAGES/django.po
index db3efa648b9bb3ac713041e793743ef2c048e6bf..6986253ee030e7a814f662486226684808c8d3c0 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-06 13:36+0200\n"
+"POT-Creation-Date: 2024-06-26 09:11+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,94 +18,128 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: templates/observations/detail.html:25 templates/observations/detail.html:28
+#: observations/templates/observations/detail.html:25
+#: observations/templates/observations/detail.html:30
 msgid "Observation"
 msgstr ""
 
-#: templates/observations/detail.html:29
-msgid "View all observations"
+#: observations/templates/observations/detail.html:33
+#: observations/templates/observations/timeseries.html:31
+msgid "Description"
 msgstr ""
 
-#: templates/observations/detail.html:32 templates/observations/index.html:46
-#: templates/observations/index.html:68
-#: templates/observations/index_old.html:63
+#: observations/templates/observations/detail.html:36
+#: observations/templates/observations/index.html:46
+#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index_old.html:63
+#: observations/templates/observations/timeseries.html:34
 msgid "Organism"
 msgstr ""
 
-#: templates/observations/detail.html:34 templates/observations/index.html:50
-#: templates/observations/index.html:69
-#: templates/observations/index_old.html:64
+#: observations/templates/observations/detail.html:38
+#: observations/templates/observations/index.html:50
+#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index_old.html:64
+#: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
-#: templates/observations/detail.html:36 templates/observations/index.html:67
-#: templates/observations/index_old.html:62
-msgid "Time of observation"
+#: observations/templates/observations/detail.html:40
+#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index_old.html:62
+msgid "Date of observation"
 msgstr ""
 
-#: templates/observations/detail.html:40
-msgid "Observation data"
+#: observations/templates/observations/detail.html:43
+#: observations/templates/observations/index.html:71
+#: observations/templates/observations/timeseries.html:23
+#: observations/templates/observations/timeseries.html:28
+msgid "Time series"
 msgstr ""
 
-#: templates/observations/detail.html:86
-msgid "Observation was not quantified"
+#: observations/templates/observations/detail.html:47
+#: observations/templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: observations/templates/observations/detail.html:50
+msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:90
+#: observations/templates/observations/detail.html:60
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:119
+#: observations/templates/observations/detail.html:68
+#: observations/templates/observations/timeseries.html:54
+msgid "View all observations"
+msgstr ""
+
+#: observations/templates/observations/detail.html:126
+msgid "Observation was not quantified"
+msgstr ""
+
+#: observations/templates/observations/detail.html:164
+#: observations/templates/observations/timeseries.html:165
 msgid "Map view not available"
 msgstr ""
 
-#: templates/observations/index.html:25 templates/observations/index.html:27
-#: templates/observations/index_old.html:25
-#: templates/observations/index_old.html:28
+#: observations/templates/observations/index.html:25
+#: observations/templates/observations/index.html:27
+#: observations/templates/observations/index_old.html:25
+#: observations/templates/observations/index_old.html:28
 msgid "Observations"
 msgstr ""
 
-#: templates/observations/index.html:31
+#: observations/templates/observations/index.html:31
 msgid "Current date"
 msgstr ""
 
-#: templates/observations/index.html:54
+#: observations/templates/observations/index.html:54
 msgid "Crop categories"
 msgstr ""
 
-#: templates/observations/index.html:59
+#: observations/templates/observations/index.html:59
 msgid "Include registrations without pest presence"
 msgstr ""
 
-#: templates/observations/index.html:62
+#: observations/templates/observations/index.html:62
 msgid "Filter"
 msgstr ""
 
-#: templates/observations/index.html:70
-#: templates/observations/index_old.html:65
+#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: templates/observations/index_old.html:33
+#: observations/templates/observations/index.html:72
+msgid "Details"
+msgstr ""
+
+#: observations/templates/observations/index_old.html:33
 msgid "All pests"
 msgstr ""
 
-#: templates/observations/index_old.html:49
+#: observations/templates/observations/index_old.html:49
 msgid "From"
 msgstr ""
 
-#: templates/observations/index_old.html:53
+#: observations/templates/observations/index_old.html:53
 msgid "To"
 msgstr ""
 
-#: templates/observations/index_old.html:55
+#: observations/templates/observations/index_old.html:55
 msgid "Date search"
 msgstr ""
 
-#: templates/observations/index_old.html:96
+#: observations/templates/observations/index_old.html:96
 msgid "Crops"
 msgstr ""
 
-#: templates/observations/index_old.html:136
+#: observations/templates/observations/index_old.html:136
 msgid "View details"
 msgstr ""
+
+#: observations/templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/de/LC_MESSAGES/djangojs.po b/observations/locale/de/LC_MESSAGES/djangojs.po
index 7618b36618e3403fee006d3a71a0dfcdc5652a47..30260e9f609041c509444fd2c0374e8b9c81a72a 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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -26,18 +26,14 @@ msgstr ""
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:360
-msgid "Details"
-msgstr ""
-
-#: observations/static/observations/js/observationList.js:630
+#: observations/static/observations/js/observationList.js:637
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:633
+#: observations/static/observations/js/observationList.js:640
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:635
+#: observations/static/observations/js/observationList.js:642
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/fi/LC_MESSAGES/django.po b/observations/locale/fi/LC_MESSAGES/django.po
index db3efa648b9bb3ac713041e793743ef2c048e6bf..6986253ee030e7a814f662486226684808c8d3c0 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-06 13:36+0200\n"
+"POT-Creation-Date: 2024-06-26 09:11+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,94 +18,128 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: templates/observations/detail.html:25 templates/observations/detail.html:28
+#: observations/templates/observations/detail.html:25
+#: observations/templates/observations/detail.html:30
 msgid "Observation"
 msgstr ""
 
-#: templates/observations/detail.html:29
-msgid "View all observations"
+#: observations/templates/observations/detail.html:33
+#: observations/templates/observations/timeseries.html:31
+msgid "Description"
 msgstr ""
 
-#: templates/observations/detail.html:32 templates/observations/index.html:46
-#: templates/observations/index.html:68
-#: templates/observations/index_old.html:63
+#: observations/templates/observations/detail.html:36
+#: observations/templates/observations/index.html:46
+#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index_old.html:63
+#: observations/templates/observations/timeseries.html:34
 msgid "Organism"
 msgstr ""
 
-#: templates/observations/detail.html:34 templates/observations/index.html:50
-#: templates/observations/index.html:69
-#: templates/observations/index_old.html:64
+#: observations/templates/observations/detail.html:38
+#: observations/templates/observations/index.html:50
+#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index_old.html:64
+#: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
-#: templates/observations/detail.html:36 templates/observations/index.html:67
-#: templates/observations/index_old.html:62
-msgid "Time of observation"
+#: observations/templates/observations/detail.html:40
+#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index_old.html:62
+msgid "Date of observation"
 msgstr ""
 
-#: templates/observations/detail.html:40
-msgid "Observation data"
+#: observations/templates/observations/detail.html:43
+#: observations/templates/observations/index.html:71
+#: observations/templates/observations/timeseries.html:23
+#: observations/templates/observations/timeseries.html:28
+msgid "Time series"
 msgstr ""
 
-#: templates/observations/detail.html:86
-msgid "Observation was not quantified"
+#: observations/templates/observations/detail.html:47
+#: observations/templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: observations/templates/observations/detail.html:50
+msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:90
+#: observations/templates/observations/detail.html:60
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:119
+#: observations/templates/observations/detail.html:68
+#: observations/templates/observations/timeseries.html:54
+msgid "View all observations"
+msgstr ""
+
+#: observations/templates/observations/detail.html:126
+msgid "Observation was not quantified"
+msgstr ""
+
+#: observations/templates/observations/detail.html:164
+#: observations/templates/observations/timeseries.html:165
 msgid "Map view not available"
 msgstr ""
 
-#: templates/observations/index.html:25 templates/observations/index.html:27
-#: templates/observations/index_old.html:25
-#: templates/observations/index_old.html:28
+#: observations/templates/observations/index.html:25
+#: observations/templates/observations/index.html:27
+#: observations/templates/observations/index_old.html:25
+#: observations/templates/observations/index_old.html:28
 msgid "Observations"
 msgstr ""
 
-#: templates/observations/index.html:31
+#: observations/templates/observations/index.html:31
 msgid "Current date"
 msgstr ""
 
-#: templates/observations/index.html:54
+#: observations/templates/observations/index.html:54
 msgid "Crop categories"
 msgstr ""
 
-#: templates/observations/index.html:59
+#: observations/templates/observations/index.html:59
 msgid "Include registrations without pest presence"
 msgstr ""
 
-#: templates/observations/index.html:62
+#: observations/templates/observations/index.html:62
 msgid "Filter"
 msgstr ""
 
-#: templates/observations/index.html:70
-#: templates/observations/index_old.html:65
+#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: templates/observations/index_old.html:33
+#: observations/templates/observations/index.html:72
+msgid "Details"
+msgstr ""
+
+#: observations/templates/observations/index_old.html:33
 msgid "All pests"
 msgstr ""
 
-#: templates/observations/index_old.html:49
+#: observations/templates/observations/index_old.html:49
 msgid "From"
 msgstr ""
 
-#: templates/observations/index_old.html:53
+#: observations/templates/observations/index_old.html:53
 msgid "To"
 msgstr ""
 
-#: templates/observations/index_old.html:55
+#: observations/templates/observations/index_old.html:55
 msgid "Date search"
 msgstr ""
 
-#: templates/observations/index_old.html:96
+#: observations/templates/observations/index_old.html:96
 msgid "Crops"
 msgstr ""
 
-#: templates/observations/index_old.html:136
+#: observations/templates/observations/index_old.html:136
 msgid "View details"
 msgstr ""
+
+#: observations/templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/fi/LC_MESSAGES/djangojs.po b/observations/locale/fi/LC_MESSAGES/djangojs.po
index a9ed1e023c98cee8a6c4f5edd76bde814aad547e..30260e9f609041c509444fd2c0374e8b9c81a72a 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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -17,6 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
 #: observations/static/observations/js/observationList.js:185
 msgid "Observation(s) found at location"
 msgstr ""
@@ -25,18 +26,14 @@ msgstr ""
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:360
-msgid "Details"
-msgstr ""
-
-#: observations/static/observations/js/observationList.js:630
+#: observations/static/observations/js/observationList.js:637
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:633
+#: observations/static/observations/js/observationList.js:640
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:635
+#: observations/static/observations/js/observationList.js:642
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/nb/LC_MESSAGES/django.mo b/observations/locale/nb/LC_MESSAGES/django.mo
index 1d078e5476f1c908cb6a2c2f2b004ea2dac95378..837e55c3dbf467cf529f30e1cb84d1be06e12cd4 100755
Binary files a/observations/locale/nb/LC_MESSAGES/django.mo and b/observations/locale/nb/LC_MESSAGES/django.mo differ
diff --git a/observations/locale/nb/LC_MESSAGES/django.po b/observations/locale/nb/LC_MESSAGES/django.po
index 7fb1f1bdaa90223e6e83880563ff55490537ddab..5250ff7cf3143a96bc7e721b943e44439f5f1649 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-06 13:36+0200\n"
+"POT-Creation-Date: 2024-06-26 09:11+0200\n"
 "PO-Revision-Date: 2024-06-06 13:42+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -19,97 +19,134 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 3.4.2\n"
 
-#: templates/observations/detail.html:25 templates/observations/detail.html:28
+#: observations/templates/observations/detail.html:25
+#: observations/templates/observations/detail.html:30
 msgid "Observation"
 msgstr "Observasjon"
 
-#: templates/observations/detail.html:29
-msgid "View all observations"
-msgstr "Se alle observasjoner"
+#: observations/templates/observations/detail.html:33
+#: observations/templates/observations/timeseries.html:31
+msgid "Description"
+msgstr "Beskrivelse"
 
-#: templates/observations/detail.html:32 templates/observations/index.html:46
-#: templates/observations/index.html:68
-#: templates/observations/index_old.html:63
+#: observations/templates/observations/detail.html:36
+#: observations/templates/observations/index.html:46
+#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index_old.html:63
+#: observations/templates/observations/timeseries.html:34
 msgid "Organism"
 msgstr "Organisme"
 
-#: templates/observations/detail.html:34 templates/observations/index.html:50
-#: templates/observations/index.html:69
-#: templates/observations/index_old.html:64
+#: observations/templates/observations/detail.html:38
+#: observations/templates/observations/index.html:50
+#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index_old.html:64
+#: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr "Kultur"
 
-#: templates/observations/detail.html:36 templates/observations/index.html:67
-#: templates/observations/index_old.html:62
-msgid "Time of observation"
-msgstr "Observasjonstidspunkt"
-
-#: templates/observations/detail.html:40
+#: observations/templates/observations/detail.html:40
+#: observations/templates/observations/index.html:67
+#: 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/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
+msgid "Location"
+msgstr "Sted"
+
+#: observations/templates/observations/detail.html:50
 msgid "Observation data"
 msgstr "Observasjonsdata"
 
-#: templates/observations/detail.html:86
-msgid "Observation was not quantified"
-msgstr "Observasjonen ble ikke kvantifisert"
-
-#: templates/observations/detail.html:90
+#: observations/templates/observations/detail.html:60
 msgid "Illustrations"
 msgstr "Illustrasjoner"
 
-#: templates/observations/detail.html:119
+#: observations/templates/observations/detail.html:68
+#: observations/templates/observations/timeseries.html:54
+msgid "View all observations"
+msgstr "Se alle observasjoner"
+
+#: observations/templates/observations/detail.html:126
+msgid "Observation was not quantified"
+msgstr "Observasjonen ble ikke kvantifisert"
+
+#: observations/templates/observations/detail.html:164
+#: observations/templates/observations/timeseries.html:165
 msgid "Map view not available"
 msgstr "Kartvisning ikke tilgjengelig"
 
-#: templates/observations/index.html:25 templates/observations/index.html:27
-#: templates/observations/index_old.html:25
-#: templates/observations/index_old.html:28
+#: observations/templates/observations/index.html:25
+#: observations/templates/observations/index.html:27
+#: observations/templates/observations/index_old.html:25
+#: observations/templates/observations/index_old.html:28
 msgid "Observations"
 msgstr "Observasjoner"
 
-#: templates/observations/index.html:31
+#: observations/templates/observations/index.html:31
 msgid "Current date"
 msgstr "Gjeldende dato"
 
-#: templates/observations/index.html:54
+#: observations/templates/observations/index.html:54
 msgid "Crop categories"
 msgstr "Kulturkategorier"
 
-#: templates/observations/index.html:59
+#: observations/templates/observations/index.html:59
 msgid "Include registrations without pest presence"
 msgstr "Vis registreringer uten funn"
 
-#: templates/observations/index.html:62
+#: observations/templates/observations/index.html:62
 msgid "Filter"
 msgstr "Gjør utvalg"
 
-#: templates/observations/index.html:70
-#: templates/observations/index_old.html:65
+#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index_old.html:65
 msgid "Heading"
-msgstr "Overskrift"
+msgstr "Tittel"
 
-#: templates/observations/index_old.html:33
+#: observations/templates/observations/index.html:72
+msgid "Details"
+msgstr "Detaljer"
+
+#: observations/templates/observations/index_old.html:33
 msgid "All pests"
 msgstr "Alle organismer"
 
-#: templates/observations/index_old.html:49
+#: observations/templates/observations/index_old.html:49
 msgid "From"
 msgstr "Fra"
 
-#: templates/observations/index_old.html:53
+#: observations/templates/observations/index_old.html:53
 msgid "To"
 msgstr "Til"
 
-#: templates/observations/index_old.html:55
+#: observations/templates/observations/index_old.html:55
 msgid "Date search"
 msgstr "Datosøk"
 
-#: templates/observations/index_old.html:96
+#: observations/templates/observations/index_old.html:96
 msgid "Crops"
 msgstr "Kultur"
 
-#: templates/observations/index_old.html:136
+#: observations/templates/observations/index_old.html:136
 msgid "View details"
 msgstr "Se detaljer"
 
+#: observations/templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr "Antall observasjoner"
+
+#~ msgid "Title"
+#~ msgstr "Tittel"
+
 #~ msgid "Observer"
 #~ msgstr "Observatør"
diff --git a/observations/locale/nb/LC_MESSAGES/djangojs.mo b/observations/locale/nb/LC_MESSAGES/djangojs.mo
index 70cb5edf086bb8d5998d09c2ffa3bfaaf0913090..5c17154378d12510a2ba65b59e8b05a675d7e137 100644
Binary files a/observations/locale/nb/LC_MESSAGES/djangojs.mo and b/observations/locale/nb/LC_MESSAGES/djangojs.mo differ
diff --git a/observations/locale/nb/LC_MESSAGES/djangojs.po b/observations/locale/nb/LC_MESSAGES/djangojs.po
index e332890feff81d7d05f875640f5c09770dd351c7..4fe28cd072df53b6079c9fe3ad021057e007d020 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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -26,18 +26,17 @@ msgstr "Observasjon(er) funnet på lokalitet"
 msgid "in"
 msgstr "i"
 
-#: observations/static/observations/js/observationList.js:360
-msgid "Details"
-msgstr "Detaljer"
-
-#: observations/static/observations/js/observationList.js:630
+#: observations/static/observations/js/observationList.js:637
 msgid "Days since observation"
 msgstr "Dager siden observasjon"
 
-#: observations/static/observations/js/observationList.js:633
+#: observations/static/observations/js/observationList.js:640
 msgid "Days"
 msgstr "Dager"
 
-#: observations/static/observations/js/observationList.js:635
+#: observations/static/observations/js/observationList.js:642
 msgid "Older"
 msgstr "Eldre"
+
+#~ msgid "Details"
+#~ msgstr "Detaljer"
diff --git a/observations/locale/vi/LC_MESSAGES/django.po b/observations/locale/vi/LC_MESSAGES/django.po
index 67e42da6a6847898b098c8077a0071e28fbf3f23..9c31f9f7208f8b7c048ae421a06193a1e4c0968f 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-06 13:36+0200\n"
+"POT-Creation-Date: 2024-06-26 09:11+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,94 +18,128 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: templates/observations/detail.html:25 templates/observations/detail.html:28
+#: observations/templates/observations/detail.html:25
+#: observations/templates/observations/detail.html:30
 msgid "Observation"
 msgstr ""
 
-#: templates/observations/detail.html:29
-msgid "View all observations"
+#: observations/templates/observations/detail.html:33
+#: observations/templates/observations/timeseries.html:31
+msgid "Description"
 msgstr ""
 
-#: templates/observations/detail.html:32 templates/observations/index.html:46
-#: templates/observations/index.html:68
-#: templates/observations/index_old.html:63
+#: observations/templates/observations/detail.html:36
+#: observations/templates/observations/index.html:46
+#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index_old.html:63
+#: observations/templates/observations/timeseries.html:34
 msgid "Organism"
 msgstr ""
 
-#: templates/observations/detail.html:34 templates/observations/index.html:50
-#: templates/observations/index.html:69
-#: templates/observations/index_old.html:64
+#: observations/templates/observations/detail.html:38
+#: observations/templates/observations/index.html:50
+#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index_old.html:64
+#: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr ""
 
-#: templates/observations/detail.html:36 templates/observations/index.html:67
-#: templates/observations/index_old.html:62
-msgid "Time of observation"
+#: observations/templates/observations/detail.html:40
+#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index_old.html:62
+msgid "Date of observation"
 msgstr ""
 
-#: templates/observations/detail.html:40
-msgid "Observation data"
+#: observations/templates/observations/detail.html:43
+#: observations/templates/observations/index.html:71
+#: observations/templates/observations/timeseries.html:23
+#: observations/templates/observations/timeseries.html:28
+msgid "Time series"
 msgstr ""
 
-#: templates/observations/detail.html:86
-msgid "Observation was not quantified"
+#: observations/templates/observations/detail.html:47
+#: observations/templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: observations/templates/observations/detail.html:50
+msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:90
+#: observations/templates/observations/detail.html:60
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:119
+#: observations/templates/observations/detail.html:68
+#: observations/templates/observations/timeseries.html:54
+msgid "View all observations"
+msgstr ""
+
+#: observations/templates/observations/detail.html:126
+msgid "Observation was not quantified"
+msgstr ""
+
+#: observations/templates/observations/detail.html:164
+#: observations/templates/observations/timeseries.html:165
 msgid "Map view not available"
 msgstr ""
 
-#: templates/observations/index.html:25 templates/observations/index.html:27
-#: templates/observations/index_old.html:25
-#: templates/observations/index_old.html:28
+#: observations/templates/observations/index.html:25
+#: observations/templates/observations/index.html:27
+#: observations/templates/observations/index_old.html:25
+#: observations/templates/observations/index_old.html:28
 msgid "Observations"
 msgstr ""
 
-#: templates/observations/index.html:31
+#: observations/templates/observations/index.html:31
 msgid "Current date"
 msgstr ""
 
-#: templates/observations/index.html:54
+#: observations/templates/observations/index.html:54
 msgid "Crop categories"
 msgstr ""
 
-#: templates/observations/index.html:59
+#: observations/templates/observations/index.html:59
 msgid "Include registrations without pest presence"
 msgstr ""
 
-#: templates/observations/index.html:62
+#: observations/templates/observations/index.html:62
 msgid "Filter"
 msgstr ""
 
-#: templates/observations/index.html:70
-#: templates/observations/index_old.html:65
+#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr ""
 
-#: templates/observations/index_old.html:33
+#: observations/templates/observations/index.html:72
+msgid "Details"
+msgstr ""
+
+#: observations/templates/observations/index_old.html:33
 msgid "All pests"
 msgstr ""
 
-#: templates/observations/index_old.html:49
+#: observations/templates/observations/index_old.html:49
 msgid "From"
 msgstr ""
 
-#: templates/observations/index_old.html:53
+#: observations/templates/observations/index_old.html:53
 msgid "To"
 msgstr ""
 
-#: templates/observations/index_old.html:55
+#: observations/templates/observations/index_old.html:55
 msgid "Date search"
 msgstr ""
 
-#: templates/observations/index_old.html:96
+#: observations/templates/observations/index_old.html:96
 msgid "Crops"
 msgstr ""
 
-#: templates/observations/index_old.html:136
+#: observations/templates/observations/index_old.html:136
 msgid "View details"
 msgstr ""
+
+#: observations/templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/vi/LC_MESSAGES/djangojs.po b/observations/locale/vi/LC_MESSAGES/djangojs.po
index 48aabc027156d46b6be62a9dc23b7d9da6a0aa55..fd1b187766fb7137a45186a257166abef7048cef 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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -17,6 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
+
 #: observations/static/observations/js/observationList.js:185
 msgid "Observation(s) found at location"
 msgstr ""
@@ -25,18 +26,14 @@ msgstr ""
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:360
-msgid "Details"
-msgstr ""
-
-#: observations/static/observations/js/observationList.js:630
+#: observations/static/observations/js/observationList.js:637
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:633
+#: observations/static/observations/js/observationList.js:640
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:635
+#: observations/static/observations/js/observationList.js:642
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/zh_Hans/LC_MESSAGES/django.mo b/observations/locale/zh_Hans/LC_MESSAGES/django.mo
index dd5cef254fb3a3969da7110a7b55553ee9f2425d..20ea5971a71c780cf6050a6a672e61b6aec053e9 100644
Binary files a/observations/locale/zh_Hans/LC_MESSAGES/django.mo and b/observations/locale/zh_Hans/LC_MESSAGES/django.mo differ
diff --git a/observations/locale/zh_Hans/LC_MESSAGES/django.po b/observations/locale/zh_Hans/LC_MESSAGES/django.po
index 4a97c2e185219b99eb66c8c6f6bd7495dc28ea91..7c83a7a09d34879d9f48a4fb73a3b91998cb3bfd 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-06 13:36+0200\n"
+"POT-Creation-Date: 2024-06-26 09:11+0200\n"
 "PO-Revision-Date: 2016-10-27 11:26+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -17,101 +17,144 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 1.8.7\n"
 
-#: templates/observations/detail.html:25 templates/observations/detail.html:28
+#: observations/templates/observations/detail.html:25
+#: observations/templates/observations/detail.html:30
 msgid "Observation"
 msgstr "观测"
 
-#: templates/observations/detail.html:29
-msgid "View all observations"
-msgstr "查看所有观测"
+#: observations/templates/observations/detail.html:33
+#: observations/templates/observations/timeseries.html:31
+msgid "Description"
+msgstr ""
 
-#: templates/observations/detail.html:32 templates/observations/index.html:46
-#: templates/observations/index.html:68
-#: templates/observations/index_old.html:63
+#: observations/templates/observations/detail.html:36
+#: observations/templates/observations/index.html:46
+#: observations/templates/observations/index.html:68
+#: observations/templates/observations/index_old.html:63
+#: observations/templates/observations/timeseries.html:34
 msgid "Organism"
 msgstr "生物"
 
-#: templates/observations/detail.html:34 templates/observations/index.html:50
-#: templates/observations/index.html:69
-#: templates/observations/index_old.html:64
+#: observations/templates/observations/detail.html:38
+#: observations/templates/observations/index.html:50
+#: observations/templates/observations/index.html:69
+#: observations/templates/observations/index_old.html:64
+#: observations/templates/observations/timeseries.html:36
 msgid "Crop"
 msgstr "作物"
 
-#: templates/observations/detail.html:36 templates/observations/index.html:67
-#: templates/observations/index_old.html:62
-msgid "Time of observation"
+#: observations/templates/observations/detail.html:40
+#: observations/templates/observations/index.html:67
+#: observations/templates/observations/index_old.html:62
+msgid "Date of observation"
 msgstr "观测时间"
 
-#: templates/observations/detail.html:40
+#: observations/templates/observations/detail.html:43
+#: observations/templates/observations/index.html:71
+#: 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
+msgid "Location"
+msgstr ""
+
+#: observations/templates/observations/detail.html:50
 msgid "Observation data"
 msgstr "观测数据"
 
-#: templates/observations/detail.html:86
-msgid "Observation was not quantified"
-msgstr "观测没有定量化"
-
-#: templates/observations/detail.html:90
+#: observations/templates/observations/detail.html:60
 #, fuzzy
 #| msgid "Observations"
 msgid "Illustrations"
 msgstr "观测"
 
-#: templates/observations/detail.html:119
+#: observations/templates/observations/detail.html:68
+#: observations/templates/observations/timeseries.html:54
+msgid "View all observations"
+msgstr "查看所有观测"
+
+#: observations/templates/observations/detail.html:126
+msgid "Observation was not quantified"
+msgstr "观测没有定量化"
+
+#: observations/templates/observations/detail.html:164
+#: observations/templates/observations/timeseries.html:165
 msgid "Map view not available"
 msgstr ""
 
-#: templates/observations/index.html:25 templates/observations/index.html:27
-#: templates/observations/index_old.html:25
-#: templates/observations/index_old.html:28
+#: observations/templates/observations/index.html:25
+#: observations/templates/observations/index.html:27
+#: observations/templates/observations/index_old.html:25
+#: observations/templates/observations/index_old.html:28
 msgid "Observations"
 msgstr "观测"
 
-#: templates/observations/index.html:31
+#: observations/templates/observations/index.html:31
 msgid "Current date"
 msgstr ""
 
-#: templates/observations/index.html:54
+#: observations/templates/observations/index.html:54
 msgid "Crop categories"
 msgstr ""
 
-#: templates/observations/index.html:59
+#: observations/templates/observations/index.html:59
 msgid "Include registrations without pest presence"
 msgstr ""
 
-#: templates/observations/index.html:62
+#: observations/templates/observations/index.html:62
 msgid "Filter"
 msgstr ""
 
-#: templates/observations/index.html:70
-#: templates/observations/index_old.html:65
+#: observations/templates/observations/index.html:70
+#: observations/templates/observations/index_old.html:65
 msgid "Heading"
 msgstr "标题"
 
-#: templates/observations/index_old.html:33
+#: observations/templates/observations/index.html:72
+#, fuzzy
+#| msgid "View details"
+msgid "Details"
+msgstr "看细节"
+
+#: observations/templates/observations/index_old.html:33
 msgid "All pests"
 msgstr "所有病虫害"
 
-#: templates/observations/index_old.html:49
+#: observations/templates/observations/index_old.html:49
 msgid "From"
 msgstr ""
 
-#: templates/observations/index_old.html:53
+#: observations/templates/observations/index_old.html:53
 msgid "To"
 msgstr ""
 
-#: templates/observations/index_old.html:55
+#: observations/templates/observations/index_old.html:55
 msgid "Date search"
 msgstr ""
 
-#: templates/observations/index_old.html:96
+#: observations/templates/observations/index_old.html:96
 #, fuzzy
 #| msgid "Crop"
 msgid "Crops"
 msgstr "作物"
 
-#: templates/observations/index_old.html:136
+#: observations/templates/observations/index_old.html:136
 msgid "View details"
 msgstr "看细节"
 
+#: observations/templates/observations/timeseries.html:40
+#, fuzzy
+#| msgid "Date of observation"
+msgid "Number of observations"
+msgstr "观测时间"
+
+#, fuzzy
+#~| msgid "View all observations"
+#~ msgid "View all observations in time series"
+#~ msgstr "查看所有观测"
+
 #~ msgid "Observer"
 #~ msgstr "观测者"
diff --git a/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po b/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po
index a98c5d57479952b8ea5eadf90186c864ac0fb4a6..fd1b187766fb7137a45186a257166abef7048cef 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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -26,18 +26,14 @@ msgstr ""
 msgid "in"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:360
-msgid "Details"
-msgstr ""
-
-#: observations/static/observations/js/observationList.js:630
+#: observations/static/observations/js/observationList.js:637
 msgid "Days since observation"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:633
+#: observations/static/observations/js/observationList.js:640
 msgid "Days"
 msgstr ""
 
-#: observations/static/observations/js/observationList.js:635
+#: observations/static/observations/js/observationList.js:642
 msgid "Older"
 msgstr ""
diff --git a/observations/static/observations/js/observationList.js b/observations/static/observations/js/observationList.js
index 2b2a7af4024211c41e20c5120d9d84ed9245eb89..7ca4bc6025ba1e881060b184a65b257b6d6175a5 100644
--- a/observations/static/observations/js/observationList.js
+++ b/observations/static/observations/js/observationList.js
@@ -346,18 +346,25 @@ var renderObservationTable = function(data)
 
 
         tbodyHTML.push("<tr>");
-        tbodyHTML.push("<td>" + moment(obs.timeOfObservation).format("YYYY-MM-DD HH:mm ZZ") + "</td>");
+        tbodyHTML.push("<td>" + moment(obs.timeOfObservation).format("YYYY-MM-DD") + "</td>");
         tbodyHTML.push("<td>" + obs.organismName + "</td>");
         tbodyHTML.push("<td>" + obs.cropOrganismName + "</td>");
         tbodyHTML.push("<td>" + obs.observationHeading + "</td>");
 
+        if (obs.observationTimeSeriesLabel) {
+          tbodyHTML.push(
+              "<td align='center'><a href='/observations/timeseries/" + obs.observationTimeSeriesId + "' target='new'><span class='timeseries-label'/> " + obs.observationTimeSeriesLabel + "</a></td>"
+          );
+        } else {
+          tbodyHTML.push("<td></td>");
+        }
+        
+        tbodyHTML.push("<td align='center'><a href='/observations/" + obs.observationId + "' target='new'><i class='fa fa-info-circle' aria-hidden='true'/></a></td>");
         if(Object.keys(measuredVal).length != 0){
-            tbodyHTML.push("<td><a tabindex='0' class='btn btn-lg' role='button' data-toggle='popover' data-placement='left' data-trigger='focus' data-html='true' data-content='" + printVal.join("<br/>").replace("'","&apos;") + "' ><i class='fa fa-balance-scale' aria-hidden='true' </i></a></td>")
+            tbodyHTML.push("<td><a tabindex='0' role='button' data-toggle='popover' data-placement='left' data-trigger='focus' data-html='true' data-content='" + printVal.join("<br/>").replace("'","&apos;") + "' ><i class='fa fa-balance-scale' aria-hidden='true'/></a></td>")
         } else{
-                tbodyHTML.push("<td></td>")
-            }
-        
-        tbodyHTML.push("<td><a href='/observations/" + obs.observationId + "' target='new'>" + gettext("Details") + "</a></td>");
+            tbodyHTML.push("<td></td>")
+        }
         tbodyHTML.push("</tr>");
     }
     tbody.innerHTML = tbodyHTML.join("\n");
diff --git a/observations/templates/observations/detail.html b/observations/templates/observations/detail.html
index 7b25c343799167cf83f0be5f3116cc7d832b9dab..085d1c6b2637b2e44fd998b40e2fef7b5b8c369d 100755
--- a/observations/templates/observations/detail.html
+++ b/observations/templates/observations/detail.html
@@ -24,27 +24,51 @@
 {% load i18n %}
 {% block title%}{% trans "Observation" %}{%endblock%}
 {% block content %}
-<div class="singleBlockContainer">
-	<h1>{% trans "Observation" %}</h1>
-	<p><a href="/observations" class="btn btn-default back" role="button">{% trans "View all observations" %}</a></p>
+<div id="observationDetails" class="singleBlockContainer">
 	<div class="row">
 		<div class="col-md-6">
-			<h4>{% trans "Organism" %}</h4>
+			<p class="label">{% trans "Observation" %} </p>
+			<h1 style="margin-top: 4px;margin-bottom: 30px"><span id="observationHeading"></span></h1>
+			<div id="observationTextInfo">
+				<p class="label">{% trans "Description" %}</p>
+				<p id="observationText"></p>
+			</div>
+			<p class="label">{% trans "Organism" %}</p>
 			<p id="organismName"></p>
-			<h4>{% trans "Crop" %}</h4>
+			<p class="label">{% trans "Crop" %}</p>
 			<p id="cropOrganismName"></p>
-			<h4>{% trans "Time of observation" %}</h4>
+			<p class="label">{% trans "Date of observation" %}</h4>
 			<p id="timeOfObservation"></p>
-			<h2 id="observationHeading"></h2>
-			<p id="observationText"></p>
-			<h2>{% trans "Observation data" %}</h2>
-			<div id="observationData"></div>
-			<div id="observationIllustration"></div>
+			<div id="timeSeriesInfo">
+				<p class="label">{% trans "Time series" %}</p>
+				<p id="timeSeries"></p>
+			</div>
+			<div id="locationInfo">
+				<p class="label">{% trans "Location" %}</p>
+				<p id="location"></p>
+				</div>
+			<p class="label">{% trans "Observation data" %}</p>
+			<p id="observationData"></p>
 		</div>
 		<div class="col-md-6">
 			<div id="observationViewMap" class="map" style="height: 400px;"></div>
 		</div>
 	</div>
+	<div id="illustrationInfo" class="row">
+		<div class="col-md-12">
+			<div >
+				<p class="label">{% trans "Illustrations" %}</p>
+				<div id="observationIllustration"></div>
+			</div>
+		</div>
+	</div>
+	<div class="row">
+		<div class="col-md-12">
+			<p style="margin-top: 15px">
+				<a href="/observations" class="btn btn-default back" role="button">{% trans "View all observations" %}</a>
+			</p>
+		</div>
+	</div>
 	<div style="display: none;"><div id="poiMarker" title="Marker"><img src="{% static "observations/images/observation_marker.png" %}"/></div></div>
 </div>
 {% endblock %}
@@ -62,22 +86,38 @@
 	$(document).ready(function() {
 		var uuidParam = settings.userUuid != null ? "?userUUID=" + settings.userUuid : "";
 		$.getJSON( "/vipslogicproxy/rest/observation/{{observation_id}}/" + uuidParam , function( observation ) {
-		  	//console.log(observation);
 		  	document.getElementById("organismName").innerHTML = getLocalizedOrganismName(observation.organism) + " <i>(" + observation.organism.latinName + ")</i>";
 		  	document.getElementById("cropOrganismName").innerHTML = getLocalizedOrganismName(observation.cropOrganism) + " <i>(" + observation.cropOrganism.latinName + ")</i>";
-		  	document.getElementById("timeOfObservation").innerHTML = getStandardFormattedTimestamp(observation.timeOfObservation);
-		  	//document.getElementById("observerName").innerHTML = observation.user.firstName + " " + observation.user.lastName;
+		  	document.getElementById("timeOfObservation").innerHTML = getStandardFormattedDate(observation.timeOfObservation);
 		  	document.getElementById("observationHeading").innerHTML = observation.observationHeading;
-		  	document.getElementById("observationText").innerHTML = observation.observationText;
+			if(observation.observationText && observation.observationText !== "") {
+				document.getElementById("observationTextInfo").hidden = false;
+				document.getElementById("observationText").innerHTML = observation.observationText;
+			} else {
+				document.getElementById("observationTextInfo").hidden = true;
+			}
+			if(observation.observationTimeSeries) {
+				console.info("observation.observationTimeSeries", observation.observationTimeSeries)
+				document.getElementById("timeSeriesInfo").hidden = false;
+				document.getElementById("timeSeries").innerHTML = "<a href='/observations/timeseries/" + observation.observationTimeSeriesId + "'><span class='timeseries-label'/>" + observation.observationTimeSeries.label + "</a>";
+			} else {
+				document.getElementById("timeSeriesInfo").hidden = true;
+			}
 		  	if(observation.isQuantified != undefined && observation.isQuantified)
 		  	{
-			  	var observationDataHTML = "<ul>";
+                const dataSchema = JSON.parse(observation.observationDataSchema["dataSchema"])
+                let dataVars = {}
+                Object.keys(dataSchema['properties']).forEach(function(key) {
+                    dataVars[key] = dataSchema['properties'][key]['title']
+                });
+
+                var observationDataHTML = "<table>";
 			  	var observationData = JSON.parse(observation.observationData);
 			  	for(var fieldName in observationData)
 			  	{
-			  		observationDataHTML += "<li>" + capitalizeFirstLetter(fieldName) + ": " + observationData[fieldName] + "</li>";
+			  		observationDataHTML += "<tr><td width='180'>" + dataVars[fieldName] + "</td><td>" + observationData[fieldName] + "</td></tr>";
 			  	}
-			  	observationDataHTML += "</ul>";
+			  	observationDataHTML += "</table>";
 			  	document.getElementById("observationData").innerHTML = observationDataHTML;
 			  	
 		  	}
@@ -87,25 +127,30 @@
 		  	}
 		  	if(observation.observationIllustrationSet.length > 0)
 		  	{
-				document.getElementById("observationIllustration").innerHTML = "<h2>{% trans "Illustrations" %}</h2>"; 
+				document.getElementById("illustrationInfo").hidden = false;
 				for(let i=0;i<observation.observationIllustrationSet.length;i++)
 				{
 					var illustration = observation.observationIllustrationSet[i]; 
-					document.getElementById("observationIllustration").innerHTML += "<img src='" + settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/static/images/observations/" + observation.organismId + "/" + illustration.observationIllustrationPK.fileName + "' class='img-responsive'/>";
+					document.getElementById("observationIllustration").innerHTML += "<img style='margin: 5px 0px;' src='" + settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/static/images/observations/" + observation.organismId + "/" + illustration.observationIllustrationPK.fileName + "' class='img-responsive'/>";
 				}
-		  	}
+		  	} else {
+				document.getElementById("illustrationInfo").hidden = true;
+			}
 		  	if(!observation.locationIsPrivate)
 		  	{
 			  	if(observation.locationPointOfInterestId > 0)
 			  	{
 			  		$.getJSON(settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/poi/" + observation.locationPointOfInterestId , function( poi ) {
 			  			initMap(null,poi,"observationViewMap","{{settings.MAP_ATTRIBUTION|safe}}")
+						document.getElementById("locationInfo").hidden = false;
+						document.getElementById("location").innerHTML = poi.name
 			  		});
 			  	}
 			  	else
 			  	{
 			  		initMap(observation.geoinfo,null,"observationViewMap","{{settings.MAP_ATTRIBUTION|safe}}");
-			  	}
+					document.getElementById("locationInfo").hidden = true;
+				}
 		  	}
 		  	else
 		  	{
diff --git a/observations/templates/observations/index.html b/observations/templates/observations/index.html
index bfbce1a687e5b71bce2327164f99ba4133f6572d..d55ae212a5b4fb6a7ccdaa7deba57b6e00be437c 100644
--- a/observations/templates/observations/index.html
+++ b/observations/templates/observations/index.html
@@ -61,14 +61,16 @@
               </div>
             <button type="submit" class="btn btn-primary">{% trans "Filter" %}</button>
         </form>
-<div class="table-responsive">
+        <div class="table-responsive">
             <table class="table table-striped" id="observationTable">
                     <thead>
-                            <th>{% trans "Time of observation" %}</th>
+                            <th>{% trans "Date of observation" %}</th>
                             <th>{% trans "Organism" %}</th>
                             <th>{% trans "Crop" %}</th>
                             <th>{% trans "Heading" %}</th>
-                            <th></th>
+                            <th width='50'>{% trans "Time series" %}</th>
+                            <th width='50'>{% trans "Details" %}</th>
+                            <th width='30'></th>
                     </thead>
                     <tbody id="observationTableBody">
                     </tbody>
diff --git a/observations/templates/observations/index_old.html b/observations/templates/observations/index_old.html
index 580cb9df26d29bc88a694b7585f908b8badad6b0..1a9359924b7e122f76923ada00d4c22a0addafe1 100755
--- a/observations/templates/observations/index_old.html
+++ b/observations/templates/observations/index_old.html
@@ -59,7 +59,7 @@
 	<table class="table">
 		<thead>
 			<tr>
-				<th>{% trans "Time of observation" %}</th>
+				<th>{% trans "Date of observation" %}</th>
 				<th>{% trans "Organism" %}</th>
 				<th>{% trans "Crop" %}</th>
 				<th>{% trans "Heading" %}</th>
diff --git a/observations/templates/observations/timeseries.html b/observations/templates/observations/timeseries.html
new file mode 100644
index 0000000000000000000000000000000000000000..1235171000fbaa8ea3cecde2ed9344421bcba072
--- /dev/null
+++ b/observations/templates/observations/timeseries.html
@@ -0,0 +1,168 @@
+{% extends "base.html" %}
+{% load i18n l10n static %}
+{% comment %}
+    #
+    # Copyright (c) 2024 NIBIO <http://www.nibio.no/>.
+    #
+    # This file is part of VIPSWeb.
+    # VIPSWeb is free software: you can redistribute it and/or modify
+    # it under the terms of the NIBIO Open Source License as published by
+    # NIBIO, either version 1 of the License, or (at your option) any
+    # later version.
+    #
+    # VIPSWeb is distributed in the hope that it will be useful,
+    # but WITHOUT ANY WARRANTY; without even the implied warranty of
+    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    # NIBIO Open Source License for more details.
+    #
+    # You should have received a copy of the NIBIO Open Source License
+    # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
+    #
+{% endcomment %}
+{% load i18n %}
+{% block title%}{% trans "Time series" %}{%endblock%}
+{% block content %}
+    <div id="observationTimeSeriesDetails" class="singleBlockContainer">
+        <div class="row">
+            <div class="col-md-6">
+                <p class="label">{% trans "Time series" %} </p>
+                <h1 style="margin-top: 4px;margin-bottom: 30px"><span id="timeSeriesName"></span></h1>
+                <div id="timeSeriesDescriptionInfo">
+                    <p class="label">{% trans "Description" %}</p>
+                    <p id="timeSeriesDescription"></p>
+                </div>
+                <p class="label">{% trans "Organism" %}</p>
+                <p id="organismName"></p>
+                <p class="label">{% trans "Crop" %}</p>
+                <p id="cropOrganismName"></p>
+                <p class="label">{% trans "Location" %}</p>
+                <p id="timeSeriesLocation"></p>
+                <p class="label">{% trans "Number of observations" %}</p>
+                <p id="observationCount"></p>
+            </div>
+            <div class="col-md-6">
+                <div id="observationViewMap" class="map" style="height: 400px;"></div>
+            </div>
+        </div>
+        <div class="row" style="margin-top: 20px;">
+            <div class="col-md-12">
+                <div id="observationTable" class="table-responsive"></div>
+            </div>
+        </div>
+        <div class="row">
+            <div class="col-md-12">
+                <p><a href="/observations" class="btn btn-default back" role="button">{% trans "View all observations" %}</a></p>
+            </div>
+        </div>
+        <div style="display: none;"><div id="poiMarker" title="Marker"><img src="{% static "observations/images/observation_marker.png" %}"/></div>
+    </div>
+{% endblock %}
+{% block customCSS %}
+    <link rel="stylesheet" href="{% static "css/3rdparty/ol.css" %}" type="text/css">
+{% endblock %}
+{% block customJS %}
+    <script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
+    <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
+    <script type="text/javascript" src="{% static "js/3rdparty/ol.js" %}"></script>
+    <script type="text/javascript" src="{% url "views.settings_js" %}"></script>
+    <script type="text/javascript" src="{% static "js/util.js" %}"></script>
+    <script type="text/javascript" src="{% static "observations/js/observationViewMap.js" %}"></script>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            var uuidParam = settings.userUuid != null ? "?userUUID=" + settings.userUuid : "";
+            $.getJSON( "/vipslogicproxy/rest/observationtimeseries/{{observation_time_series_id}}/" + uuidParam , function( observationTimeSeries ) {
+                document.getElementById("organismName").innerHTML = getLocalizedOrganismName(observationTimeSeries.organism) + " <i>(" + observationTimeSeries.organism.latinName + ")</i>";
+                document.getElementById("cropOrganismName").innerHTML = getLocalizedOrganismName(observationTimeSeries.cropOrganism) + " <i>(" + observationTimeSeries.cropOrganism.latinName + ")</i>";
+                document.getElementById("timeSeriesName").innerHTML = observationTimeSeries.name;
+                document.getElementById("timeSeriesLocation").innerHTML = observationTimeSeries.locationPointOfInterest.name;
+
+                if(observationTimeSeries.description && observationTimeSeries.description !== "") {
+                    document.getElementById("timeSeriesDescriptionInfo").hidden = false;
+                    document.getElementById("timeSeriesDescription").innerHTML = observationTimeSeries.description;
+                } else {
+                    document.getElementById("timeSeriesDescriptionInfo").hidden = true;
+                }
+
+                let observations = [];
+                $.getJSON( "/vipslogicproxy/rest/observation/list/filter/{{ organization_id }}?observationTimeSeriesId={{ observation_time_series_id }}", function( observations ) {
+                    document.getElementById("observationCount").innerHTML = observations.length;
+                    initTable(observations);
+                });
+
+                if(!observationTimeSeries.locationIsPrivate)
+                {
+                    if(observationTimeSeries.locationPointOfInterestId > 0)
+                    {
+                        $.getJSON(settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/poi/" + observationTimeSeries.locationPointOfInterestId , function( poi ) {
+                            initMap(null,poi,"observationViewMap","{{settings.MAP_ATTRIBUTION|safe}}")
+                        });
+                    }
+                    else
+                    {
+                        initMap(observationTimeSeries.geoinfo,null,"observationViewMap","{{settings.MAP_ATTRIBUTION|safe}}");
+                    }
+                }
+                else
+                {
+                    renderLocationIsHiddenMessage();
+                }
+            });
+        });
+
+        function initTable(observations) {
+            const parent = document.getElementById("observationTable").parentNode;
+            parent.innerHTML = "";
+
+            if (!observations) {
+                return;
+            }
+
+            const dataSchema = JSON.parse(observations[0].observationDataSchema["dataSchema"])
+            let dataVars = {}
+            Object.keys(dataSchema['properties']).forEach(function(key) {
+                dataVars[key] = dataSchema['properties'][key]['title']
+            });
+
+            const table = document.createElement("table");
+            table.className = "table table-striped"
+
+            const header = table.createTHead();
+            const headerRow = header.insertRow(0);
+            const headers = Object.keys(observations[0]);
+
+            const dateCell = headerRow.insertCell();
+            dateCell.outerHTML = "<th>" + gettext("Date") + "</th>";
+            const titleCell = headerRow.insertCell();
+            titleCell.outerHTML = "<th>" + gettext("Title") + "</th>";
+
+            Object.keys(dataVars).forEach((key, index) => {
+                const dataCell = headerRow.insertCell();
+                dataCell.outerHTML = "<th>" + dataVars[key] + "</th>";
+            });
+
+            const tbody = table.createTBody();
+            observations.forEach((observation, rowIndex) => {
+                const row = tbody.insertRow(rowIndex);
+                const dateCell = row.insertCell();
+                dateCell.outerHTML = "<td><a href='/observations/" +observation.observationId + "'>" + getStandardFormattedDate(observation.timeOfObservation) + "</a></td>";
+                const titleCell = row.insertCell();
+                titleCell.outerHTML = "<td>" + observation.observationHeading + "</td>";
+
+                Object.keys(dataVars).forEach((key, index) => {
+                    const dataCell = row.insertCell();
+                    if (observation.observationData) {
+                        dataCell.innerText = JSON.parse(observation.observationData)[key];
+                    } else {
+                        dataCell.innerText = "";
+                    }
+                });
+            });
+            parent.appendChild(table);
+        }
+
+        function renderLocationIsHiddenMessage(){
+            document.getElementById("observationViewMap").parentNode.innerHTML =
+                "<h2>{% trans "Map view not available" %}</h2>";
+        }
+    </script>
+{% endblock %}
\ No newline at end of file
diff --git a/observations/urls.py b/observations/urls.py
index 0f75f017609c5a9b3844f67a759b656444156451..f7cc4794405900cf761b489d2f3396f79461ded6 100755
--- a/observations/urls.py
+++ b/observations/urls.py
@@ -31,4 +31,5 @@ urlpatterns = [
     re_path(r'old', views.index_old, name='index_old'),
     # ex: /observations/5/
     re_path(r'^(?P<observation_id>\d+)/$', (views.detail), name='detail'),
+    re_path(r'^timeseries/(?P<observation_time_series_id>\w+)/$', views.timeseries, name='timeseries'),
 ]
\ No newline at end of file
diff --git a/observations/views.py b/observations/views.py
index 94caa4442f660865d9d69296ce1ccc97d3abc021..3ff5543a581ad262e516746cfc161d6eb858fccd 100755
--- a/observations/views.py
+++ b/observations/views.py
@@ -73,3 +73,14 @@ def detail(request, observation_id):
               "observation_id" : observation_id,
                }
     return render(request, 'observations/detail.html', context)
+
+def timeseries(request, observation_time_series_id):
+    if request.session.get("vips_logic_user", None) != None:
+        organization_id = request.session["vips_logic_user"]["organization_id"]
+    else:
+        organization_id = settings.VIPS_ORGANIZATION_ID
+    context = {
+        "organization_id": organization_id,
+        "observation_time_series_id" : observation_time_series_id,
+    }
+    return render(request, 'observations/timeseries.html', context)
\ No newline at end of file
diff --git a/spatial/locale/bg/LC_MESSAGES/djangojs.po b/spatial/locale/bg/LC_MESSAGES/djangojs.po
index cd6204ac101423879096bf9c0471418af3f18b47..a44183b546ceadd464a88d2b07a2c4596891ba4b 100644
--- a/spatial/locale/bg/LC_MESSAGES/djangojs.po
+++ b/spatial/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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -22,36 +22,36 @@ msgstr ""
 msgid "WARNING_STATUS"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:426
+#: spatial/static/spatial/js/gridmap.js:425
 msgid ""
 "The risk map contains no data. Could we be out of season? Please read the "
 "model description."
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:515
+#: spatial/static/spatial/js/gridmap.js:514
 msgid "Map location"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:535
+#: spatial/static/spatial/js/gridmap.js:534
 msgid "Could not determine warning status"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:539
+#: spatial/static/spatial/js/gridmap.js:538
 msgid "No forecast available"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:540
+#: spatial/static/spatial/js/gridmap.js:539
 msgid "Missing data"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:541
+#: spatial/static/spatial/js/gridmap.js:540
 msgid "No risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:542
+#: spatial/static/spatial/js/gridmap.js:541
 msgid "Medium risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:543
+#: spatial/static/spatial/js/gridmap.js:542
 msgid "High risk of infection"
 msgstr ""
diff --git a/spatial/locale/bs/LC_MESSAGES/djangojs.po b/spatial/locale/bs/LC_MESSAGES/djangojs.po
index 74128b9ebd0fc9e4b84bfc7007254d3bf345df3e..7eff97853b82cdf9a415b17b6920b0585495a5c2 100644
--- a/spatial/locale/bs/LC_MESSAGES/djangojs.po
+++ b/spatial/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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -23,36 +23,36 @@ msgstr ""
 msgid "WARNING_STATUS"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:426
+#: spatial/static/spatial/js/gridmap.js:425
 msgid ""
 "The risk map contains no data. Could we be out of season? Please read the "
 "model description."
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:515
+#: spatial/static/spatial/js/gridmap.js:514
 msgid "Map location"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:535
+#: spatial/static/spatial/js/gridmap.js:534
 msgid "Could not determine warning status"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:539
+#: spatial/static/spatial/js/gridmap.js:538
 msgid "No forecast available"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:540
+#: spatial/static/spatial/js/gridmap.js:539
 msgid "Missing data"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:541
+#: spatial/static/spatial/js/gridmap.js:540
 msgid "No risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:542
+#: spatial/static/spatial/js/gridmap.js:541
 msgid "Medium risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:543
+#: spatial/static/spatial/js/gridmap.js:542
 msgid "High risk of infection"
 msgstr ""
diff --git a/spatial/locale/de/LC_MESSAGES/djangojs.po b/spatial/locale/de/LC_MESSAGES/djangojs.po
index cd6204ac101423879096bf9c0471418af3f18b47..a44183b546ceadd464a88d2b07a2c4596891ba4b 100644
--- a/spatial/locale/de/LC_MESSAGES/djangojs.po
+++ b/spatial/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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -22,36 +22,36 @@ msgstr ""
 msgid "WARNING_STATUS"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:426
+#: spatial/static/spatial/js/gridmap.js:425
 msgid ""
 "The risk map contains no data. Could we be out of season? Please read the "
 "model description."
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:515
+#: spatial/static/spatial/js/gridmap.js:514
 msgid "Map location"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:535
+#: spatial/static/spatial/js/gridmap.js:534
 msgid "Could not determine warning status"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:539
+#: spatial/static/spatial/js/gridmap.js:538
 msgid "No forecast available"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:540
+#: spatial/static/spatial/js/gridmap.js:539
 msgid "Missing data"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:541
+#: spatial/static/spatial/js/gridmap.js:540
 msgid "No risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:542
+#: spatial/static/spatial/js/gridmap.js:541
 msgid "Medium risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:543
+#: spatial/static/spatial/js/gridmap.js:542
 msgid "High risk of infection"
 msgstr ""
diff --git a/spatial/locale/fi/LC_MESSAGES/djangojs.po b/spatial/locale/fi/LC_MESSAGES/djangojs.po
index cd6204ac101423879096bf9c0471418af3f18b47..a44183b546ceadd464a88d2b07a2c4596891ba4b 100644
--- a/spatial/locale/fi/LC_MESSAGES/djangojs.po
+++ b/spatial/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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -22,36 +22,36 @@ msgstr ""
 msgid "WARNING_STATUS"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:426
+#: spatial/static/spatial/js/gridmap.js:425
 msgid ""
 "The risk map contains no data. Could we be out of season? Please read the "
 "model description."
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:515
+#: spatial/static/spatial/js/gridmap.js:514
 msgid "Map location"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:535
+#: spatial/static/spatial/js/gridmap.js:534
 msgid "Could not determine warning status"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:539
+#: spatial/static/spatial/js/gridmap.js:538
 msgid "No forecast available"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:540
+#: spatial/static/spatial/js/gridmap.js:539
 msgid "Missing data"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:541
+#: spatial/static/spatial/js/gridmap.js:540
 msgid "No risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:542
+#: spatial/static/spatial/js/gridmap.js:541
 msgid "Medium risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:543
+#: spatial/static/spatial/js/gridmap.js:542
 msgid "High risk of infection"
 msgstr ""
diff --git a/spatial/locale/nb/LC_MESSAGES/djangojs.po b/spatial/locale/nb/LC_MESSAGES/djangojs.po
index 54b38bd331de4039ede3e9e058606623860b3ee9..29511ff40b6f4605b5df40238d368ce3e222c40c 100644
--- a/spatial/locale/nb/LC_MESSAGES/djangojs.po
+++ b/spatial/locale/nb/LC_MESSAGES/djangojs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+0200\n"
 "PO-Revision-Date: 2024-04-03 14:06+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -22,7 +22,7 @@ msgstr ""
 msgid "WARNING_STATUS"
 msgstr "Varselstatus"
 
-#: spatial/static/spatial/js/gridmap.js:426
+#: spatial/static/spatial/js/gridmap.js:425
 msgid ""
 "The risk map contains no data. Could we be out of season? Please read the "
 "model description."
@@ -30,30 +30,30 @@ msgstr ""
 "Risikokartet inneholder ikke data. Kan vi være utenfor vekstsesong? "
 "Vennligst les modellbeskrivelsen."
 
-#: spatial/static/spatial/js/gridmap.js:515
+#: spatial/static/spatial/js/gridmap.js:514
 msgid "Map location"
 msgstr "Kartpunkt"
 
-#: spatial/static/spatial/js/gridmap.js:535
+#: spatial/static/spatial/js/gridmap.js:534
 msgid "Could not determine warning status"
 msgstr "Kunne ikke bestemme varselstatus"
 
-#: spatial/static/spatial/js/gridmap.js:539
+#: spatial/static/spatial/js/gridmap.js:538
 msgid "No forecast available"
 msgstr "Varsel ikke tilgjengelig"
 
-#: spatial/static/spatial/js/gridmap.js:540
+#: spatial/static/spatial/js/gridmap.js:539
 msgid "Missing data"
 msgstr "Data mangler"
 
-#: spatial/static/spatial/js/gridmap.js:541
+#: spatial/static/spatial/js/gridmap.js:540
 msgid "No risk of infection"
 msgstr "Ingen infeksjonsrisiko"
 
-#: spatial/static/spatial/js/gridmap.js:542
+#: spatial/static/spatial/js/gridmap.js:541
 msgid "Medium risk of infection"
 msgstr "Middels infeksjonsrisiko"
 
-#: spatial/static/spatial/js/gridmap.js:543
+#: spatial/static/spatial/js/gridmap.js:542
 msgid "High risk of infection"
 msgstr "Høy infeksjonsrisiko"
diff --git a/spatial/locale/vi/LC_MESSAGES/djangojs.po b/spatial/locale/vi/LC_MESSAGES/djangojs.po
index 4ba0cd25f025be72b0c611ed6009102bd24031a3..bf55dc7bf89e76d15d1b85a954fcc6889e50e69d 100644
--- a/spatial/locale/vi/LC_MESSAGES/djangojs.po
+++ b/spatial/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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -22,36 +22,36 @@ msgstr ""
 msgid "WARNING_STATUS"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:426
+#: spatial/static/spatial/js/gridmap.js:425
 msgid ""
 "The risk map contains no data. Could we be out of season? Please read the "
 "model description."
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:515
+#: spatial/static/spatial/js/gridmap.js:514
 msgid "Map location"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:535
+#: spatial/static/spatial/js/gridmap.js:534
 msgid "Could not determine warning status"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:539
+#: spatial/static/spatial/js/gridmap.js:538
 msgid "No forecast available"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:540
+#: spatial/static/spatial/js/gridmap.js:539
 msgid "Missing data"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:541
+#: spatial/static/spatial/js/gridmap.js:540
 msgid "No risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:542
+#: spatial/static/spatial/js/gridmap.js:541
 msgid "Medium risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:543
+#: spatial/static/spatial/js/gridmap.js:542
 msgid "High risk of infection"
 msgstr ""
diff --git a/spatial/locale/zh_Hans/LC_MESSAGES/djangojs.po b/spatial/locale/zh_Hans/LC_MESSAGES/djangojs.po
index 4ba0cd25f025be72b0c611ed6009102bd24031a3..bf55dc7bf89e76d15d1b85a954fcc6889e50e69d 100644
--- a/spatial/locale/zh_Hans/LC_MESSAGES/djangojs.po
+++ b/spatial/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-04-03 14:01+0200\n"
+"POT-Creation-Date: 2024-06-26 09:00+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"
@@ -22,36 +22,36 @@ msgstr ""
 msgid "WARNING_STATUS"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:426
+#: spatial/static/spatial/js/gridmap.js:425
 msgid ""
 "The risk map contains no data. Could we be out of season? Please read the "
 "model description."
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:515
+#: spatial/static/spatial/js/gridmap.js:514
 msgid "Map location"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:535
+#: spatial/static/spatial/js/gridmap.js:534
 msgid "Could not determine warning status"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:539
+#: spatial/static/spatial/js/gridmap.js:538
 msgid "No forecast available"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:540
+#: spatial/static/spatial/js/gridmap.js:539
 msgid "Missing data"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:541
+#: spatial/static/spatial/js/gridmap.js:540
 msgid "No risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:542
+#: spatial/static/spatial/js/gridmap.js:541
 msgid "Medium risk of infection"
 msgstr ""
 
-#: spatial/static/spatial/js/gridmap.js:543
+#: spatial/static/spatial/js/gridmap.js:542
 msgid "High risk of infection"
 msgstr ""