diff --git a/voltha/adapters/iadapter.py b/voltha/adapters/iadapter.py
index 5b916ed..dcb373b 100644
--- a/voltha/adapters/iadapter.py
+++ b/voltha/adapters/iadapter.py
@@ -34,7 +34,7 @@
 
 @implementer(IAdapterInterface)
 class IAdapter(object):
-    def __init__(self, adapter_agent, config, device_handler_class, name, vendor, version, device_type):
+    def __init__(self, adapter_agent, config, device_handler_class, name, vendor, version, device_type, vendor_id):
         log.debug('Initializing adapter: {} {} {}'.format(vendor, name, version))
         self.adapter_agent = adapter_agent
         self.config = config
@@ -42,6 +42,7 @@
         self.supported_device_types = [
             DeviceType(
                 id=device_type,
+                vendor_id=vendor_id,
                 adapter=name,
                 accepts_bulk_flow_update=True
             )
@@ -170,7 +171,8 @@
                                          name,
                                          vendor,
                                          version,
-                                         device_type)
+                                         device_type,
+                                         None)
         self.logical_device_id_to_root_device_id = dict()
 
     def reconcile_device(self, device):
@@ -211,14 +213,15 @@
 ONU Adapter base class
 """
 class OnuAdapter(IAdapter):
-    def __init__(self, adapter_agent, config, device_handler_class, name, vendor, version, device_type):
+    def __init__(self, adapter_agent, config, device_handler_class, name, vendor, version, device_type, vendor_id):
         super(OnuAdapter, self).__init__(adapter_agent,
                                          config,
                                          device_handler_class,
                                          name,
                                          vendor,
                                          version,
-                                         device_type)
+                                         device_type,
+                                         vendor_id)
 
     def reconcile_device(self, device):
         self.devices_handlers[device.id] = self.device_handler_class(self, device.id)
diff --git a/voltha/adapters/ponsim_olt/ponsim_olt.py b/voltha/adapters/ponsim_olt/ponsim_olt.py
index f1940bf..aca7fc2 100644
--- a/voltha/adapters/ponsim_olt/ponsim_olt.py
+++ b/voltha/adapters/ponsim_olt/ponsim_olt.py
@@ -361,7 +361,7 @@
             self.adapter_agent.child_device_detected(
                 parent_device_id=device.id,
                 parent_port_no=1,
-                child_device_type='PSMO', #''ponsim_onu', # refers notes from ponsim_onu
+                child_device_type='ponsim_onu',
                 proxy_address=Device.ProxyAddress(
                     device_id=device.id,
                     channel_id=vlan_id
diff --git a/voltha/adapters/ponsim_onu/ponsim_onu.py b/voltha/adapters/ponsim_onu/ponsim_onu.py
index 04ae976..499b825 100644
--- a/voltha/adapters/ponsim_onu/ponsim_onu.py
+++ b/voltha/adapters/ponsim_onu/ponsim_onu.py
@@ -47,7 +47,8 @@
                                                name='ponsim_onu',
                                                vendor='Voltha project',
                                                version='0.4',
-                                               device_type='PSMO')
+                                               device_type='ponsim_onu',
+                                               vendor_id='PSMO')
 
 class PonSimOnuHandler(object):
     def __init__(self, adapter, device_id):
diff --git a/voltha/core/adapter_agent.py b/voltha/core/adapter_agent.py
index d966c3b..07b9510 100644
--- a/voltha/core/adapter_agent.py
+++ b/voltha/core/adapter_agent.py
@@ -528,6 +528,8 @@
             device_agent.reconcile_existing_device(child)
 
 
+    #Obselete API - discouraged to be decommissioned after
+    #adapters are align to new APIs
     def child_device_detected(self,
                               parent_device_id,
                               parent_port_no,
@@ -553,6 +555,34 @@
         self._tx_event_subscriptions[topic] = self.event_bus.subscribe(
             topic, lambda t, m: self._send_proxied_message(proxy_address, m))
 
+    def add_onu_device(self,
+                       parent_device_id,
+                       parent_port_no,
+                       vendor_id,
+                       proxy_address,
+                       admin_state,
+                       **kw):
+        device_type = next((dt for dt in self.root_proxy.get('/device_types')
+                            if dt.vendor_id == vendor_id), None)
+        # we create new ONU device objects and insert them into the config
+        device = Device(
+            id=create_cluster_device_id(self.core.core_store_id),
+            # id=uuid4().hex[:12],
+            type=device_type.id,
+            vendor_id=vendor_id,
+            parent_id=parent_device_id,
+            parent_port_no=parent_port_no,
+            proxy_address=proxy_address,
+            admin_state=admin_state,
+            adapter=device_type.adapter,
+            **kw
+        )
+        self._make_up_to_date('/devices', device.id, device)
+
+        topic = self._gen_tx_proxy_address_topic(proxy_address)
+        self._tx_event_subscriptions[topic] = self.event_bus.subscribe(
+            topic, lambda t, m: self._send_proxied_message(proxy_address, m))
+
     def get_child_device_with_proxy_address(self, proxy_address):
         # Proxy address is defined as {parent id, channel_id}
         devices = self.root_proxy.get('/devices')
diff --git a/voltha/core/xpon_agent.py b/voltha/core/xpon_agent.py
index 4dd6a87..024008a 100644
--- a/voltha/core/xpon_agent.py
+++ b/voltha/core/xpon_agent.py
@@ -480,16 +480,16 @@
         parent_chnl_pair_id = self.get_port_num(
             device.id, v_ont_ani.data.preferred_chanpair)
         log.info('create-onu-device:', parent_chnl_pair_id=parent_chnl_pair_id)
-        onu_type = v_ont_ani.data.expected_serial_number[:4]
+        vendor_id = v_ont_ani.data.expected_serial_number[:4]
         proxy_address = Device.ProxyAddress(
             device_id=device.id, channel_id=parent_chnl_pair_id,
             onu_id=v_ont_ani.data.onu_id, onu_session_id=v_ont_ani.data.onu_id)
-        adapter_agent.child_device_detected(
+        adapter_agent.add_onu_device(
             parent_device_id=device.id, parent_port_no=parent_chnl_pair_id,
-            child_device_type=onu_type, proxy_address=proxy_address, root=True,
-            serial_number=v_ont_ani.data.expected_serial_number,
-            admin_state=AdminState.ENABLED if v_ont_ani.interface.enabled else
-            AdminState.DISABLED)
+            vendor_id=vendor_id, proxy_address=proxy_address,
+            root=True, serial_number=v_ont_ani.data.expected_serial_number,
+            admin_state=AdminState.ENABLED if v_ont_ani.interface.enabled
+                                           else AdminState.DISABLED)
         return
 
     def delete_onu_device(self, device_id, v_ont_ani):
diff --git a/voltha/protos/device.proto b/voltha/protos/device.proto
index f7828e6..1cafdd8 100644
--- a/voltha/protos/device.proto
+++ b/voltha/protos/device.proto
@@ -15,6 +15,10 @@
     // Unique name for the device type
     string id = 1;
 
+    // Unique venor id for the device type applicable to ONU
+    // 4 bytes of vendor id from ONU serial number
+    string vendor_id = 5;
+
     // Name of the adapter that handles device type
     string adapter = 2;
 
@@ -153,6 +157,7 @@
     // List of software on the device
     Images images = 9 [(access) = READ_ONLY];
     string serial_number = 10 [(access) = READ_ONLY];
+    string vendor_id = 24 [(access) = READ_ONLY];
 
     // Addapter that takes care of device
     string adapter = 11 [(access) = READ_ONLY];
