diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py
index d2d07cfb9252dc6e992bb7bdae9d85d98bf0f866..92ee251f9a24963ab2c2607ae0f8db6b62ac9787 100644
--- a/ckanext/odsh/helpers.py
+++ b/ckanext/odsh/helpers.py
@@ -160,6 +160,8 @@ def odsh_extract_error(key, errors, field='extras'):
                     return error.replace(key+':', '')
 
 def odsh_extract_error_new(key, errors):
+    print('ERRORS')
+    print(errors)
     if not errors or not ('__extras' in errors):
         return None
     error = errors['__extras'][0].get(key,None)
diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo
index 6c58f6b551b398f3a3e09aed54d9584bf7cb6417..621d249dadacd7b628fc15fa6ccd6f87096605a4 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 950414e8c55a260ff08470e071caa4493becca38..65fedcd30ec440290573a2481989e0ff9dbb1b8b 100644
--- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
+++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
@@ -207,10 +207,16 @@ msgstr "Bitte geben Sie einen Titel ein"
 msgid "odsh_issued_error_label"
 msgstr "Bitte wählen Sie ein Veröffentlichungsdatum"
 
+msgid "issued: empty"
+msgstr "Bitte wählen Sie ein Veröffentlichungsdatum"
+
 
 msgid "odsh_issued_not_date_error_label"
 msgstr "Bitte wählen Sie ein korrektes Veröffentlichungsdatum"
 
+msgid "issued: not a valid date"
+msgstr "Bitte wählen Sie ein korrektes Veröffentlichungsdatum"
+
 msgid "Tag string: Fehlender Wert"
 msgstr "Bitte wählen Sie geeignete Schlagwörter"
 
diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index 71ecf35fbebce2d39476d2a6702f0d4166f3fbac..52d4e62a5dfd6d090c1afa5ff0d75aa40eca7f78 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -253,7 +253,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
 
         schema['extras'].update({
             'key': [
-                toolkit.get_converter('odsh_validate_issued'),
                 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 5426a680080d2e4feea35e8c5e35f6267fd3cb3c..29ba4e244271eadd5fa17428093b6ddc8a261fc0 100644
--- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html
+++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html
@@ -158,8 +158,8 @@ is_required=true,placeholder=_('Enter title')) }}
 
     {% set field = 'issued' %}
     {% set data_issued = h.odsh_extract_value_from_extras(data.extras,field) %}
-    {% set value = data_issued.split('T')[0] if data_issued else h.odsh_now()%}
-    {% set error = h.odsh_extract_error(field, errors) %}
+    {% set error = h.odsh_extract_error_new(field, errors) %}
+    {% set value = data_issued.split('T')[0] if data_issued else (h.odsh_now() if not error else '')%}
     <div class="control-group {{ " error" if error }} control-full">
         <label class="control-label" for="field-{{field}}">Veröffentlichungsdatum: <span title="Dieses Feld ist erforderlich" class="control-required">*</span> </label>
         <div class="controls">
@@ -172,7 +172,7 @@ is_required=true,placeholder=_('Enter title')) }}
                 </div>
                 <div class="span6 inline-error">
                     {% if error %} 
-                    {{_(error)}}
+                    {{_('issued: ' + error)}}
                     {% endif %}
                 </div>
             </div>
diff --git a/ckanext/odsh/validation.py b/ckanext/odsh/validation.py
index 3a6d6ef8d77cce82e51b8191c2590fb6028da5ed..4b9c0db75e5f1c9dcbb8c6d48cbb84701b835f14 100644
--- a/ckanext/odsh/validation.py
+++ b/ckanext/odsh/validation.py
@@ -24,7 +24,7 @@ def _extract_value(data, field):
 def validate_extra_groups(data):
     value = _extract_value(data, 'groups')
     if not value:
-        raise toolkit.Invalid({'groups':'at least one group needed'})
+        return 'at least one group needed'
 
     groups = [g.strip() for g in value.split(',') if value.strip()]
     for k in data.keys():
@@ -32,13 +32,24 @@ def validate_extra_groups(data):
             data[k]=''
             # del data[k]
     if len(groups)==0:
-        raise toolkit.Invalid({'groups':'at least one group needed'})
+        return 'at least one group needed'
 
     for num, tag in zip(range(len(groups)), groups):
         data[('groups', num, 'id')] = tag
 
 def validate_extras(key, data, errors, context):
-    validate_extra_groups(data)
+    pass
+    extra_errors = {}
+    error = validate_extra_groups(data)
+    if error:
+        extra_errors['groups'] = error
+
+    error = validate_extra_date_new(key, 'issued', data, False)
+    if error:
+        extra_errors['issued'] = error
+
+    if extra_errors:
+        raise toolkit.Invalid(extra_errors)
 
 def _set_value(data, field, value):
     key = None
@@ -50,12 +61,32 @@ def _set_value(data, field, value):
         return None
     data[(key[0], key[1], 'value')] = value
 
-def validate_extra_date(key, field, data, errors, context):
+def validate_extra_date_new(key, field, data, optional=False):
+    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'
+    else:
+        if re.match(r'\d\d\d\d-\d\d-\d\d', value):
+            try:
+                dt=parse(value)
+                _set_value(data, field, dt.isoformat())
+                return
+            except ValueError:
+                pass
+        return 'not a valid date'
+
+def validate_extra_date(key, field, data, optional=False):
     value = _extract_value(data, field)
 
     if not value:
-        if field == 'temporal_end':
-            return # temporal_end is optional
+        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':
@@ -71,8 +102,8 @@ def validate_extra_date(key, field, data, errors, context):
         raise toolkit.Invalid(field+':odsh_'+field+'_not_date_error_label')
 
 
-def validate_extra_date_factory(field):
-    return lambda key, data, errors, context: validate_extra_date(key, field, data, errors, context)
+def validate_extra_date_factory(field, optional=False):
+    return lambda key, data, errors, context: validate_extra_date(key, field, data, optional)
 
 def validate_licenseAttributionByText(key, data, errors, context):
     register = model.Package.get_license_register()
@@ -172,9 +203,8 @@ def get_validators():
     return {
             'licenseAttributionByText': validate_licenseAttributionByText,
             'known_spatial_uri': known_spatial_uri,
-            'odsh_validate_issued': validate_extra_date_factory('issued'),
             'odsh_validate_temporal_start': validate_extra_date_factory('temporal_start'),
-            'odsh_validate_temporal_end': validate_extra_date_factory('temporal_end'),
+            '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