diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py
index e6cbdb7e929add648b43f968c35114a6b72a75b1..944978888555238bd34dedb6c2e3d88bc392d402 100644
--- a/inventory_provider/db/ims_data.py
+++ b/inventory_provider/db/ims_data.py
@@ -115,40 +115,30 @@ def get_interface_info(ds):
 def otrs_get_customer_company_rows(ds):
     yield ['customer_id', 'name', 'street', 'zip', 'city', 'country', 'url',
            'comments']
+    all_cus_comps = set()
     for customer in ds.get_all_entities('Customer'):
-        yield [customer['Name'], customer['FullName'], '', '', '', '', '', '']
+        all_cus_comps.add(customer['Name'])
+        yield [customer['Name'].replace(' ', ''), customer['Name'],
+               '', '', '','', '', '']
+    for vendor in ds.get_all_entities('Vendor'):
+        if vendor['Name'] not in all_cus_comps:
+            all_cus_comps.add(vendor['Name'])
+            yield [vendor['Name'].replace(' ', ''), vendor['Name'],
+                   '', '', '', '', '', '']
 
 
-def otrs_get_customer_users_rows(ds):
-    yield ['email', 'username', 'customer_id', 'customer_id_2', 'title',
-           'firstname', 'lastname', 'phone', 'fax', 'mobile', 'street', 'zip',
-           'city', 'country', 'comments']
-    type_priority = {
-        RelateType.SITE: 1,
-        RelateType.GROUP: 2,
-        RelateType.CONTRACT: 3,
-        RelateType.VENDOR: 4,
-        RelateType.CONTACT: 5,
-        RelateType.CUSTOMER: 6,
-    }
-
-    # TODO - check the rules for prioritisation once model has been confirmed
-    def _choose_customer_user(cu_1, cu_2):
-        if not cu_2 or type_priority.get(cu_1['type'], 0) > type_priority.get(
-                cu_2['type'], 0):
-            return cu_1
-        return cu_2
-
-    # TODO - check the rules for validation once model has been confirmed
-    def _is_valid_customer(cus):
-        if not cus['email']:
-            return False
-        return True
+# TODO - check the rules for validation once model has been confirmed
+def _is_valid_customer(cus):
+    if not cus['email']:
+        return False
+    return True
+
+
+def otrs_get_customer_contacts(ds):
 
-    # TODO - check this rule for getting the customer_id2 once model has been confirmed  # noqa
-    def _get_customer_id2(cus):
-        if cus['CustomerType'] and cus['CustomerType']['Name'] == 'NREN NOC':
-            return True
+    def _get_customer_id2(t):
+        if t['Id'] == 3 or t['Name'] == 'EU NREN':
+            return 'OTRS-GEANT-NREN'
         return ''
 
     for customer in ds.get_all_entities(
@@ -157,52 +147,16 @@ def otrs_get_customer_users_rows(ds):
                 ims.CUSTOMER_PROPERTIES['CustomerRelatedContacts'],
                 ims.CUSTOMER_PROPERTIES['CustomerType']
             ]):
-        # # Org as User
-        # org_customer = OrderedDict({
-        #     'type': customer['CustomerType']['Name'] if customer[
-        #         'CustomerType'] else '',
-        #     'email': customer['AccountEmail'],
-        #     'username': customer['AccountEmail'],
-        #     'customer_id': customer['Name'],
-        #     'customer_id_2': _get_customer_id2(customer),
-        #     'title': '',
-        #     'firstname': customer['Name'],
-        #     'lastname': '-',
-        #     'phone': '',
-        #     'fax': '',
-        #     'mobile': '',
-        #     'street': '',
-        #     'zip': '',
-        #     'city': '',
-        #     'country': '',
-        #     'comments': 'Organisation imported as a user'
-        # })
-        # if _is_valid_customer(org_customer):
-        #     del org_customer['type']
-        #
-        #     # todo - remove from here after testing
-        #     # dummy_email = f'dumy_{dummy_counter}@geant.org'
-        #     # org_customer['email'] = dummy_email
-        #     # org_customer['username'] = dummy_email
-        #     # dummy_counter += 1
-        #     # todo - remove up to here after testing
-        #
-        #     yield list(org_customer.values())
-        # # end of Org as User
-
-        # Contacts as Users
+
         if customer['CustomerRelatedContacts']:
 
