diff --git a/secure_element/1.0/GtoService.cpp b/secure_element/1.0/GtoService.cpp
index 897a004..a003c92 100644
--- a/secure_element/1.0/GtoService.cpp
+++ b/secure_element/1.0/GtoService.cpp
@@ -26,7 +26,7 @@
 using android::status_t;
 
 int main() {
-  ALOGD("Thales Secure Element HAL for eSE1 Service 1.4.0 is starting. libse-gto v1.13");
+  ALOGD("Thales Secure Element HAL for eSE1 Service 1.5.0 is starting. libse-gto v1.13");
   sp<ISecureElement> se_service = new SecureElement("eSE1");
   configureRpcThreadpool(1, true);
   status_t status = se_service->registerAsService("eSE1");
diff --git a/secure_element/1.0/GtoService_ese2.cpp b/secure_element/1.0/GtoService_ese2.cpp
index 2fc55cb..4ababbd 100644
--- a/secure_element/1.0/GtoService_ese2.cpp
+++ b/secure_element/1.0/GtoService_ese2.cpp
@@ -26,7 +26,7 @@
 using android::status_t;
 
 int main() {
-  ALOGD("Thales Secure Element HAL for eSE2 Service 1.4.0 is starting. libse-gto v1.13");
+  ALOGD("Thales Secure Element HAL for eSE2 Service 1.5.0 is starting. libse-gto v1.13");
   sp<ISecureElement> se_service = new SecureElement("eSE2");
   configureRpcThreadpool(1, true);
   status_t status = se_service->registerAsService("eSE2");
diff --git a/secure_element/1.0/SecureElement.cpp b/secure_element/1.0/SecureElement.cpp
index 471c6b6..0f02092 100644
--- a/secure_element/1.0/SecureElement.cpp
+++ b/secure_element/1.0/SecureElement.cpp
@@ -82,11 +82,16 @@
 sp<V1_0::ISecureElementHalCallback> SecureElement::internalClientCallback = nullptr;
 int SecureElement::initializeSE() {
 
-    //struct settings *settings;
     int n;
 
     ALOGD("SecureElement:%s start", __func__);
 
+    if (checkSeUp) {
+        ALOGD("SecureElement:%s Already initialized", __func__);
+        ALOGD("SecureElement:%s end", __func__);
+        return EXIT_SUCCESS;
+    }
+
     if (se_gto_new(&ctx) < 0) {
         ALOGE("SecureElement:%s se_gto_new FATAL:%s", __func__,strerror(errno));
 
@@ -103,14 +108,12 @@
     }
 
     if (resetSE() < 0) {
+        se_gto_close(ctx);
+        ctx = NULL;
         return EXIT_FAILURE;
     }
 
     checkSeUp = true;
-    turnOffSE = false;
-
-    internalClientCallback->onStateChange(true);
-    turnOffSE = true;
 
     ALOGD("SecureElement:%s end", __func__);
     return EXIT_SUCCESS;
@@ -121,7 +124,7 @@
 
     ALOGD("SecureElement:%s start", __func__);
     if (clientCallback == nullptr) {
-        ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+        ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
         return Void();
     } else {
         internalClientCallback = clientCallback;
@@ -133,11 +136,11 @@
     if (initializeSE() != EXIT_SUCCESS) {
         ALOGE("SecureElement:%s initializeSE Failed", __func__);
         clientCallback->onStateChange(false);
+    } else {
+        ALOGD("SecureElement:%s initializeSE Success", __func__);
+        clientCallback->onStateChange(true);
     }
 
-    if (deinitializeSE() != SecureElementStatus::SUCCESS) {
-        ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
-    }
     ALOGD("SecureElement:%s end", __func__);
 
     return Void();
@@ -204,6 +207,7 @@
     if (!checkSeUp) {
         if (initializeSE() != EXIT_SUCCESS) {
             ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+            internalClientCallback->onStateChange(false);
             _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
             return Void();
         }
@@ -355,6 +359,7 @@
     if (!checkSeUp) {
         if (initializeSE() != EXIT_SUCCESS) {
             ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+            internalClientCallback->onStateChange(false);
             _hidl_cb(result, SecureElementStatus::IOERROR);
             return Void();
         }
@@ -617,13 +622,14 @@
 }
 
 void SecureElement::serviceDied(uint64_t, const wp<IBase>&) {
-  ALOGE("SecureElement:%s SecureElement serviceDied", __func__);
+  ALOGD("SecureElement:%s SecureElement serviceDied", __func__);
   SecureElementStatus mSecureElementStatus = deinitializeSE();
   if (mSecureElementStatus != SecureElementStatus::SUCCESS) {
     ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
   }
   if (internalClientCallback != nullptr) {
     internalClientCallback->unlinkToDeath(this);
+    internalClientCallback = nullptr;
   }
 }
 
@@ -633,9 +639,10 @@
 
     ALOGD("SecureElement:%s start", __func__);
 
-    if(turnOffSE){
+    if(checkSeUp){
         if (se_gto_close(ctx) < 0) {
             mSecureElementStatus = SecureElementStatus::FAILED;
+            internalClientCallback->onStateChange(false);
         } else {
             ctx = NULL;
             mSecureElementStatus = SecureElementStatus::SUCCESS;
@@ -643,7 +650,6 @@
             nbrOpenChannel = 0;
         }
         checkSeUp = false;
-        turnOffSE = false;
     }else{
         ALOGD("SecureElement:%s No need to deinitialize SE", __func__);
         mSecureElementStatus = SecureElementStatus::SUCCESS;
diff --git a/secure_element/1.0/SecureElement.h b/secure_element/1.0/SecureElement.h
index 69e308e..79720df 100644
--- a/secure_element/1.0/SecureElement.h
+++ b/secure_element/1.0/SecureElement.h
@@ -49,7 +49,6 @@
     uint8_t nbrOpenChannel = 0;
     bool isBasicChannelOpen = false;
     bool checkSeUp = false;
-    bool turnOffSE = true;
     uint8_t atr[32];
     uint8_t atr_size;
     char config_filename[100];
diff --git a/secure_element/1.1/GtoService.cpp b/secure_element/1.1/GtoService.cpp
index a1157b7..5aeca90 100644
--- a/secure_element/1.1/GtoService.cpp
+++ b/secure_element/1.1/GtoService.cpp
@@ -27,7 +27,7 @@
 
 int main() {
   ALOGD("android::hardware::secure_element::V1_1 is starting.");
-  ALOGD("Thales Secure Element HAL for eSE2 Service 1.4.0 is starting. libse-gto v1.13");
+  ALOGD("Thales Secure Element HAL for eSE2 Service 1.5.0 is starting. libse-gto v1.13");
   sp<ISecureElement> se_service = new SecureElement("eSE1");
   configureRpcThreadpool(1, true);
   status_t status = se_service->registerAsService("eSE1");
diff --git a/secure_element/1.1/GtoService_ese2.cpp b/secure_element/1.1/GtoService_ese2.cpp
index 6f0efdf..2ff983e 100644
--- a/secure_element/1.1/GtoService_ese2.cpp
+++ b/secure_element/1.1/GtoService_ese2.cpp
@@ -27,7 +27,7 @@
 
 int main() {
   ALOGD("android::hardware::secure_element::V1_1 is starting.");
-  ALOGD("Thales Secure Element HAL for eSE2 Service 1.4.0 is starting. libse-gto v1.13");
+  ALOGD("Thales Secure Element HAL for eSE2 Service 1.5.0 is starting. libse-gto v1.13");
   sp<ISecureElement> se_service = new SecureElement("eSE2");
   configureRpcThreadpool(1, true);
   status_t status = se_service->registerAsService("eSE2");
diff --git a/secure_element/1.1/SecureElement.cpp b/secure_element/1.1/SecureElement.cpp
index 6ad56ba..8e5bceb 100644
--- a/secure_element/1.1/SecureElement.cpp
+++ b/secure_element/1.1/SecureElement.cpp
@@ -83,11 +83,16 @@
 sp<V1_1::ISecureElementHalCallback> SecureElement::internalClientCallback_v1_1 = nullptr;
 int SecureElement::initializeSE() {
 
-    //struct settings *settings;
     int n;
 
     ALOGD("SecureElement:%s start", __func__);
 
+    if (checkSeUp) {
+        ALOGD("SecureElement:%s Already initialized", __func__);
+        ALOGD("SecureElement:%s end", __func__);
+        return EXIT_SUCCESS;
+    }
+
     if (se_gto_new(&ctx) < 0) {
         ALOGE("SecureElement:%s se_gto_new FATAL:%s", __func__,strerror(errno));
 
@@ -104,17 +109,12 @@
     }
 
     if (resetSE() < 0) {
+        se_gto_close(ctx);
+        ctx = NULL;
         return EXIT_FAILURE;
     }
 
     checkSeUp = true;
-    turnOffSE = false;
-
-
-    if(internalClientCallback_v1_1 != nullptr) internalClientCallback_v1_1->onStateChange_1_1(true, "SE Initialized");
-    else internalClientCallback->onStateChange(true);
-
-    turnOffSE = true;
 
     ALOGD("SecureElement:%s end", __func__);
     return EXIT_SUCCESS;
@@ -124,7 +124,7 @@
 
     ALOGD("SecureElement:%s start", __func__);
     if (clientCallback == nullptr) {
-        ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+        ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
         return Void();
     } else {
         internalClientCallback = clientCallback;
@@ -137,11 +137,11 @@
     if (initializeSE() != EXIT_SUCCESS) {
         ALOGE("SecureElement:%s initializeSE Failed", __func__);
         clientCallback->onStateChange(false);
+    } else {
+        ALOGD("SecureElement:%s initializeSE Success", __func__);
+        clientCallback->onStateChange(true);
     }
 
-    if (deinitializeSE() != SecureElementStatus::SUCCESS) {
-        ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
-    }
     ALOGD("SecureElement:%s end", __func__);
 
     return Void();
@@ -151,7 +151,7 @@
 
     ALOGD("SecureElement:%s start", __func__);
     if (clientCallback == nullptr) {
-        ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+        ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
         return Void();
     } else {
         internalClientCallback = nullptr;
@@ -163,12 +163,12 @@
 
     if (initializeSE() != EXIT_SUCCESS) {
         ALOGE("SecureElement:%s initializeSE Failed", __func__);
-        clientCallback->onStateChange_1_1(false, "initializeSE Failed");
+        clientCallback->onStateChange_1_1(false, "SE Initialized failed");
+    } else {
+        ALOGD("SecureElement:%s initializeSE Success", __func__);
+        clientCallback->onStateChange_1_1(true, "SE Initialized");
     }
 
-    if (deinitializeSE() != SecureElementStatus::SUCCESS) {
-        ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
-    }
     ALOGD("SecureElement:%s end", __func__);
 
     return Void();
@@ -235,6 +235,12 @@
     if (!checkSeUp) {
         if (initializeSE() != EXIT_SUCCESS) {
             ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+            if(internalClientCallback_v1_1 != nullptr) {
+                internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+            }
+            else {
+                internalClientCallback->onStateChange(false);
+            }
             _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
             return Void();
         }
@@ -386,6 +392,12 @@
     if (!checkSeUp) {
         if (initializeSE() != EXIT_SUCCESS) {
             ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+            if(internalClientCallback_v1_1 != nullptr) {
+                internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+            }
+            else {
+                internalClientCallback->onStateChange(false);
+            }
             _hidl_cb(result, SecureElementStatus::IOERROR);
             return Void();
         }
@@ -648,7 +660,7 @@
 }
 
 void SecureElement::serviceDied(uint64_t, const wp<IBase>&) {
-  ALOGE("SecureElement:%s SecureElement serviceDied", __func__);
+  ALOGD("SecureElement:%s SecureElement serviceDied", __func__);
   SecureElementStatus mSecureElementStatus = deinitializeSE();
   if (mSecureElementStatus != SecureElementStatus::SUCCESS) {
     ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
@@ -669,9 +681,14 @@
 
     ALOGD("SecureElement:%s start", __func__);
 
-    if(turnOffSE){
+    if(checkSeUp){
         if (se_gto_close(ctx) < 0) {
             mSecureElementStatus = SecureElementStatus::FAILED;
+            if (internalClientCallback_v1_1 != nullptr) {
+                internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+            } else {
+                internalClientCallback->onStateChange(false);
+            }
         } else {
             ctx = NULL;
             mSecureElementStatus = SecureElementStatus::SUCCESS;
@@ -679,8 +696,6 @@
             nbrOpenChannel = 0;
         }
         checkSeUp = false;
-        turnOffSE = false;
-
     }else{
         ALOGD("SecureElement:%s No need to deinitialize SE", __func__);
         mSecureElementStatus = SecureElementStatus::SUCCESS;
diff --git a/secure_element/1.1/SecureElement.h b/secure_element/1.1/SecureElement.h
index 2cf4380..52f9a23 100644
--- a/secure_element/1.1/SecureElement.h
+++ b/secure_element/1.1/SecureElement.h
@@ -52,7 +52,6 @@
     uint8_t nbrOpenChannel = 0;
     bool isBasicChannelOpen = false;
     bool checkSeUp = false;
-    bool turnOffSE = true;
     uint8_t atr[32];
     uint8_t atr_size;
     char config_filename[100];
diff --git a/secure_element/1.2/GtoService.cpp b/secure_element/1.2/GtoService.cpp
index 69cc3f4..54d9732 100644
--- a/secure_element/1.2/GtoService.cpp
+++ b/secure_element/1.2/GtoService.cpp
@@ -27,7 +27,7 @@
 
 int main() {
   ALOGD("android::hardware::secure_element::V1_2 is starting.");
-  ALOGD("Thales Secure Element HAL for eSE1 Service 1.4.0 is starting. libse-gto v1.13");
+  ALOGD("Thales Secure Element HAL for eSE1 Service 1.5.0 is starting. libse-gto v1.13");
   sp<ISecureElement> se_service = new SecureElement("eSE1");
   configureRpcThreadpool(1, true);
   status_t status = se_service->registerAsService("eSE1");
diff --git a/secure_element/1.2/GtoService_ese2.cpp b/secure_element/1.2/GtoService_ese2.cpp
index d718d8a..1a8eb84 100644
--- a/secure_element/1.2/GtoService_ese2.cpp
+++ b/secure_element/1.2/GtoService_ese2.cpp
@@ -27,7 +27,7 @@
 
 int main() {
   ALOGD("android::hardware::secure_element::V1_2 is starting.");
-  ALOGD("Thales Secure Element HAL for eSE2 Service 1.4.0 is starting. libse-gto v1.13");
+  ALOGD("Thales Secure Element HAL for eSE2 Service 1.5.0 is starting. libse-gto v1.13");
   sp<ISecureElement> se_service = new SecureElement("eSE2");
   configureRpcThreadpool(1, true);
   status_t status = se_service->registerAsService("eSE2");
diff --git a/secure_element/1.2/SecureElement.cpp b/secure_element/1.2/SecureElement.cpp
index 77972cb..8cda099 100644
--- a/secure_element/1.2/SecureElement.cpp
+++ b/secure_element/1.2/SecureElement.cpp
@@ -88,11 +88,16 @@
 sp<V1_1::ISecureElementHalCallback> SecureElement::internalClientCallback_v1_1 = nullptr;
 int SecureElement::initializeSE() {
 
-    //struct settings *settings;
     int n;
 
     ALOGD("SecureElement:%s start", __func__);
 
+    if (checkSeUp) {
+        ALOGD("SecureElement:%s Already initialized", __func__);
+        ALOGD("SecureElement:%s end", __func__);
+        return EXIT_SUCCESS;
+    }
+
     if (se_gto_new(&ctx) < 0) {
         ALOGE("SecureElement:%s se_gto_new FATAL:%s", __func__,strerror(errno));
 
@@ -109,17 +114,12 @@
     }
 
     if (resetSE() < 0) {
+        se_gto_close(ctx);
+        ctx = NULL;
         return EXIT_FAILURE;
     }
 
     checkSeUp = true;
-    turnOffSE = false;
-
-
-    if(internalClientCallback_v1_1 != nullptr) internalClientCallback_v1_1->onStateChange_1_1(true, "SE Initialized");
-    else internalClientCallback->onStateChange(true);
-
-    turnOffSE = true;
 
     ALOGD("SecureElement:%s end", __func__);
     return EXIT_SUCCESS;
@@ -129,7 +129,7 @@
 
     ALOGD("SecureElement:%s start", __func__);
     if (clientCallback == nullptr) {
-        ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+        ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
         return Void();
     } else {
         internalClientCallback = clientCallback;
@@ -142,11 +142,11 @@
     if (initializeSE() != EXIT_SUCCESS) {
         ALOGE("SecureElement:%s initializeSE Failed", __func__);
         clientCallback->onStateChange(false);
+    } else {
+        ALOGD("SecureElement:%s initializeSE Success", __func__);
+        clientCallback->onStateChange(true);
     }
 
-    if (deinitializeSE() != SecureElementStatus::SUCCESS) {
-        ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
-    }
     ALOGD("SecureElement:%s end", __func__);
 
     return Void();
@@ -156,7 +156,7 @@
 
     ALOGD("SecureElement:%s start", __func__);
     if (clientCallback == nullptr) {
-        ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+        ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
         return Void();
     } else {
         internalClientCallback = nullptr;
@@ -168,12 +168,12 @@
 
     if (initializeSE() != EXIT_SUCCESS) {
         ALOGE("SecureElement:%s initializeSE Failed", __func__);
-        clientCallback->onStateChange_1_1(false, "initializeSE Failed");
+        clientCallback->onStateChange_1_1(false, "SE Initialized failed");
+    } else {
+        ALOGD("SecureElement:%s initializeSE Success", __func__);
+        clientCallback->onStateChange_1_1(true, "SE Initialized");
     }
 
-    if (deinitializeSE() != SecureElementStatus::SUCCESS) {
-        ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
-    }
     ALOGD("SecureElement:%s end", __func__);
 
     return Void();
@@ -240,6 +240,12 @@
     if (!checkSeUp) {
         if (initializeSE() != EXIT_SUCCESS) {
             ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+            if(internalClientCallback_v1_1 != nullptr) {
+                internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+            }
+            else {
+                internalClientCallback->onStateChange(false);
+            }
             _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
             return Void();
         }
@@ -391,6 +397,12 @@
     if (!checkSeUp) {
         if (initializeSE() != EXIT_SUCCESS) {
             ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+            if(internalClientCallback_v1_1 != nullptr) {
+                internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+            }
+            else {
+                internalClientCallback->onStateChange(false);
+            }
             _hidl_cb(result, SecureElementStatus::IOERROR);
             return Void();
         }
@@ -653,7 +665,7 @@
 }
 
 void SecureElement::serviceDied(uint64_t, const wp<IBase>&) {
-  ALOGE("SecureElement:%s SecureElement serviceDied", __func__);
+  ALOGD("SecureElement:%s SecureElement serviceDied", __func__);
   SecureElementStatus mSecureElementStatus = deinitializeSE();
   if (mSecureElementStatus != SecureElementStatus::SUCCESS) {
     ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
@@ -674,9 +686,14 @@
 
     ALOGD("SecureElement:%s start", __func__);
 
-    if(turnOffSE){
+    if(checkSeUp){
         if (se_gto_close(ctx) < 0) {
             mSecureElementStatus = SecureElementStatus::FAILED;
+            if (internalClientCallback_v1_1 != nullptr) {
+                internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+            } else {
+                internalClientCallback->onStateChange(false);
+            }
         } else {
             ctx = NULL;
             mSecureElementStatus = SecureElementStatus::SUCCESS;
@@ -684,7 +701,6 @@
             nbrOpenChannel = 0;
         }
         checkSeUp = false;
-        turnOffSE = false;
     }else{
         ALOGD("SecureElement:%s No need to deinitialize SE", __func__);
         mSecureElementStatus = SecureElementStatus::SUCCESS;
@@ -708,7 +724,7 @@
     }
 
     if (internalClientCallback_v1_1 != nullptr) {
-        internalClientCallback_v1_1->onStateChange_1_1(false, "SE deinitialized");
+        internalClientCallback_v1_1->onStateChange_1_1(false, "reset the SE");
     } else {
         internalClientCallback->onStateChange(false);
     }
@@ -725,10 +741,11 @@
             ALOGD("SecureElement:%s STResetTool Success", __func__);
             if (initializeSE() == EXIT_SUCCESS) {
                 status = SecureElementStatus::SUCCESS;
-            }
-            turnOffSE = true;
-            if (deinitializeSE() != SecureElementStatus::SUCCESS) {
-                ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
+                if (internalClientCallback_v1_1 != nullptr) {
+                    internalClientCallback_v1_1->onStateChange_1_1(true, "SE Initialized");
+                } else {
+                    internalClientCallback->onStateChange(true);
+                }
             }
         } else {
             ALOGE("SecureElement:%s STResetTool Failed!", __func__);
@@ -737,12 +754,13 @@
         dlclose(stdll);
     } else {
         if (initializeSE() == EXIT_SUCCESS) {
+            if (internalClientCallback_v1_1 != nullptr) {
+                 internalClientCallback_v1_1->onStateChange_1_1(true, "SE Initialized");
+            } else {
+                internalClientCallback->onStateChange(true);
+            }
             status = SecureElementStatus::SUCCESS;
         }
-        turnOffSE = true;
-        if (deinitializeSE() != SecureElementStatus::SUCCESS) {
-            ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
-        }
     }
 
     ALOGD("SecureElement:%s end", __func__);
diff --git a/secure_element/1.2/SecureElement.h b/secure_element/1.2/SecureElement.h
index 1c2293b..0f3df48 100644
--- a/secure_element/1.2/SecureElement.h
+++ b/secure_element/1.2/SecureElement.h
@@ -53,7 +53,6 @@
     uint8_t nbrOpenChannel = 0;
     bool isBasicChannelOpen = false;
     bool checkSeUp = false;
-    bool turnOffSE = true;
     uint8_t atr[32];
     uint8_t atr_size;
     char config_filename[100];
