diff --git a/voltha/adapters/openolt/openolt.py b/voltha/adapters/openolt/openolt.py
index ad12474..0360d5e 100644
--- a/voltha/adapters/openolt/openolt.py
+++ b/voltha/adapters/openolt/openolt.py
@@ -59,6 +59,7 @@
         self.devices = dict()  # device_id -> OpenoltDevice()
         self.interface = registry('main').get_args().interface
         self.logical_device_id_to_root_device_id = dict()
+        self.num_devices = 0
 
     def start(self):
         log.info('started', interface=self.interface)
@@ -86,7 +87,8 @@
         log.info('adopt-device', device=device)
         kwargs = {
             'adapter_agent': self.adapter_agent,
-            'device': device
+            'device': device,
+            'device_num': self.num_devices + 1
         }
         try:
             self.devices[device.id] = OpenoltDevice(**kwargs)
@@ -94,6 +96,8 @@
             log.error('Failed to adopt OpenOLT device', error=e)
             del self.devices[device.id]
             raise
+        else:
+            self.num_devices += 1
 
     def reconcile_device(self, device):
         log.info('reconcile-device', device=device)
diff --git a/voltha/adapters/openolt/openolt_device.py b/voltha/adapters/openolt/openolt_device.py
index 69d9941..25c4c16 100644
--- a/voltha/adapters/openolt/openolt_device.py
+++ b/voltha/adapters/openolt/openolt_device.py
@@ -114,14 +114,15 @@
     onu id = 7 bits = 128 ONUs per PON port
 
 
-Logical (OF) NNI port number
+PON OLT (OF) port number
 
-    OpenFlow port number corresponding to OLT NNI
+    OpenFlow port number corresponding to PON OLT ports
 
-     15                              0
-    +--+------------------------------+
-    |1 |           nni  id            |
-    +--+------------------------------+
+     31    28                                 0
+    +--------+------------------------~~~------+
+    |  0x2   |          pon intf id            |
+    +--------+------------------------~~~------+
+
 """
 
 """
@@ -133,41 +134,23 @@
         super(OpenoltDevice, self).__init__()
 
         self.adapter_agent = kwargs['adapter_agent']
+        self.device_num = kwargs['device_num']
         device = kwargs['device']
         self.device_id = device.id
         self.host_and_port = device.host_and_port
         self.log = structlog.get_logger(id=self.device_id, ip=self.host_and_port)
-        self.oper_state = 'unknown'
         self.nni_oper_state = dict() #intf_id -> oper_state
         self.onus = {} # OnuKey -> OnuRec
 
-        # Create logical device
-        ld = LogicalDevice(
-            desc=ofp_desc(
-                hw_desc='FIXME',
-                sw_desc='FIXME', serial_num='FIXME',
-                dp_desc='n/a'),
-            switch_features=ofp_switch_features(
-                n_buffers=256, n_tables=2,
-                capabilities=(
-                    OFPC_FLOW_STATS | OFPC_TABLE_STATS |
-                    OFPC_GROUP_STATS | OFPC_PORT_STATS)),
-            root_device_id=self.device_id)
-        # FIXME
-        ld_initialized = self.adapter_agent.create_logical_device(ld, dpid='de:ad:be:ef:fe:ed') # FIXME
-        self.logical_device_id = ld_initialized.id
-
         # Update device
         device.root = True
         device.vendor = 'Edgecore'
         device.model = 'ASFvOLT16'
         device.serial_number = self.host_and_port # FIXME
-        device.parent_id = self.logical_device_id
         device.connect_status = ConnectStatus.REACHABLE
         device.oper_status = OperStatus.ACTIVATING
         self.adapter_agent.update_device(device)
 
-
         # Initialize gRPC
         self.channel = grpc.insecure_channel(self.host_and_port)
         self.channel_ready_future = grpc.channel_ready_future(self.channel)
@@ -185,15 +168,18 @@
             # get the next indication from olt
             ind = next(self.indications)
             self.log.debug("rx indication", indication=ind)
-            # schedule indication handlers to be run in the main event loop
+
+            # indication handlers run in the main event loop
             if ind.HasField('olt_ind'):
                 reactor.callFromThread(self.olt_indication, ind.olt_ind)
             elif ind.HasField('intf_ind'):
                 reactor.callFromThread(self.intf_indication, ind.intf_ind)
             elif ind.HasField('intf_oper_ind'):
-                reactor.callFromThread(self.intf_oper_indication, ind.intf_oper_ind)
+                reactor.callFromThread(self.intf_oper_indication,
+                        ind.intf_oper_ind)
             elif ind.HasField('onu_disc_ind'):
-                reactor.callFromThread(self.onu_discovery_indication, ind.onu_disc_ind)
+                reactor.callFromThread(self.onu_discovery_indication,
+                        ind.onu_disc_ind)
             elif ind.HasField('onu_ind'):
                 reactor.callFromThread(self.onu_indication, ind.onu_ind)
             elif ind.HasField('omci_ind'):
@@ -203,7 +189,36 @@
 
     def olt_indication(self, olt_indication):
 	self.log.debug("olt indication", olt_ind=olt_indication)
