diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/CommonSerializeUtils.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/CommonSerializeUtils.java
index 30f83520540727d003288649da10c67b81b77a81..93a85fd2e1536e45123574212ee40b1b1fcc6a1f 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/CommonSerializeUtils.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/CommonSerializeUtils.java
@@ -17,7 +17,6 @@
 
 package org.matrix.olm;
 
-import android.text.TextUtils;
 import android.util.Log;
 
 import java.io.IOException;
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java
index 3e7d01dfed4a09eba5c3e0a1916855a3d8226097..6c1caf0b16c90e227481fcf9b92d8d09185501fd 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java
@@ -77,8 +77,10 @@ public class OlmAccount extends CommonSerializeUtils implements Serializable {
      * Release native account and invalid its JAVA reference counter part.<br>
      * Public API for {@link #releaseAccountJni()}.
      */
-    public void releaseAccount(){
-        releaseAccountJni();
+    public void releaseAccount() {
+        if (0 != mNativeId) {
+            releaseAccountJni();
+        }
         mNativeId = 0;
     }
 
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmException.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmException.java
index 155724b1ea0f2825f5bd71b4ec1981a7d59691f4..93a2425ef8188cdcd1396599168a6dded2b7254d 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmException.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmException.java
@@ -55,15 +55,11 @@ public class OlmException extends IOException {
     public static final int EXCEPTION_CODE_SESSION_DECRYPT_MESSAGE = 405;
     public static final int EXCEPTION_CODE_SESSION_SESSION_IDENTIFIER = 406;
 
-    public static final int EXCEPTION_CODE_UTILITY_CREATION = 501;
-    public static final int EXCEPTION_CODE_UTILITY_VERIFY_SIGNATURE = 500;
+    public static final int EXCEPTION_CODE_UTILITY_CREATION = 500;
+    public static final int EXCEPTION_CODE_UTILITY_VERIFY_SIGNATURE = 501;
 
     // exception human readable messages
-    public static final String EXCEPTION_MSG_NEW_OUTBOUND_GROUP_SESSION = "createNewSession() failed";
-    public static final String EXCEPTION_MSG_NEW_INBOUND_GROUP_SESSION = "createNewSession() failed";
     public static final String EXCEPTION_MSG_INVALID_PARAMS_DESERIALIZATION = "invalid de-serialized parameters";
-    public static final String EXCEPTION_MSG_INIT_ACCOUNT_CREATION = "initNewAccount() failed";
-    public static final String EXCEPTION_MSG_INIT_SESSION_CREATION = "initNewSession() failed";
 
     /** exception code to be taken from: {@link #EXCEPTION_CODE_CREATE_OUTBOUND_GROUP_SESSION}, {@link #EXCEPTION_CODE_CREATE_INBOUND_GROUP_SESSION},
      * {@link #EXCEPTION_CODE_INIT_OUTBOUND_GROUP_SESSION}, {@link #EXCEPTION_CODE_INIT_INBOUND_GROUP_SESSION}..**/
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java
index d9075c8d88063d772fe44ba920a3433193ae5a2e..09e5276c9f9f43a55159307108b27a6feb0a8b1b 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java
@@ -70,7 +70,9 @@ public class OlmInboundGroupSession extends CommonSerializeUtils implements Seri
      * Public API for {@link #releaseSessionJni()}.
      */
     public void releaseSession(){
-        releaseSessionJni();
+        if (0 != mNativeId) {
+            releaseSessionJni();
+        }
         mNativeId = 0;
     }
 
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmOutboundGroupSession.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmOutboundGroupSession.java
index a7972d3b22a75827be1489e531e0b652d77e2429..d26b9b6c2f141dca4c18b681ec5d88498c28f3dc 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmOutboundGroupSession.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmOutboundGroupSession.java
@@ -59,7 +59,9 @@ public class OlmOutboundGroupSession extends CommonSerializeUtils implements Ser
      * Public API for {@link #releaseSessionJni()}.
      */
     public void releaseSession() {
-        releaseSessionJni();
+        if (0 != mNativeId) {
+            releaseSessionJni();
+        }
         mNativeId = 0;
     }
 
@@ -252,7 +254,7 @@ public class OlmOutboundGroupSession extends CommonSerializeUtils implements Ser
     protected void deserialize(byte[] aSerializedData, byte[] aKey) throws Exception {
         createNewSession();
 
-        String errorMsg = null;
+        String errorMsg;
 
         try {
             if ((null == aSerializedData) || (null == aKey)) {
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmSession.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmSession.java
index 170b1a52cbd1a7e2abfbfc3224a4d7a32df212c9..92cc110e0af7bd1a0ae89c391e0db6ff005c87f7 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmSession.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmSession.java
@@ -66,8 +66,10 @@ public class OlmSession extends CommonSerializeUtils implements Serializable {
      * Release native session and invalid its JAVA reference counter part.<br>
      * Public API for {@link #releaseSessionJni()}.
      */
-    public void releaseSession(){
-        releaseSessionJni();
+    public void releaseSession() {
+        if (0 != mNativeId) {
+            releaseSessionJni();
+        }
         mNativeId = 0;
     }
 
@@ -262,7 +264,11 @@ public class OlmSession extends CommonSerializeUtils implements Serializable {
         OlmMessage encryptedMsgRetValue = new OlmMessage();
 
         try {
-            encryptedMsgRetValue.mCipherText = new String(encryptMessageJni(aClearMsg.getBytes("UTF-8"), encryptedMsgRetValue), "UTF-8");
+            byte[] encryptedMessageBuffer = encryptMessageJni(aClearMsg.getBytes("UTF-8"), encryptedMsgRetValue);
+
+            if (null != encryptedMessageBuffer) {
+                encryptedMsgRetValue.mCipherText = new String(encryptedMessageBuffer, "UTF-8");
+            }
         } catch (Exception e) {
             Log.e(LOG_TAG, "## encryptMessage(): failed " + e.getMessage());
             throw new OlmException(OlmException.EXCEPTION_CODE_SESSION_ENCRYPT_MESSAGE, e.getMessage());
@@ -360,24 +366,23 @@ public class OlmSession extends CommonSerializeUtils implements Serializable {
     protected void deserialize(byte[] aSerializedData, byte[] aKey) throws Exception {
         createNewSession();
 
-        StringBuffer errorMsg = new StringBuffer();
+        String errorMsg;
 
         try {
-            String jniError;
             if ((null == aSerializedData) || (null == aKey)) {
                 Log.e(LOG_TAG, "## deserialize(): invalid input parameters");
-                errorMsg.append("invalid input parameters");
-            } else if (null != (jniError = deserializeJni(aSerializedData, aKey))) {
-                errorMsg.append(jniError);
+                errorMsg = "invalid input parameters";
+            } else {
+                errorMsg = deserializeJni(aSerializedData, aKey);
             }
         } catch (Exception e) {
             Log.e(LOG_TAG, "## deserialize() failed " + e.getMessage());
-            errorMsg.append(e.getMessage());
+            errorMsg = e.getMessage();
         }
 
-        if (errorMsg.length() > 0) {
+        if (!TextUtils.isEmpty(errorMsg)) {
             releaseSession();
-            throw new OlmException(OlmException.EXCEPTION_CODE_ACCOUNT_DESERIALIZATION, String.valueOf(errorMsg));
+            throw new OlmException(OlmException.EXCEPTION_CODE_ACCOUNT_DESERIALIZATION, errorMsg);
         }
     }
 
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java
index d520da61e967f8b84cd88a8e209847f7ea419a57..32a583014b036728f3863d1d657ce00cf192fd1e 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java
@@ -35,18 +35,21 @@ public class OlmUtility {
      **/
     private long mNativeId;
 
-    public OlmUtility() {
+    public OlmUtility() throws OlmException  {
         initUtility();
     }
 
     /**
      * Create a native utility instance.
      * To be called before any other API call.
-     * @return true if init succeed, false otherwise.
+     * @exception OlmException the exception
      */
-    private boolean initUtility() {
-        mNativeId = createUtilityJni();
-        return (0 != mNativeId);
+    private void initUtility() throws OlmException {
+        try {
+            mNativeId = createUtilityJni();
+        } catch (Exception e) {
+            throw new OlmException(OlmException.EXCEPTION_CODE_UTILITY_CREATION, e.getMessage());
+        }
     }
 
     private native long createUtilityJni();
@@ -55,8 +58,10 @@ public class OlmUtility {
      * Release native instance.<br>
      * Public API for {@link #releaseUtilityJni()}.
      */
-    public void releaseUtility(){
-        releaseUtilityJni();
+    public void releaseUtility() {
+        if (0 != mNativeId) {
+            releaseUtilityJni();
+        }
         mNativeId = 0;
     }
     private native void releaseUtilityJni();
@@ -111,7 +116,7 @@ public class OlmUtility {
      * @return hash value if operation succeed, null otherwise
      */
      public String sha256(String aMessageToHash) {
-        String hashRetValue = null;
+         String hashRetValue = null;
 
          if (null != aMessageToHash) {
              try {