diff --git a/voltha/adapters/asfvolt16_olt/asfvolt16_device_handler.py b/voltha/adapters/asfvolt16_olt/asfvolt16_device_handler.py
index b589398..f991efc 100644
--- a/voltha/adapters/asfvolt16_olt/asfvolt16_device_handler.py
+++ b/voltha/adapters/asfvolt16_olt/asfvolt16_device_handler.py
@@ -346,6 +346,64 @@
         device.oper_status = OperStatus.ACTIVATING
         self.adapter_agent.update_device(device)
 
+    def reconcile(self, device):
+
+        self.log.info('reconciling-asfvolt16-starts',device=device)
+
+        if not device.host_and_port:
+            device.oper_status = OperStatus.FAILED
+            device.reason = 'No host_and_port field provided'
+            self.adapter_agent.update_device(device)
+            return
+
+        try:
+            # Establishing connection towards OLT
+            self.bal.connect_olt(device.host_and_port, self.device_id,is_init=False)
+            device.connect_status = ConnectStatus.REACHABLE
+            device.oper_status = OperStatus.ACTIVE
+            self.adapter_agent.update_device(device)
+            reactor.callInThread(self.bal.get_indication_info, self.device_id)
+
+        except Exception as e:
+            self.log.exception('device-unreachable', error=e)
+            device.connect_status = ConnectStatus.UNREACHABLE
+            device.oper_status = OperStatus.UNKNOWN
+            self.adapter_agent.update_device(device)
+            return
+
+        if self.is_heartbeat_started == 0:
+            self.log.info('heart-beat-is-not-yet-started-starting-now')
+            self.heartbeat(device)
+
+            # Now set the initial PM configuration for this device
+            self.pm_metrics=Asfvolt16OltPmMetrics(device)
+            pm_config = self.pm_metrics.make_proto()
+            self.log.info("initial-pm-config", pm_config=pm_config)
+            self.adapter_agent.update_device_pm_config(pm_config,init=True)
+
+
+            # Apply the PM configuration
+            self.update_pm_config(device, pm_config)
+
+
+            # Request PM counters from OLT device.
+            self._handle_pm_counter_req_towards_device(device)
+
+        # Set the logical device id
+        device = self.adapter_agent.get_device(device.id)
+        if device.parent_id:
+            self.logical_device_id = device.parent_id
+            self.log.info("reconcile-logical-device")
+            self.adapter_agent.reconcile_logical_device(device.parent_id)
+        else:
+            self.log.info('no-logical-device-set')
+
+        # Reconcile child devices
+        self.log.info("reconcile-all-child-devices")
+        self.adapter_agent.reconcile_child_devices(device.id)
+        self.log.info('reconciling-asfvolt16-device-ends',device=device)
+
+
     @inlineCallbacks
     def heartbeat(self, device, state = 'run'):
         self.log.debug('olt-heartbeat', device=device, state=state,
diff --git a/voltha/adapters/asfvolt16_olt/bal.py b/voltha/adapters/asfvolt16_olt/bal.py
index 9412c83..5573027 100644
--- a/voltha/adapters/asfvolt16_olt/bal.py
+++ b/voltha/adapters/asfvolt16_olt/bal.py
@@ -43,7 +43,7 @@
         self.ind_obj = Asfvolt16IndHandler(log)
 
     @inlineCallbacks
-    def connect_olt(self, host_and_port, device_id):
+    def connect_olt(self, host_and_port, device_id, is_init=True):
         self.device_id = device_id
         self.grpc_client.connect(host_and_port)
         self.stub = bal_pb2.BalStub(self.grpc_client.channel)
@@ -53,23 +53,24 @@
         # Right now Bi-Directional GRPC support is not there in grpc-c.
         # This code may be needed when bidirectional supported added
         # in GRPC-C
-        init = bal_pb2.BalInit()
-        try:
-            os.environ["SERVICE_HOST_IP"]
-            adapter_ip = os.environ["SERVICE_HOST_IP"]
-        except Exception as e:
-            self.log.info('voltha is running in non docker container environment')
-            adapter_ip = get_my_primary_local_ipv4()
+        if is_init == True:
+            init = bal_pb2.BalInit()
+            try:
+                os.environ["SERVICE_HOST_IP"]
+                adapter_ip = os.environ["SERVICE_HOST_IP"]
+            except Exception as e:
+                self.log.info('voltha is running in non docker container environment')
+                adapter_ip = get_my_primary_local_ipv4()
 
-        ip_port = []
-        ip_port.append(str(adapter_ip))
-        ip_port.append(":")
-        ip_port.append(str(ADAPTER_PORT))
-        init.voltha_adapter_ip_port ="".join(ip_port)
-        self.log.info('Adapter port Ip', init.voltha_adapter_ip_port)
-        self.log.info('connecting-olt', host_and_port=host_and_port,
-                      init_details=init)
-        yield self.stub.BalApiInit(init)
+            ip_port = []
+            ip_port.append(str(adapter_ip))
+            ip_port.append(":")
+            ip_port.append(str(ADAPTER_PORT))
+            init.voltha_adapter_ip_port ="".join(ip_port)
+            self.log.info('Adapter port Ip', init.voltha_adapter_ip_port)
+            self.log.info('connecting-olt', host_and_port=host_and_port,
+                          init_details=init)
+            yield self.stub.BalApiInit(init)
 
     def activate_olt(self):
         self.log.info('activating-olt')
