diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py
index aaff41c8272def2c4802c1a617abd731c02560b6..1dfa379163c36f82a59dedcb15ca3538d8067446 100644
--- a/ckanext/odsh/helpers.py
+++ b/ckanext/odsh/helpers.py
@@ -15,6 +15,7 @@ import urllib.parse
 import urllib.error
 import hashlib
 import re
+import os
 import csv
 from ckan.common import config, request, g, c
 from urllib.parse import urlsplit, urlunsplit
@@ -500,65 +501,48 @@ def short_name_for_category(category_name):
     }
     return translations.get(category_name)
 
-def odsh_load_applicable_legislations():
+
+def _load_mapping(mapping_file_path, uri=None):
+    result = None
+    try:
+        with open(mapping_file_path) as mapping_json:
+            MAPPING = json.load(mapping_json, object_pairs_hook=OrderedDict)
+
+            if uri:
+                # Filter MAPPING to find the entry with the matching uri
+                filtered_entries = [entry for entry in MAPPING if entry.get('uri') == uri]
+                result = filtered_entries[0] if filtered_entries else None
+            else:
+                # If no uri provided, return all entries in key/value format (used in form)
+                result = [{'key': entry['uri'], 'value': entry.get('short_title', entry['title'])} for entry in MAPPING]
+    except FileNotFoundError:
+        print("File not found or path is incorrect.")
+    except json.JSONDecodeError:
+        print("Error decoding JSON.")
+
+    return result
+
+def odsh_load_applicable_legislations(uri=None):
     '''
     Load applicable legislations.
     '''
 
     extension_path = pkg_resources.resource_filename('ckanext.odsh', '')
-    default_mapping_file_path = extension_path + '/resources/applicable_legislations.json'
-    mapping_file_path = config.get(
-        'ckanext.odsh.applicable_legislations_file_path', default_mapping_file_path)
+    default_mapping_file_path = os.path.join(extension_path, 'resources', 'applicable_legislations.json')
+    mapping_file_path = config.get('ckanext.odsh.applicable_legislations_file_path', default_mapping_file_path)
 
-    try:
-        with open(mapping_file_path) as mapping_json:
-            MAPPING = json.loads(
-                mapping_json.read(), object_pairs_hook=OrderedDict)
-            options = [{'key': key, 'value': MAPPING[key]}
-                   for key in MAPPING]
-    except IOError as err:
-        log.error(
-            'Could not load mapping file from {}'
-            .format(mapping_file_path)
-        )
-        raise
-    except ValueError as err:
-        log.error(
-            'Could not convert mapping file from json. \nMapping file: {}'
-            .format(mapping_file_path)
-        )
-        raise
-    return options
+    return _load_mapping(mapping_file_path, uri)
 
-def odsh_load_hvd_categories():
+def odsh_load_hvd_categories(uri=None):
     '''
     Load HVD categories.
     '''
 
     extension_path = pkg_resources.resource_filename('ckanext.odsh', '')
-    default_mapping_file_path = extension_path + '/resources/hvd_categories.json'
-    mapping_file_path = config.get(
-        'ckanext.odsh.hvd_categories_file_path', default_mapping_file_path)
+    default_mapping_file_path = os.path.join(extension_path, 'resources', 'hvd_categories.json')
+    mapping_file_path = config.get('ckanext.odsh.hvd_categories_file_path', default_mapping_file_path)
 
-    try:
-        with open(mapping_file_path) as mapping_json:
-            MAPPING = json.loads(
-                mapping_json.read(), object_pairs_hook=OrderedDict)
-            options = [{'key': key, 'value': MAPPING[key]}
-                   for key in MAPPING]
-    except IOError as err:
-        log.error(
-            'Could not load mapping file from {}'
-            .format(mapping_file_path)
-        )
-        raise
-    except ValueError as err:
-        log.error(
-            'Could not convert mapping file from json. \nMapping file: {}'
-            .format(mapping_file_path)
-        )
-        raise
-    return options
+    return _load_mapping(mapping_file_path, uri)
 
 def odsh_load_mdk_sample_dataset():
     '''
@@ -855,12 +839,12 @@ def format_resource_format(format_str):
 def extract_email(text):
     if not isinstance(text, str):
         return None  # Return None for non-string inputs
-    
+
     # Regular expression pattern to match email addresses
     email_pattern = r'[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,}'
-    
+
     # Find all email addresses in the input text using the regular expression pattern
     matches = re.findall(email_pattern, text)
-    
+
     # If there are matches, return the first email address found, else return None
-    return matches[0] if matches else None
\ No newline at end of file
+    return matches[0] if matches else None