-            customer_user = None
             for contact in customer['CustomerRelatedContacts']:
-                # could just do this as an array, but this makes it easier to
-                # keep track of the fields
                 t_customer_user = OrderedDict({
-                    'type': ims.RelateType(contact['MainTypeId']),
                     'email': contact['Contact']['Mail'],
                     'username': contact['Contact']['Mail'],  # TODO if tal_id is going to be present use that # noqa
-                    'customer_id': customer['Name'],
-                    'customer_id_2': _get_customer_id2(customer),
+                    'customer_id': customer['Name'].replace(' ', ''),
+                    'customer_id_2':
+                        _get_customer_id2(customer['CustomerType']),
                     'title': '',
                     'firstname': contact['Contact']['Name'],
                     'lastname':
@@ -217,7 +171,9 @@ def otrs_get_customer_users_rows(ds):
                     'zip': '',
                     'city': '',
                     'country': '',
-                    'comments': ''
+                    'comments': '',
+                    # 'type_0': 'customer',
+                    # 'type': customer['CustomerType']['Name']
                 })
                 if not _is_valid_customer(t_customer_user):
                     continue
@@ -225,12 +181,65 @@ def otrs_get_customer_users_rows(ds):
                     t_customer_user['comments'] = \
                         'Organisation imported as a user'
 
-                del t_customer_user['type']
-                yield list(t_customer_user.values())
-            # if customer_user:
-            #     del customer_user['type']
-            #     yield list(customer_user.values())
-        # end of Contact as User
+                yield t_customer_user
+
+
+def otrs_get_vendor_contacts(ds):
+
+    for vrc in ds.get_all_entities(
+            'VendorRelatedContact',
+            [
+                ims.VENDOR_RELATED_CONTACT_PROPERTIES['Vendor'],
+                ims.VENDOR_RELATED_CONTACT_PROPERTIES['Contact']
+            ]):
+        t_customer_user = OrderedDict({
+            'email': vrc['Contact']['Mail'],
+            'username': vrc['Contact']['Mail'],  # TODO if tal_id is going to be present use that # noqa
+            'customer_id': vrc['Vendor']['Name'].replace(' ', ''),
+            'customer_id_2': '',
+            'title': '',
+            'firstname': vrc['Contact']['Name'],
+            'lastname':
+                ' '.join(filter(None, [
+                    vrc['Contact']['InFix'],
+                    vrc['Contact']['LastName']
+                ])),
+            'phone': '',
+            'fax': '',
+            'mobile': '',
+            'street': '',
+            'zip': '',
+            'city': '',
+            'country': '',
+            'comments': '',
+            # 'type_0': 'vendor',
+            # 'type': ''
+        })
+        if not _is_valid_customer(t_customer_user):
+            continue
+        if vrc['Contact']['IsGroup']:
+            t_customer_user['comments'] = \
+                'Organisation imported as a user'
+
+        yield t_customer_user
+
+
+def otrs_get_customer_users_rows(ds):
+    yield ['email', 'username', 'customer_id', 'customer_id_2', 'title',
+           'firstname', 'lastname', 'phone', 'fax', 'mobile', 'street', 'zip',
+           'city', 'country', 'comments']
+    # yield ['email', 'username', 'customer_id', 'customer_id_2', 'title',
+    #        'firstname', 'lastname', 'phone', 'fax', 'mobile', 'street', 'zip',
+    #        'city', 'country', 'comments', 'type', 'type_2']
+
+    def get_all_cus_user_rows():
+        yield from otrs_get_customer_contacts(ds)
+        yield from otrs_get_vendor_contacts(ds)
+
+    sorted_cus = sorted(get_all_cus_user_rows(), key=lambda x: x['email'])
+    # this will be used to prioritisation
+    for cu in sorted_cus:
+        yield list(cu.values())
 
 
 if __name__ == '__main__':