diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index 3c4fc5f1c11a0ba64ae7d67732a11555be665feb..2078ae169b16e1f94f871656b518cfc91eb775eb 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -3,12 +3,12 @@ from dateutil.parser import parse
 import json
 import logging
 from collections import OrderedDict
+from ckan.types import Schema
 
 # imports from ckan
-from ckan.lib.plugins import DefaultTranslation, DefaultDatasetForm
-from ckan.logic.validators import tag_string_convert
-import ckan.plugins as plugins
-import ckan.plugins.toolkit as toolkit
+from ckan.lib.plugins import DefaultTranslation
+import ckan.plugins as p
+import ckan.plugins.toolkit as tk
 
 # imports from this extension
 import ckanext.odsh.helpers as helpers_odsh
@@ -28,20 +28,20 @@ from ckanext.odsh.views import feed
 
 log = logging.getLogger(__name__)
 
-_ = toolkit._
+_ = tk._
 
 
-class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm):
-    plugins.implements(plugins.IActions)
-    plugins.implements(plugins.IConfigurer)
-    plugins.implements(plugins.IDatasetForm)
-    plugins.implements(plugins.IFacets)
-    plugins.implements(plugins.IPackageController, inherit=True)
-    plugins.implements(plugins.ITemplateHelpers)
-    plugins.implements(plugins.ITranslation)
-    plugins.implements(plugins.IValidators)
-    plugins.implements(plugins.IResourceController, inherit=True)
-    plugins.implements(plugins.IBlueprint)
+class OdshPlugin(p.SingletonPlugin, DefaultTranslation, tk.DefaultDatasetForm):
+    p.implements(p.IActions)
+    p.implements(p.IConfigurer)
+    p.implements(p.IDatasetForm)
+    p.implements(p.IFacets)
+    p.implements(p.IPackageController, inherit=True)
+    p.implements(p.ITemplateHelpers)
+    p.implements(p.ITranslation)
+    p.implements(p.IValidators)
+    p.implements(p.IResourceController, inherit=True)
+    p.implements(p.IBlueprint)
 
     # IBlueprint
     def get_blueprint(self):
@@ -58,7 +58,7 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
             bp_default.add_url_rule(*rule)
 
         # DCAT
-        # if toolkit.asbool(toolkit.config.get('ckanext.dcat.enable_rdf_endpoints', True)):
+        # if tk.asbool(tk.config.get('ckanext.dcat.enable_rdf_endpoints', True)):
         #     helpers_odsh.odsh_remove_route(map, 'dcat_catalog')
         #     bp_default.add_url_rule('/catalog.<any("xml", "rdf", "n3", "ttl", "jsonld"):_format>', view_func=dcat_view.read_catalog, defaults={'_format': 'xml'}, methods=['GET'])
 
@@ -108,9 +108,9 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
     # IConfigurer
 
     def update_config(self, config_):
-        toolkit.add_template_directory(config_, 'templates')
-        toolkit.add_public_directory(config_, 'public')
-        toolkit.add_resource('assets', 'ckanext-odsh')
+        tk.add_template_directory(config_, 'templates')
+        tk.add_public_directory(config_, 'public')
+        tk.add_resource('assets', 'ckanext-odsh')
 
     def after_map(self, map):
         return map
@@ -125,115 +125,119 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
         # package types not handled by any other IDatasetForm plugin.
         return True
 
-    def create_package_schema(self):
-        schema = super(OdshPlugin, self).create_package_schema()
-        self._update_schema(schema)
-        self._update_create_or_update_package_schema(schema)
+    def create_package_schema(self) -> Schema:
+        log.debug("OdshPlugin::create_package_schema")
+        schema: Schema = super(OdshPlugin, self).create_package_schema()
+        schema = self._update_schema(schema)
+        schema = self._update_create_or_update_package_schema(schema)
         return schema
 
-    def update_package_schema(self):
-        schema = super(OdshPlugin, self).update_package_schema()
-        self._update_schema(schema)
-        self._update_create_or_update_package_schema(schema)
+    def update_package_schema(self) -> Schema:
+        log.debug("OdshPlugin::update_package_schema")
+        schema: Schema = super(OdshPlugin, self).update_package_schema()
+        schema = self._update_schema(schema)
+        schema = self._update_create_or_update_package_schema(schema)
         return schema
 
