diff --git a/VIPSWeb/settings.py b/VIPSWeb/settings.py
index 82b3c51d07f4a6fae87b5d18d07fdf92b613a835..444d8bc08d910c49867c849dbd2886cf4ded25ee 100755
--- a/VIPSWeb/settings.py
+++ b/VIPSWeb/settings.py
@@ -78,12 +78,6 @@ STATICFILES_FINDERS = (
 
 
 
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
-    'django.template.loaders.filesystem.Loader',
-    'django.template.loaders.app_directories.Loader',
-#     'django.template.loaders.eggs.Loader',
-)
 
 MIDDLEWARE_CLASSES = (
     'django.middleware.common.CommonMiddleware',
@@ -103,19 +97,27 @@ ROOT_URLCONF = 'VIPSWeb.urls'
 # Python dotted path to the WSGI application used by Django's runserver.
 WSGI_APPLICATION = 'VIPSWeb.wsgi.application'
 
-TEMPLATE_DIRS = (
-    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-    os.path.join(SITE_ROOT, 'templates'),
-)
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [os.path.join(SITE_ROOT, 'templates')],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors':[
+                'django.contrib.auth.context_processors.auth',
+                'django.template.context_processors.request',
+                'VIPSWeb.context_processors.settings'
+                ]
+        },
+    },
+]
 
