diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo
index f6ea89603905f9e8c34163ed34e4c37f6745d5fb..6a4f231e3fe3eb077e58edd541d7f9df437152ed 100644
Binary files a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo and b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo differ
diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
index 9fc567af469450a0bf3b26b233e2450c43976f33..94c7e9e33739f35d27933ea7f02454afb923da2d 100644
--- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
+++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
@@ -177,9 +177,21 @@ msgstr "Bitte geben Sie einen räumlichen Bezug an"
 msgid "odsh_temporal_start_error_label"
 msgstr "Bitte wählen Sie einen Beginn des Zeitraumes aus"
 
+msgid "temporal_start: empty"
+msgstr "Bitte wählen Sie einen Beginn des Zeitraumes aus"
+
 msgid "odsh_temporal_end_error_label"
 msgstr "Bitte wählen Sie ein Ende des Zeitraumes aus"
 
+msgid "temporal_end: empty"
+msgstr "Bitte wählen Sie ein Ende des Zeitraumes aus"
+
+msgid "temporal_start: not a valid date"
+msgstr "Bitte wählen Sie einen gültigen Beginn des Zeitraumes aus"
+
+msgid "temporal_end: not a valid date"
+msgstr "Bitte wählen Sie ein gültiges Ende des Zeitraumes aus"
+
 msgid "odsh_temporal_error_label"
 msgstr "Bitte geben Sie einen gültigen Zeitraum an"
 
diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index a60136bdc278e3afdec4cb2925f9c4d7a3eda454..744e6066b3e4a2dbd430f1962751e8813ec216d7 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -247,8 +247,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
 
         schema['extras'].update({
             'key': [
-                toolkit.get_converter('odsh_validate_temporal_start'),
-                toolkit.get_converter('odsh_validate_temporal_end'),
                 toolkit.get_converter('known_spatial_uri'),
             ]
         })
diff --git a/ckanext/odsh/templates/package/snippets/package_basic_fields.html b/ckanext/odsh/templates/package/snippets/package_basic_fields.html
index 8371d5d73f5175b54e670773ce6bcbd2fa3dcaac..4445b81a220c9d6650f9af49d31278d7a288b0e3 100644
--- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html
+++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html
@@ -107,8 +107,8 @@ is_required=true,placeholder=_('Enter title')) }}
     {% endblock %}
 
     <!-- timerange -->
-    {% set error_start = h.odsh_extract_error('temporal_start', errors) %}
-    {% set error_end = h.odsh_extract_error('temporal_end', errors) %}
+    {% set error_start = h.odsh_extract_error_new('temporal_start', errors) %}
+    {% set error_end = h.odsh_extract_error_new('temporal_end', errors) %}
     {% set error_string = 'odsh_temporal_error_label' if error_start and error_end else (error_start if error_start else (error_end if error_end))%}
     <label for="start-end" class="control-label">{{ _('timerange') }}:
         <span title="{{ _("This field is required") }}" class="control-required">*</span>
diff --git a/ckanext/odsh/validation.py b/ckanext/odsh/validation.py
index 05fd5ade61e2fa74aa3ea1132a3a416ab20b94a5..0c2177f3e9ed6a5a246ee5b6dedbb62d28db475b 100644
--- a/ckanext/odsh/validation.py
+++ b/ckanext/odsh/validation.py
@@ -21,12 +21,12 @@ def _extract_value(data, field):
         return None
     return data[(key[0], key[1], 'value')]
 
-def validate_extra_groups(data, requireAtLeastOne):
+def validate_extra_groups(data, requireAtLeastOne, errors):
     value = _extract_value(data, 'groups')
     if not value:
-        if not requireAtLeastOne:
-            return None
-        return 'at least one group needed'
+        if requireAtLeastOne:
+            errors['groups']= 'at least one group needed'  
+        return 
 
     groups = [g.strip() for g in value.split(',') if value.strip()]
     for k in data.keys():