-    def show_package_schema(self):
-        schema = super(OdshPlugin, self).show_package_schema()
-        self._update_show_package_schema(schema)
+    def show_package_schema(self) -> Schema:
+        log.debug("OdshPlugin::show_package_schema")
+        schema: Schema = super(OdshPlugin, self).show_package_schema()
+        schema = self._update_show_package_schema(schema)
         return schema
 
-    def _update_schema(self, schema):
+    def _update_schema(self, schema: Schema) -> Schema:
         for field in ['title', 'license_id']:
-            schema.update({field: [toolkit.get_converter('not_empty')]})
+            schema.update({field: [tk.get_converter('not_empty')]})
 
         for field in ['reference','applicableLegislation','hvdCategory', 'is_replaced_by', 'version_notes']:
           schema.update({
               field: [
-                  toolkit.get_validator('ignore_missing'),
-                  toolkit.get_converter('convert_to_extras')
+                  tk.get_validator('ignore_missing'),
+                  tk.get_converter('convert_to_extras')
               ]
           })
 
         schema['resources'].update({
-            'url': [toolkit.get_converter('not_empty')],
-            'format': [toolkit.get_converter('odsh_validate_format')],
+            'url': [tk.get_converter('not_empty')],
+            'format': [tk.get_converter('odsh_validate_format')],
         })
 
         schema['extras'].update({
             'key': [
-                toolkit.get_converter('known_spatial_uri'),
-                toolkit.get_converter('validate_licenseAttributionByText'),
+                tk.get_converter('known_spatial_uri'),
+                tk.get_converter('validate_licenseAttributionByText'),
             ]
         })
         schema.update(
-            {'__extras':  [toolkit.get_converter('odsh_validate_extras')]})
+            {'__extras':  [tk.get_converter('odsh_validate_extras')]})
+        return schema
 
-    def _update_create_or_update_package_schema(self, schema):
+    def _update_create_or_update_package_schema(self, schema: Schema) -> Schema:
         schema.update({
             'language': [
-                toolkit.get_validator('ignore_missing'),
-                toolkit.get_converter('convert_to_extras')
+                tk.get_validator('ignore_missing'),
+                tk.get_converter('convert_to_extras')
             ],
             'thumbnail': [
-                toolkit.get_validator('ignore_missing'),
-                toolkit.get_converter('convert_to_extras')
+                tk.get_validator('ignore_missing'),
+                tk.get_converter('convert_to_extras')
             ],
             'relatedPackage': [
-                toolkit.get_validator('validate_relatedPackage'),
-                toolkit.get_converter('convert_to_extras')
+                tk.get_validator('validate_relatedPackage'),
+                tk.get_converter('convert_to_extras')
             ],
             'accessibility': [
-                toolkit.get_validator('ignore_missing'),
-                toolkit.get_converter('convert_to_extras')
+                tk.get_validator('ignore_missing'),
+                tk.get_converter('convert_to_extras')
             ],
             'is_replaced_by': [
-                toolkit.get_validator('ignore_missing'),
-                toolkit.get_converter('convert_to_extras')
+                tk.get_validator('ignore_missing'),
+                tk.get_converter('convert_to_extras')
             ],
             'version_notes': [
-                toolkit.get_validator('ignore_missing'),
-                toolkit.get_converter('convert_to_extras')
+                tk.get_validator('ignore_missing'),
+                tk.get_converter('convert_to_extras')
             ],
         })
         return schema
 
-    def _update_show_package_schema(self, schema):
+    def _update_show_package_schema(self, schema: Schema) -> Schema:
         schema.update({
             'language': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
             'thumbnail': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
             'relatedPackage': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
             'accessibility': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
             'is_replaced_by': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
             'version_notes': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
             'reference': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
             'hvdCategory': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
             'applicableLegislation': [
-                toolkit.get_converter('convert_from_extras'),
-                toolkit.get_validator('ignore_missing')
+                tk.get_converter('convert_from_extras'),
+                tk.get_validator('ignore_missing')
             ],
         })
         return schema