-TEMPLATE_CONTEXT_PROCESSORS = (
+"""TEMPLATE_CONTEXT_PROCESSORS = (
     'django.contrib.auth.context_processors.auth',
     'django.core.context_processors.request',
     'VIPSWeb.context_processors.settings'
     
-)
+)"""
 
 INSTALLED_APPS = (
     'django.contrib.auth',
diff --git a/VIPSWeb/templates/index.html b/VIPSWeb/templates/index.html
index 5b7087e11e4cca005522951a478d0a9ad8ee0227..4edbaf51008d8e064102699bf0606aea44be416a 100755
--- a/VIPSWeb/templates/index.html
+++ b/VIPSWeb/templates/index.html
@@ -27,7 +27,7 @@
 <link rel="stylesheet" href="{% static "css/3rdparty/ol.css" %}" type="text/css">
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/ol.js" %}"></script>
 <script type="text/javascript" src="/forecasts/models/js/modelLocalNames.js"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
diff --git a/VIPSWeb/templates/index_old.html b/VIPSWeb/templates/index_old.html
index 8c8188ee5511d1b085c69e8e29e39553fa27a5fb..ada6a5674b8a6cc99376e0cef9fbfe5f0b141cbe 100755
--- a/VIPSWeb/templates/index_old.html
+++ b/VIPSWeb/templates/index_old.html
@@ -27,7 +27,7 @@
 <link rel="stylesheet" href="{% static "css/3rdparty/ol.css" %}" type="text/css">
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/ol.js" %}"></script>
 <script type="text/javascript" src="/forecasts/models/js/modelLocalNames.js"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
diff --git a/VIPSWeb/templatetags/template_helper.py b/VIPSWeb/templatetags/template_helper.py
index e5a7dc852e8a6c3c0b0fb60514ee9a877fae974a..622867c27515991158ce5835e19e92132fdbcc9d 100755
--- a/VIPSWeb/templatetags/template_helper.py
+++ b/VIPSWeb/templatetags/template_helper.py
@@ -6,6 +6,7 @@ from django.conf import settings
 from datetime import datetime
 from dateutil.relativedelta import relativedelta
 from django.core.urlresolvers import reverse
+from django.utils.safestring import mark_safe
 
 register = template.Library()
 
@@ -73,17 +74,13 @@ def generate_main_menu(context):
 			items_html.append( item_template % (reverse('information:detail', kwargs={"information_id":info.pk}), info_locale.headline) )
 		menu_html += dropdown_template % (" currentLink" if request.path.startswith("/information") else "",_("Information"),"".join(items_html))
 			
-	return menu_html
+	return mark_safe(menu_html)
 
-# Reads the variable local_settings.MAIN_MENU
+# Reads the variable local_settings.FRONTPAGE_MENU
 # Parses it, returns HTML
 @register.simple_tag(takes_context=True)
 def generate_frontpage_menu(context):
-	# Get the request object
-	try:
-		request = context['request']
-	except KeyError:
-		request = context['view'].request
+
 	
 	if settings.FRONTPAGE_MENU == None or len(settings.FRONTPAGE_MENU) == 0:
 		return '<div class="col-md-12">&nbsp;</div>'
@@ -104,7 +101,7 @@ def generate_frontpage_menu(context):
 			menu_html += '<li><a href="%s">%s</a></li>' % (item["url"], item["label"])
 		menu_html += "</ul>"
 		menu_html += "</div>"
-	return menu_html
+	return mark_safe(menu_html)
 
 # Get the footer text in correct language
 # REPLACED WITH THE MORE FLEXIBLE get_text_i18(text_dict) BELOW
@@ -144,7 +141,7 @@ def get_text_i18n(text_dict):
 	if text == None and len(text_dict.keys()) > 0:
 		text = text_dict[text_dict.keys()[0]]
 	
-	return text if text != None else ""
+	return mark_safe(text) if text != None else ""
 
 @register.simple_tag
 def get_system_time(format_string):
diff --git a/VIPSWeb/urls.py b/VIPSWeb/urls.py
index ac6830cc697f28b241d25159b33269bb8015df41..fb5a8454f5238b209e9514124411b6ef2d2464e1 100755
--- a/VIPSWeb/urls.py
+++ b/VIPSWeb/urls.py
@@ -16,8 +16,10 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, include, url
+from django.conf.urls import include, url
 #from django.views.generic import TemplateView
+from django.views.static import serve
+from django.views.i18n import JavaScriptCatalog
 from django.conf import settings
 from VIPSWeb import views
 
@@ -28,18 +30,18 @@ admin.autodiscover()
 # Enabling translation in JavaScript files
 # See https://docs.djangoproject.com/en/1.5/topics/i18n/translation/#internationalization-in-javascript-code
 js_info_dict = {
-    'packages': ('forecasts','messages','VIPSWeb','roughage'),
+    'packages': ['forecasts','messages','VIPSWeb','roughage'],
     'domain': 'djangojs',
 }
 
 #print "settings.MAINTENANCE_MODE=%s" % settings.MAINTENANCE_MODE
 
 if settings.MAINTENANCE_MODE is True:
-    urlpatterns = patterns('',
+    urlpatterns = [
                            url(r'^$', views.maintenance, name='maintenance')
-    )
+    ]
 else:
-    urlpatterns = patterns('',
+    urlpatterns = [
         # Examples:
         # url(r'^$', 'VIPSWeb.views.home', name='home'),
         # url(r'^VIPSWeb/', include('VIPSWeb.foo.urls')),
@@ -63,14 +65,14 @@ else:
         url(r'^admin/', include(admin.site.urls)),
         url(r'^tinymce/', include('tinymce.urls')),
         # Static serving of media files
-        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
+        url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
         # Enabling translation in JavaScript files
         # See https://docs.djangoproject.com/en/1.6/topics/i18n/translation/#internationalization-in-javascript-code
-        (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
-        (r'^i18n/', include('django.conf.urls.i18n')),
-        (r'^settings.js', views.settings_js),
-        (r'^vipslogicproxy/(?P<path>.*)$', views.vipslogicproxy),
+        url(r'^jsi18n/$', JavaScriptCatalog.as_view(packages=js_info_dict['packages']), name='javascript-catalog'),
+        url(r'^i18n/', include('django.conf.urls.i18n')),
+        url(r'^settings.js', views.settings_js, name="views.settings_js"),
+        url(r'^vipslogicproxy/(?P<path>.*)$', views.vipslogicproxy),
         # Default view is index
         url(r'^$', views.index, name='index'),
         #url(r'^$', TemplateView.as_view(template_name="index.html"))
-    )
+    ]
diff --git a/applefruitmoth/templates/applefruitmoth/index.html b/applefruitmoth/templates/applefruitmoth/index.html
index 4915d1f1649b7ddeb5ea15c69d1a29447f6105a1..e4bcde15bb2457731deed094c4e94774498a8106 100755
--- a/applefruitmoth/templates/applefruitmoth/index.html
+++ b/applefruitmoth/templates/applefruitmoth/index.html
@@ -74,7 +74,7 @@
 {% endblock %}
 {% block customJS %}
 <script type="text/javascript" src="{% static "js/3rdparty/ol.js" %}"></script>
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></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 "applefruitmoth/js/map.js" %}"></script>
diff --git a/applefruitmoth/urls.py b/applefruitmoth/urls.py
index a4afed3764a751cf2af5382b124f819f5e271c83..d10f27647112c8b081813b4a802817cb942b542f 100755
--- a/applefruitmoth/urls.py
+++ b/applefruitmoth/urls.py
@@ -16,10 +16,10 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 
 from applefruitmoth import views
 
-urlpatterns = patterns('',
+urlpatterns = [
     url(r'^$', views.index, name='index'),
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/calculators/templates/calculators/eil.html b/calculators/templates/calculators/eil.html
index 402deabc02e47ab97ee380ac2a784b6e242e110d..64063cf88c2c4d5f5d102284f0aa7dfc103d736a 100755
--- a/calculators/templates/calculators/eil.html
+++ b/calculators/templates/calculators/eil.html
@@ -105,7 +105,7 @@
 
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% static "js/validateForm.js" %}"></script>
 <script type="text/javascript" src="{% static "js/util.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/highcharts.js" %}"></script>
diff --git a/calculators/urls.py b/calculators/urls.py
index d1e7b61de50460a0ad10c60c6f8d69b3106ad443..210159ff8c15ba1b22b1d229ea9e23558f554d13 100755
--- a/calculators/urls.py
+++ b/calculators/urls.py
@@ -15,11 +15,11 @@
 # You should have received a copy of the NIBIO Open Source License
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 from calculators import views
 
-urlpatterns = patterns('calculators.views',
+urlpatterns = [
     # ex: /forecasts/                   
     url(r'^$', views.index, name='index'),
     url(r'eil/', views.eil, name='eil')
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/cerealblotchmodels/templates/cerealblotchmodels/barleynetblotchform.html b/cerealblotchmodels/templates/cerealblotchmodels/barleynetblotchform.html
index 28c191389947bdb231cec51faa8b63914e806a30..d1e727ef757b9fc019c43d18e778cfc1eca07062 100755
--- a/cerealblotchmodels/templates/cerealblotchmodels/barleynetblotchform.html
+++ b/cerealblotchmodels/templates/cerealblotchmodels/barleynetblotchform.html
@@ -133,7 +133,7 @@
 </div>
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% url "views.settings_js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/highcharts.js" %}"></script>
diff --git a/cerealblotchmodels/templates/cerealblotchmodels/septoriahumiditymodelform.html b/cerealblotchmodels/templates/cerealblotchmodels/septoriahumiditymodelform.html
index 0d9d68804effcb63a93aacbd0a5475493d24e205..5c7f34eaca41a1a3942cddfa8c7dd99bb02b12b6 100644
--- a/cerealblotchmodels/templates/cerealblotchmodels/septoriahumiditymodelform.html
+++ b/cerealblotchmodels/templates/cerealblotchmodels/septoriahumiditymodelform.html
@@ -168,7 +168,7 @@
 </div>
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% url "views.settings_js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/highcharts.js" %}"></script>
diff --git a/cerealblotchmodels/templates/cerealblotchmodels/wheatleafblotchform.html b/cerealblotchmodels/templates/cerealblotchmodels/wheatleafblotchform.html
index be177c97106a50fc62956d77069fcd6bfe32def0..1932211037aa8fd1d6b4e1893a86b84893400bcd 100755
--- a/cerealblotchmodels/templates/cerealblotchmodels/wheatleafblotchform.html
+++ b/cerealblotchmodels/templates/cerealblotchmodels/wheatleafblotchform.html
@@ -161,7 +161,7 @@
 </div>
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% url "views.settings_js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/highcharts.js" %}"></script>
diff --git a/cerealblotchmodels/urls.py b/cerealblotchmodels/urls.py
index 5fb2b028ebe60c7c1190db2e90bc115929abd573..fc755c574502d1bd08b2222ba01fbba2b0404217 100755
--- a/cerealblotchmodels/urls.py
+++ b/cerealblotchmodels/urls.py
@@ -15,13 +15,13 @@
 # You should have received a copy of the NIBIO Open Source License
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 from cerealblotchmodels import views
 
-urlpatterns = patterns('cerealblotchmodels.views',
+urlpatterns = [
     # ex: /forecasts/                   
     url(r'^$', views.index, name='index'),
     url(r'barleynetblotch/', views.barleynetblotchform, name='barleynetblotchform'),
     url(r'wheatleafblotch/', views.wheatleafblotchform, name='wheatleafblotchform'),
     url(r'septoriahumidity/', views.septoriahumidityform, name='septoriahumidityform')
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/forecasts/templates/forecasts/detail.html b/forecasts/templates/forecasts/detail.html
index a24e750734e070f5afb1378384614afca5cfdfd5..d3b015a6ddf8efc5aa52ff485530838a9bb096ad 100755
--- a/forecasts/templates/forecasts/detail.html
+++ b/forecasts/templates/forecasts/detail.html
@@ -110,7 +110,7 @@
 </style>
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% url "views.settings_js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/highcharts.js" %}"></script>
diff --git a/forecasts/templates/forecasts/index.html b/forecasts/templates/forecasts/index.html
index 789d4a5a4e4c74643df82771f65699565dc6c839..c6360412af9989f4aaca9b8a66724d0ebc714f19 100755
--- a/forecasts/templates/forecasts/index.html
+++ b/forecasts/templates/forecasts/index.html
@@ -109,7 +109,7 @@
 {% block customJS %}
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
 <script type="text/javascript" src="{% static "forecasts/js/forecasts.js" %}"></script>
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% url "views.settings_js" %}"></script>
 <script type="text/javascript">
 	var forecastConfigurationList = new ForecastConfiguration().getInstanceListFromJSON({{forecast_configurations | safe}});
diff --git a/forecasts/urls.py b/forecasts/urls.py
index d98c826d92f3dbc406058681cbd63a43fca9ec8a..7a03d4b7a4127f159d92acad13ec687dae3b837f 100755
--- a/forecasts/urls.py
+++ b/forecasts/urls.py
@@ -15,12 +15,12 @@
 # You should have received a copy of the NIBIO Open Source License
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 from django.views.decorators.cache import cache_page
 
 from forecasts import views
 
-urlpatterns = patterns('forecasts.views',
+urlpatterns = [
     # ex: /forecasts/                   
     url(r'^$', views.index, name='index'),
     # ex: /forecasts/5/
@@ -34,4 +34,4 @@ urlpatterns = patterns('forecasts.views',
     url(r'^models/js/modelLocalNames.js', cache_page(60 * 30)(views.model_local_names_js), name='model_local_names_js'),
     url(r'^models/$', views.models_index, name='models_index'),
     
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/fusarium/templates/fusarium/oat_flowering.html b/fusarium/templates/fusarium/oat_flowering.html
index 517eb8e8b61958b21e50e2cfb1d56b8c5ef09b95..9e9bf95409c33e88e9c7a45d0d4e016d275cb724 100755
--- a/fusarium/templates/fusarium/oat_flowering.html
+++ b/fusarium/templates/fusarium/oat_flowering.html
@@ -23,7 +23,7 @@
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment-timezone-with-data.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/modernizr_custom.js"%}"></script>
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% url "views.settings_js" %}"></script>
 <script src="{% static "fusarium/js/oatFloweringModelForm.js" %}"></script>
 <script type="text/javascript">
diff --git a/fusarium/urls.py b/fusarium/urls.py
index d5bbfe9e3047c165ff183ee558ef468fe27f986b..d0f606a5b778aadcecb95608e6fde472e7c1525b 100755
--- a/fusarium/urls.py
+++ b/fusarium/urls.py
@@ -16,10 +16,10 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 
 from fusarium import views
 
-urlpatterns = patterns('',
+urlpatterns = [
     url(r'^$', views.index, name='index'),
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/information/urls.py b/information/urls.py
index 9a18bfc68bf6c7713915e0f56f87e0e96e673058..cd17f675c3ea69988e5f126b639bb8232b740958 100755
--- a/information/urls.py
+++ b/information/urls.py
@@ -16,13 +16,13 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 
 from information import views
 
-urlpatterns = patterns('',
+urlpatterns = [
     # ex: /messages/                   
     url(r'^$', views.index, name='index'),
     # ex: /messages/5/
     url(r'^(?P<information_id>\d+)/$', views.detail, name='detail'),
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/mock/urls.py b/mock/urls.py
index 5dbf01c9a91b484daa7c9edae2814b92a0208977..5ad9f0082bc0c85750606752c7f216f88df7d1fc 100644
--- a/mock/urls.py
+++ b/mock/urls.py
@@ -16,8 +16,8 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 from mock import views
-urlpatterns = patterns('mock.views',
+urlpatterns = [
                        url(r'^zymogridmapclient/$', views.zymogridmapclient, name='zymogridmapclient'),
-)
+]
diff --git a/observations/locale/de/LC_MESSAGES/djangojs.po b/observations/locale/de/LC_MESSAGES/djangojs.po
index 79356bc1b9ccbc1465b0ed748d077b2b3f388e3f..13121d79382ee037fa7a1d84220e755c036aeab0 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: 2018-12-10 12:38+0100\n"
+"POT-Creation-Date: 2018-12-10 15:03+0100\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,26 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: static/observations/js/observationList.js:152
+#: static/observations/js/observationList.js:165
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: static/observations/js/observationList.js:168
+#: static/observations/js/observationList.js:183
 msgid "in"
 msgstr ""
 
-#: static/observations/js/observationList.js:263
+#: static/observations/js/observationList.js:274
 msgid "Details"
 msgstr ""
 
-#: static/observations/js/observationList.js:465
+#: static/observations/js/observationList.js:505
 msgid "Days since observation"
 msgstr ""
 
-#: static/observations/js/observationList.js:468
+#: static/observations/js/observationList.js:508
 msgid "Days"
 msgstr ""
 
-#: static/observations/js/observationList.js:470
+#: static/observations/js/observationList.js:510
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/nb/LC_MESSAGES/djangojs.po b/observations/locale/nb/LC_MESSAGES/djangojs.po
index e7acca774b2e698c7983a8b61435a67068b4d78a..2b1aeefbf150d3f5858fd1117df028771aac7871 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: 2018-12-10 12:38+0100\n"
+"POT-Creation-Date: 2018-12-10 15:03+0100\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,27 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: static/observations/js/observationList.js:152
+#: static/observations/js/observationList.js:165
 msgid "Observation(s) found at location"
 msgstr "Observasjon(er) funnet på lokalitet"
 
-#: static/observations/js/observationList.js:168
+#: static/observations/js/observationList.js:183
 msgid "in"
 msgstr "i"
 
-#: static/observations/js/observationList.js:263
+#: static/observations/js/observationList.js:274
 msgid "Details"
 msgstr "Detaljer"
 
-#: static/observations/js/observationList.js:465
+#: static/observations/js/observationList.js:505
 msgid "Days since observation"
 msgstr "Dager siden observasjon"
 
-#: static/observations/js/observationList.js:468
+#: static/observations/js/observationList.js:508
 msgid "Days"
 msgstr "Dager"
 
-#: static/observations/js/observationList.js:470
+#: static/observations/js/observationList.js:510
 msgid "Older"
 msgstr "Eldre"
-
diff --git a/observations/locale/zh_CN/LC_MESSAGES/djangojs.po b/observations/locale/zh_CN/LC_MESSAGES/djangojs.po
index 0e322ed22428a86522d84c295e9564b7ef2a7d2d..39c5bf8341f579f8915017e4b5c5a89770f24aeb 100644
--- a/observations/locale/zh_CN/LC_MESSAGES/djangojs.po
+++ b/observations/locale/zh_CN/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-12-10 12:38+0100\n"
+"POT-Creation-Date: 2018-12-10 15:03+0100\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,26 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: static/observations/js/observationList.js:152
+#: static/observations/js/observationList.js:165
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: static/observations/js/observationList.js:168
+#: static/observations/js/observationList.js:183
 msgid "in"
 msgstr ""
 
-#: static/observations/js/observationList.js:263
+#: static/observations/js/observationList.js:274
 msgid "Details"
 msgstr ""
 
-#: static/observations/js/observationList.js:465
+#: static/observations/js/observationList.js:505
 msgid "Days since observation"
 msgstr ""
 
-#: static/observations/js/observationList.js:468
+#: static/observations/js/observationList.js:508
 msgid "Days"
 msgstr ""
 
-#: static/observations/js/observationList.js:470
+#: static/observations/js/observationList.js:510
 msgid "Older"
 msgstr ""
diff --git a/observations/templates/observations/detail.html b/observations/templates/observations/detail.html
index cdf355662a560f3f471d512757c6c8a0b18c7116..642f2b8558ec918c25c32554c2fca12d68d5c438 100755
--- a/observations/templates/observations/detail.html
+++ b/observations/templates/observations/detail.html
@@ -54,7 +54,7 @@
 <link rel="stylesheet" href="{% static "css/3rdparty/ol.css" %}" type="text/css">
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<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>
diff --git a/observations/templates/observations/index.html b/observations/templates/observations/index.html
index 7049fcc911a1f51eccf1aedb48ce0e8fb76bd9bc..a8c6b84b3e8ca4d78983151db5c2dd43841b712a 100644
--- a/observations/templates/observations/index.html
+++ b/observations/templates/observations/index.html
@@ -101,7 +101,7 @@
 </style>
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/ol-debug.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/chosen.jquery.min.js" %}"></script>
diff --git a/observations/templates/observations/index_old.html b/observations/templates/observations/index_old.html
index 1ae0f0297654e13c936057e5374ac74a2c96c6ed..6919283f5e8ef57c751088477ca92f9f57209cfe 100755
--- a/observations/templates/observations/index_old.html
+++ b/observations/templates/observations/index_old.html
@@ -76,7 +76,7 @@
 <link href="{% static "css/3rdparty/chosen-bootstrap.css" %}" rel="stylesheet" media="screen" />
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/modernizr_custom.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/jquery-ui.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/chosen.jquery.min.js" %}"></script>
diff --git a/observations/urls.py b/observations/urls.py
index 3293b90066219351ab1d582580b9fad222f02df5..fd3672f80748ff583997699c9bf45f55a1956ac7 100755
--- a/observations/urls.py
+++ b/observations/urls.py
@@ -15,17 +15,15 @@
 # You should have received a copy of the NIBIO Open Source License
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
-from django.conf.urls import patterns, url
-from django.views.decorators.cache import cache_page
+from django.conf.urls import url
+#from django.views.decorators.cache import cache_page
 
 from observations import views
 
-urlpatterns = patterns('observations.views',
+urlpatterns = [
     # ex: /forecasts/                   
     url(r'^$', views.index, name='index'),
     url(r'old', views.index_old, name='index_old'),
     # ex: /observations/5/
     url(r'^(?P<observation_id>\d+)/$', (views.detail), name='detail'),
-    
-    
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/organisms/urls.py b/organisms/urls.py
index 454ce6235331fc7745a827aa572cdfecabdf347d..467d9059f5a48e548ed0e8ca8a55a70d919ce2bf 100755
--- a/organisms/urls.py
+++ b/organisms/urls.py
@@ -16,13 +16,13 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 
 from organisms import views
 
-urlpatterns = patterns('',
+urlpatterns = [
     # ex: /organisms/                   
     url(r'^$', views.index, name='index'),
     # ex: /organisms/5/
     #url(r'^(?P<organism_id>\d+)/$', views.detail, name='detail'),
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 0315d8ac5bc4acce568481970841eade57d02024..8c6cfad2f9a600f484e4fa7e93fcbebeca072060 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -18,7 +18,7 @@
 
 # Please add requirements here
 # Read docs for how this works: http://www.pip-installer.org/en/latest/cookbook.html
-Django==1.8
+Django==1.11
 Pillow
 requests==2.6.0
 django-tinymce
diff --git a/roughage/templates/roughage/nutrition.html b/roughage/templates/roughage/nutrition.html
index 94e6773a2402bd16797bb299bde61f54699a5178..59b58c44ed4c123cc95f0c3f330479f8663aef42 100755
--- a/roughage/templates/roughage/nutrition.html
+++ b/roughage/templates/roughage/nutrition.html
@@ -357,7 +357,7 @@
 </style>
 {% endblock %}
 {% block customJS %}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></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/3rdparty/moment.min.js" %}"></script>
diff --git a/roughage/urls.py b/roughage/urls.py
index 5a680f7a1e3ebb26a591f4f970243ef2ccabf905..446c2a56631133716ec891399f564213c1488854 100755
--- a/roughage/urls.py
+++ b/roughage/urls.py
@@ -16,10 +16,10 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 
 from roughage import views
 
-urlpatterns = patterns('',
+urlpatterns = [
     url(r'^nutrition/$', views.nutrition)
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/security/urls.py b/security/urls.py
index e54e3b3d8cbe1f74152c3870cf7ef183c359d2bb..b594c3aea2dbebc9596e33bbfb029f9043171463 100755
--- a/security/urls.py
+++ b/security/urls.py
@@ -16,12 +16,12 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 
 from security import views
 
-urlpatterns = patterns('',
+urlpatterns = [
     url(r'^login/(?P<user_uuid>[^/]+)/$', views.login_user_uuid),
     url(r'^login/$', views.login_form),
     url(r'^logout/$', views.logout)
-)
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/vips_messages/templates/messages/index.html b/vips_messages/templates/messages/index.html
index a09c2ef7745043306d4550405d6d26d69909da65..e754391c5600bc8729775b2010c5db28153c9903 100755
--- a/vips_messages/templates/messages/index.html
+++ b/vips_messages/templates/messages/index.html
@@ -59,7 +59,7 @@
 
 {% endblock %}
 {% block extendJS%}
-<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script>
+<script type="text/javascript" src="{% url "javascript-catalog" %}"></script>
 <script src="{% static "js/3rdparty/modernizr_custom.js" %}"></script>
 <script src="{% static "js/3rdparty/jquery-ui.min.js" %}"></script>
 <script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script>
diff --git a/vips_messages/urls.py b/vips_messages/urls.py
index ec6f3154089a6d4d839b416ddef0e2a40d4518a6..edc66b169439f04d4e324751ed744668f16120b0 100755
--- a/vips_messages/urls.py
+++ b/vips_messages/urls.py
@@ -16,14 +16,14 @@
 # along with VIPSWeb.  If not, see <http://www.nibio.no/licenses/>.
 # 
 
-from django.conf.urls import patterns, url
+from django.conf.urls import url
 
 from vips_messages import views
 
-urlpatterns = patterns('',
+urlpatterns = [
     # ex: /messages/                   
     url(r'^$', views.index, name='index'),
     # ex: /messages/5/
     url(r'^(?P<message_id>\d+)/$', views.detail, name='detail'),
     url(r'^by_tag/json', views.messages_by_tag_json, name='messages_by_tag_json'),
-)
\ No newline at end of file
+]
\ No newline at end of file