diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index 4dcff1703b219f6a9bc6e910e2a5bf5bc0b8f4e3..b869e7108bbf1d5f67fe5721eedf7d4b6ba1d90e 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -8,6 +8,7 @@ from ckan.common import OrderedDict
 from ckanext.odsh.lib.uploader import ODSHResourceUpload
 import ckan.lib.helpers as helpers
 import helpers as odsh_helpers
+import ckan.lib.navl.dictization_functions as df
 
 from itertools import count
 from routes.mapper import SubMapper
@@ -21,6 +22,8 @@ import logging
 log = logging.getLogger(__name__)
 
 _ = toolkit._
+missing = df.missing
+StopOnError = df.StopOnError
 
 def odsh_get_facet_items_dict(name, limit=None):
     '''
@@ -130,6 +133,20 @@ def odsh_tag_string_convert(key, data, errors, context):
         toolkit.get_validator('tag_length_validator')(tag, context)
         odsh_tag_name_validator(tag, context)
 
+def odsh_not_empty(key, data, errors, context):
+    simple_value = data.get(key)
+    in_extras = False
+
+    if key is not missing:
+        simple_key = key[0]
+
+        for data_key, data_value in data.iteritems():
+            if data_key[0] == 'extras' and data_value == simple_key:
+                in_extras = True
+    if (not simple_value or simple_value is missing) and not in_extras:
+        errors[key].append(_('Missing value'))
+        raise StopOnError
+
 
 class OdshIcapPlugin(plugins.SingletonPlugin):
     plugins.implements(plugins.IUploader, inherit=True)
@@ -246,12 +263,12 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
                     toolkit.get_converter('convert_to_extras')]})
 	    elif field == 'spatial_uri':
                 schema.update({field: [
-                    toolkit.get_converter('not_empty'),
+                    toolkit.get_converter('odsh_not_empty'),
                     toolkit.get_converter('known_spatial_uri'),
                     toolkit.get_converter('convert_to_extras')]})
             else:
                 schema.update({field: [
-                    toolkit.get_converter('not_empty'),
+                    toolkit.get_converter('odsh_not_empty'),
                     toolkit.get_converter('convert_to_extras')]})
         for field in self._fields():
             schema.update({field: [toolkit.get_converter('not_empty')]})
@@ -298,5 +315,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
     def get_validators(self):
         return { 'odsh_convert_groups_string': odsh_convert_groups_string,
                  'known_spatial_uri': known_spatial_uri,
-                 'odsh_tag_name_validator': odsh_tag_name_validator}
+                 'odsh_tag_name_validator': odsh_tag_name_validator,
+                 'odsh_not_empty': odsh_not_empty}