-        self.set_oper_state(olt_indication.oper_state)
+
+        # FIXME
+        if olt_indication.oper_state == "down":
+	    self.log.error("ignore olt oper state down", olt_ind=olt_indication)
+            return
+
+        if not hasattr(olt_indication, 'mac') or \
+                not olt_indication.mac:
+            mac = '00:00:00:00:00:' + '{:02x}'.format(self.device_num)
+        else:
+            mac = olt_indication.mac
+
+        # Create logical OF device
+        desc = ofp_desc(hw_desc='FIXME', sw_desc='FIXME', serial_num='FIXME',
+                dp_desc='xgs-pon-olt')
+        capabilities = (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_GROUP_STATS | \
+                OFPC_PORT_STATS)
+        switch_features = ofp_switch_features(n_buffers=256, n_tables=2,
+                capabilities=capabilities)
+        ld = LogicalDevice(desc=desc, switch_features=switch_features,
+                root_device_id=self.device_id)
+        ld_initialized = self.adapter_agent.create_logical_device(ld, dpid=mac)
+        self.logical_device_id = ld_initialized.id
+
+        # Update phys OF device
+        device = self.adapter_agent.get_device(self.device_id)
+        device.parent_id = self.logical_device_id
+        device.oper_status = OperStatus.ACTIVE
+        self.adapter_agent.update_device(device)
+
 
     def intf_indication(self, intf_indication):
 	self.log.debug("intf indication", intf_id=intf_indication.intf_id,
@@ -218,8 +233,10 @@
         self.add_port(intf_indication.intf_id, Port.PON_OLT, oper_status)
 
     def intf_oper_indication(self, intf_oper_indication):
-	self.log.debug("Received interface oper state change indication", intf_id=intf_oper_indication.intf_id,
-            type=intf_oper_indication.type, oper_state=intf_oper_indication.oper_state)
+	self.log.debug("Received interface oper state change indication",
+                intf_id=intf_oper_indication.intf_id,
+                type=intf_oper_indication.type,
+                oper_state=intf_oper_indication.oper_state)
 
         if intf_oper_indication.oper_state == "up":
             oper_state = OperStatus.ACTIVE
@@ -304,14 +321,16 @@
         assert onu_indication.onu_id == key.onu_id
 
         if self.onus[key].state is not 'discovered':
-            self.log.debug("ignore onu indication", intf_id=onu_indication.intf_id,
-                    onu_id=onu_indication.onu_id, state=self.onus[key].state)
+            self.log.debug("ignore onu indication",
+                    intf_id=onu_indication.intf_id,
+                    onu_id=onu_indication.onu_id,
+                    state=self.onus[key].state)
             return
 
         self.onus[key] = self.onus[key]._replace(state='active')
 
-        onu_device = self.adapter_agent.get_child_device(
-            self.device_id, onu_id=onu_indication.onu_id)
+        onu_device = self.adapter_agent.get_child_device(self.device_id,
+                onu_id=onu_indication.onu_id)
         assert onu_device is not None
 
         msg = {'proxy_address':onu_device.proxy_address,
@@ -452,9 +471,6 @@
             # FIXME - Remove hardcoded '129'
             return intf_id + 129
         elif intf_type is Port.PON_OLT:
-            # Interface Ids (reported by device) are zero-based indexed
-            # OpenFlow port numbering is one-based.
-            #return intf_id + 65 # FIXME
             return 0x2<<28 | intf_id
         else:
 	    raise Exception('Invalid port type')
@@ -469,17 +485,6 @@
             prefix = "uni"
         return prefix + "-" + str(port_no)
 
-    def update_device_status(self, connect_status=None, oper_status=None,
-            reason=None):
-        device = self.adapter_agent.get_device(self.device_id)
-        if connect_status is not None:
-            device.connect_status = connect_status
-        if oper_status is not None:
-            device.oper_status = oper_status
-        if reason is not None:
-            device.reason = reason
-        self.adapter_agent.update_device(device)
-
     def add_logical_port(self, port_no, intf_id):
         self.log.info('adding-logical-port', port_no=port_no)
 
@@ -516,26 +521,9 @@
 
         return port_no, label
 
-    def set_oper_state(self, new_state):
-        if self.oper_state != new_state:
-	    if new_state == 'up':
-	        self.update_device_status(connect_status=ConnectStatus.REACHABLE,
-		        oper_status=OperStatus.ACTIVE,
-		        reason='OLT indication - operation state up')
-	    elif new_state == 'down':
-	        self.update_device_status(connect_status=ConnectStatus.REACHABLE,
-		        oper_status=OperStatus.FAILED,
-		        reason='OLT indication - operation state down')
-            else:
-	        raise ValueError('Invalid oper_state in olt_indication')
-
-            self.oper_state = new_state
-
     def new_onu_id(self, intf_id):
         onu_id = None
-        # onu_id is unique per PON.
-        # FIXME - Remove hardcoded limit on ONUs per PON (64)
-        for i in range(1, 64):
+        for i in range(1, 512):
             key = OnuKey(intf_id=intf_id, onu_id=i)
             if key not in self.onus:
                 onu_id = i
diff --git a/voltha/adapters/openolt/protos/openolt.proto b/voltha/adapters/openolt/protos/openolt.proto
index c9f6d98..7041800 100644
--- a/voltha/adapters/openolt/protos/openolt.proto
+++ b/voltha/adapters/openolt/protos/openolt.proto
@@ -63,6 +63,10 @@
 
 message OltIndication {
     string oper_state = 1;	// up, down
+    string mac = 2;
+    string serial_number = 3;
+    string manufacturer = 4;
+    string name = 5;
 }
 
 message IntfIndication {
