diff --git a/ring-android/app/src/main/java/cx/ring/model/SipCall.java b/ring-android/app/src/main/java/cx/ring/model/SipCall.java
index f64a505..5524f20 100644
--- a/ring-android/app/src/main/java/cx/ring/model/SipCall.java
+++ b/ring-android/app/src/main/java/cx/ring/model/SipCall.java
@@ -118,19 +118,20 @@
 
 
     public interface direction {
-        public static final int CALL_TYPE_INCOMING = 1;
-        public static final int CALL_TYPE_OUTGOING = 2;
+        int CALL_TYPE_INCOMING = 1;
+        int CALL_TYPE_OUTGOING = 2;
     }
 
     public interface state {
-        public static final int CALL_STATE_NONE = 0;
-        public static final int CALL_STATE_RINGING = 2;
-        public static final int CALL_STATE_CURRENT = 3;
-        public static final int CALL_STATE_HUNGUP = 4;
-        public static final int CALL_STATE_BUSY = 5;
-        public static final int CALL_STATE_FAILURE = 6;
-        public static final int CALL_STATE_HOLD = 7;
-        public static final int CALL_STATE_UNHOLD = 8;
+        int CALL_STATE_NONE = 0;
+        int CALL_STATE_CONNECTING = 1;
+        int CALL_STATE_RINGING = 2;
+        int CALL_STATE_CURRENT = 3;
+        int CALL_STATE_HUNGUP = 4;
+        int CALL_STATE_BUSY = 5;
+        int CALL_STATE_FAILURE = 6;
+        int CALL_STATE_HOLD = 7;
+        int CALL_STATE_UNHOLD = 8;
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/service/CallManagerCallBack.java b/ring-android/app/src/main/java/cx/ring/service/CallManagerCallBack.java
index 4f7c5a7..66bc4ae 100644
--- a/ring-android/app/src/main/java/cx/ring/service/CallManagerCallBack.java
+++ b/ring-android/app/src/main/java/cx/ring/service/CallManagerCallBack.java
@@ -175,8 +175,13 @@
     }
 
     @Override
-    public void incomingMessage(String ID, String from, String msg) {
-        Log.w(TAG, "on_incoming_message:" + msg);
+    public void incomingMessage(String ID, String from, StringMap messages) {
+        Log.w(TAG, "on_incoming_message:" + messages);
+
+        String msg = messages.get("text/plain");
+        if (msg == null)
+            return;
+
         Intent intent = new Intent(INCOMING_TEXT);
         intent.putExtra("CallID", ID);
         intent.putExtra("From", from);
diff --git a/ring-android/app/src/main/java/cx/ring/service/ISipService.aidl b/ring-android/app/src/main/java/cx/ring/service/ISipService.aidl
index 3342b7c..4708062 100644
--- a/ring-android/app/src/main/java/cx/ring/service/ISipService.aidl
+++ b/ring-android/app/src/main/java/cx/ring/service/ISipService.aidl
@@ -58,7 +58,9 @@
     
     /* IM */
     void sendTextMessage(in String callID, in SipMessage message);
-        
+    void sendAccountTextMessage(in String accountid, in String to, in String msg);
+
+
     void transfer(in String callID, in String to);
     void attendedTransfer(in String transferID, in String targetID);
     
diff --git a/ring-android/app/src/main/java/cx/ring/service/SipService.java b/ring-android/app/src/main/java/cx/ring/service/SipService.java
index ea66a73..8f9caae 100644
--- a/ring-android/app/src/main/java/cx/ring/service/SipService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/SipService.java
@@ -930,7 +930,9 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.sendTextMessage() thread running...");
-                    Ringservice.sendTextMessage(callID, message.comment);
+                    StringMap messages  = new StringMap();
+                    messages.set("text/plain", message.comment);
+                    Ringservice.sendTextMessage(callID, messages, "", false);
                     if (getConferences().get(callID) != null)
                         getConferences().get(callID).addSipMessage(message);
                 }
@@ -939,6 +941,17 @@
         }
 
         @Override