@@ -34,29 +34,24 @@ def validate_extra_groups(data, requireAtLeastOne):
             data[k]=''
             # del data[k]
     if len(groups)==0:
-        if not requireAtLeastOne:
-            return None
-        return 'at least one group needed'
+        if requireAtLeastOne:
+            errors['groups']= 'at least one group needed'  
+        return 
 
     for num, tag in zip(range(len(groups)), groups):
         data[('groups', num, 'id')] = tag
 
 def validate_extras(key, data, errors, context):
-    pass
     extra_errors = {}
-    error = validate_extra_groups(data,False)
-    if error:
-        extra_errors['groups'] = error
+    isStaNord = ('id',) in data and data[('id',)][:7] == 'StaNord'
 
-    error = validate_extra_date_new(key, 'issued', data, False)
-    if error:
-        extra_errors['issued'] = error
+    validate_extra_groups(data, False, extra_errors)
+    validate_extra_date_new(key, 'issued', data, False, extra_errors)
+    validate_extra_date_new(key, 'temporal_start', data, isStaNord, extra_errors)
+    validate_extra_date_new(key, 'temporal_end', data, True, extra_errors)
+    validate_licenseAttributionByText(data, extra_errors)
 
-    error = validate_licenseAttributionByText(data)
-    if error:
-        extra_errors['licenseAttributionByText'] = error
-
-    if extra_errors:
+    if len(extra_errors.values()):
         raise toolkit.Invalid(extra_errors)
 
 def _set_value(data, field, value):
@@ -69,25 +64,24 @@ def _set_value(data, field, value):
         return None
     data[(key[0], key[1], 'value')] = value
 
-def validate_extra_date_new(key, field, data, optional=False):
+def validate_extra_date_new(key, field, data, optional, errors):
     value = _extract_value(data, field)
 
     if not value:
-        if optional:
-            return 
-        # Statistikamt Nord does not always provide temporal_start/end,
-        # but their datasets have to be accepted as they are.
-        if not ('id',) in data or data[('id',)][:7] != 'StaNord':
-            return 'empty'
+        if not optional:
+            errors[field] = 'empty'
+        return
     else:
         if re.match(r'\d\d\d\d-\d\d-\d\d', value):
             try:
+                print('parse')
+                print(value)
                 dt=parse(value)
                 _set_value(data, field, dt.isoformat())
                 return
             except ValueError:
                 pass
-        return 'not a valid date'
+        errors[field] = 'not a valid date'
 
 def validate_extra_date(key, field, data, optional=False):
     value = _extract_value(data, field)
@@ -113,7 +107,7 @@ def validate_extra_date(key, field, data, optional=False):
 def validate_extra_date_factory(field, optional=False):
     return lambda key, data, errors, context: validate_extra_date(key, field, data, optional)
 
-def validate_licenseAttributionByText(data):
+def validate_licenseAttributionByText(data, errors):
     register = model.Package.get_license_register()
     isByLicense=False
     for k in data:
@@ -133,9 +127,9 @@ def validate_licenseAttributionByText(data):
                 hasAttribution = value != ''
                 break
     if isByLicense and not hasAttribution:
-        return 'empty not allowed'
+        errors['licenseAttributionByText'] = 'empty not allowed'
     if not isByLicense and hasAttribution:
-        return 'text not allowed for this license'
+        errors['licenseAttributionByText'] = 'text not allowed for this license'
 
 def known_spatial_uri(key, data, errors, context):
     value = _extract_value(data, 'spatial_uri')
@@ -210,8 +204,6 @@ def tag_string_convert(key, data, errors, context):
 def get_validators():
     return {
             'known_spatial_uri': known_spatial_uri,
-            'odsh_validate_temporal_start': validate_extra_date_factory('temporal_start'),
-            'odsh_validate_temporal_end': validate_extra_date_factory('temporal_end', True),
             'odsh_tag_name_validator': tag_name_validator,
             'odsh_validate_extras':validate_extras
             }
\ No newline at end of file