+        public void sendAccountTextMessage(final String accountid, final String to, final String msg) {
+            getExecutor().execute(new SipRunnable() {
+                @Override
+                protected void doRun() throws SameThreadException, RemoteException {
+                    Log.i(TAG, "SipService.sendAccountTextMessage() thread running... " + accountid + " " + to + " " + msg);
+                    Ringservice.sendAccountTextMessage(accountid, to, msg);
+                }
+            });
+        }
+
+        @Override
         public List<Codec> getAudioCodecList(final String accountID) throws RemoteException {
             return getExecutor().executeAndReturn(new SipRunnableWithReturn<ArrayList<Codec>>() {
                 @Override
@@ -1064,7 +1077,7 @@
                 @Override
                 protected Map<String, String> doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.validateCertificatePath() thread running...");
-                    return Ringservice.validateCertificatePath(accountID, certificatePath, privateKeyPath, "").toNative();
+                    return Ringservice.validateCertificatePath(accountID, certificatePath, privateKeyPath, "", "").toNative();
                 }
             });
         }
diff --git a/ring-android/app/src/main/jni/callmanager.i b/ring-android/app/src/main/jni/callmanager.i
index 9d29d4c..8efe4e0 100644
--- a/ring-android/app/src/main/jni/callmanager.i
+++ b/ring-android/app/src/main/jni/callmanager.i
@@ -41,7 +41,7 @@
     virtual void transferSucceeded(void){}
     virtual void recordPlaybackStopped(const std::string& path){}
     virtual void voiceMailNotify(const std::string& call_id, int nd_msg){}
-    virtual void incomingMessage(const std::string& id, const std::string& from, const std::string& msg){}
+    virtual void incomingMessage(const std::string& id, const std::string& from, const std::map<std::string, std::string>& messages){}
     virtual void incomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
     virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}
     virtual void conferenceCreated(const std::string& conf_id){}
@@ -129,8 +129,7 @@
 void acceptEnrollment(const std::string& callID, bool accepted);
 
 /* Instant messaging */
-void sendTextMessage(const std::string& callID, const std::string& message);
-void sendTextMessage(const std::string& callID, const std::string& message, const std::string& from);
+void sendTextMessage(const std::string& callID, const std::map<std::string, std::string>& messages, const std::string& from, const bool& isMixed);
 
 }
 
@@ -142,7 +141,7 @@
     virtual void transferSucceeded(void){}
     virtual void recordPlaybackStopped(const std::string& path){}
     virtual void voiceMailNotify(const std::string& call_id, int nd_msg){}
-    virtual void incomingMessage(const std::string& id, const std::string& from, const std::string& msg){}
+    virtual void incomingMessage(const std::string& id, const std::string& from, const std::map<std::string, std::string>& messages){}
     virtual void incomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
     virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}
     virtual void conferenceCreated(const std::string& conf_id){}
diff --git a/ring-android/app/src/main/jni/configurationmanager.i b/ring-android/app/src/main/jni/configurationmanager.i
index fe28f45..2450194 100644
--- a/ring-android/app/src/main/jni/configurationmanager.i
+++ b/ring-android/app/src/main/jni/configurationmanager.i
@@ -144,12 +144,13 @@
 std::map<std::string, std::string> validateCertificatePath(const std::string& accountId,
                                                        const std::string& certificate,
                                                        const std::string& privateKey,
+                                                       const std::string& privateKeyPassword,
                                                        const std::string& caList);
 
 std::map<std::string, std::string> validateCertificate(const std::string& accountId, const std::string& certificate);
 
 std::map<std::string, std::string> getCertificateDetails(const std::string& certificate);
-std::map<std::string, std::string> getCertificateDetailsPath(const std::string& certificate);
+std::map<std::string, std::string> getCertificateDetailsPath(const std::string& certificate, const std::string& privateKey, const std::string& privateKeyPass);
 
 std::vector<std::string> getPinnedCertificates();
 
