diff --git a/JamiDaemon.js b/JamiDaemon.js
index e85ea9b..59d6b2b 100755
--- a/JamiDaemon.js
+++ b/JamiDaemon.js
@@ -18,6 +18,7 @@
  *  along with this program. If not, see <https://www.gnu.org/licenses/>.
  */
 const Account = require('./model/Account')
+const Conversation = require('./model/Conversation')
 
 "use strict";
 class JamiDaemon {
@@ -36,9 +37,9 @@
                         }
                     }
                     newAccounts.push(new Account(accountId,
-                        this.mapToJs(this.dring.getAccountDetails(accountId))
-                        //this.mapToJs(this.dring.getVolatileDetails(accountId)),
-                        ))
+                        this.mapToJs(this.dring.getAccountDetails(accountId)),
+                        this.mapToJs(this.dring.getVolatileAccountDetails(accountId))
+                    ))
                 })
                 this.accounts = newAccounts
             },
@@ -97,7 +98,75 @@
                 }
             },
             "RegisteredNameFound": (accountId, state, address, name) => {
-                console.log("RegistrationStateChanged: " + accountId + " " + state + " " + address + " " + name)
+                console.log(`RegisteredNameFound: ${accountId} ${state} ${address} ${name}`)
+            },
+            "conversationReady": (accountId, conversationId) => {
+                console.log(`conversationReady: ${accountId} ${conversationId}`)
+                const account = this.getAccount(accountId)
+                if (!account) {
+                    console.log(`Unknown account ${accountId}`)
+                    return
+                }
+                let conversation = account.getConversation(conversationId)
+                if (!conversation) {
+                    const members = this.dring.getConversationMembers(accountId, conversationId)
+                    console.log(members)
+                    conversation = new Conversation(conversationId, members)
+                    account.addConversation(conversation)
+                }
+            },
+            "conversationRemoved": (accountId, conversationId) => {
+                console.log(`conversationRemoved: ${accountId} ${conversationId}`)
+                const account = this.getAccount(accountId)
+                if (!account) {
+                    console.log(`Unknown account ${accountId}`)
+                    return
+                }
+                account.removeConversation(conversationId)
+            },
+            "conversationLoaded": (accountId, conversationId) => {
+                console.log(`conversationLoaded: ${accountId} ${conversationId}`)
+                const account = this.getAccount(accountId)
+                if (!account) {
+                    console.log(`Unknown account ${accountId}`)
+                    return
+                }
+            },
+            "messageReceived": (accountId, conversationId, message) => {
+                console.log(`messageReceived: ${accountId} ${conversationId}`)
+                const account = this.getAccount(accountId)
+                if (!account) {
+                    console.log(`Unknown account ${accountId}`)
+                    return
+                }
+                const conversation = account.getConversation(conversationId)
+                if (!conversation) {
+                    conversation.addMessage(message)
+                }
+            },
+            "conversationRequestReceived": (accountId, conversationId, request) => {
+                console.log(`conversationRequestReceived: ${accountId} ${conversationId}`)
+                const account = this.getAccount(accountId)
+                if (!account) {
+                    console.log(`Unknown account ${accountId}`)
+                    return
+                }
+            },
+            "conversationMemberEvent": (accountId, conversationId, member, event) => {
+                console.log(`conversationMemberEvent: ${accountId} ${conversationId}`)
+                const account = this.getAccount(accountId)
+                if (!account) {
+                    console.log(`Unknown account ${accountId}`)
+                    return
+                }
+            },
+            "onConversationError": (accountId, conversationId, code, what) => {
+                console.log(`onConversationError: ${accountId} ${conversationId}`)
+                const account = this.getAccount(accountId)
+                if (!account) {
+                    console.log(`Unknown account ${accountId}`)
+                    return
+                }
             }
         })
         this.stringVectToArr(this.dring.getAccountList()).forEach(accountId => {
@@ -147,7 +216,7 @@
 // private
 
     boolToStr(bool) {
-        return bool ? "TRUE" : "FALSE";
+        return bool ? "true" : "false";
     }
 
     accountDetailsToNative(account) {
diff --git a/jaas-client/src/components/AccountPreferences.js b/jaas-client/src/components/AccountPreferences.js
index f486dd9..5b6ae28 100644
--- a/jaas-client/src/components/AccountPreferences.js
+++ b/jaas-client/src/components/AccountPreferences.js
@@ -21,7 +21,7 @@
     const isJamiAccount = account.getType() === Account.TYPE_JAMI
     return (
       <React.Fragment>
-        <Typography variant="h2" component="h2">Jami account</Typography>
+        <Typography variant="h2" component="h2">{isJamiAccount ? "Jami account" : "SIP account"}</Typography>
 
         {isJamiAccount &&
           <JamiIdCard account={account} />}
diff --git a/model/Account.js b/model/Account.js
index 3141176..6b43f1c 100644
--- a/model/Account.js
+++ b/model/Account.js
@@ -1,8 +1,13 @@
+const Contact = require('./Contact')
+
 class Account {
     constructor(id, details, volatileDetails) {
         this.id = id
         this.details = details
         this.volatileDetails = volatileDetails
+        this.contactCache = {}
+        this.contacts = {}
+        this.conversations = {}
     }
 
     static from(object) {
@@ -14,6 +19,14 @@
         this.volatileDetails = data.volatileDetails
     }
 
+    getObject() {
+        return {
+            id: this.id,
+            details: this.details,
+            volatileDetails: this.volatileDetails
+        }
+    }
+
     getId() { return this.id }
 
     getType() { return this.details["Account.type"] }
@@ -23,15 +36,8 @@
     getRegisteredName() { return this.volatileDetails["Account.registeredName"] }
 
     isRendezVous() { return this.details["Account.rendezVous"] === Account.BOOL_TRUE }
-    isPublicIn() { return this.details["DHT.PublicInCalls"] === Account.BOOL_TRUE }
 
-    getObject() {
-        return {
-            id: this.id,
-            details: this.details,
-            volatileDetails: this.volatileDetails
-        }
-    }
+    isPublicIn() { return this.details["DHT.PublicInCalls"] === Account.BOOL_TRUE }
 
     getSummary() {
         return this.getObject()
@@ -44,6 +50,35 @@
     getDisplayUri() {
         return this.getRegisteredName() || this.getUri()
     }
+
+    getConversationIds() {
+        return Object.keys(this.conversations)
+    }
+
+    getConversation(conversationId) {
+        return this.conversations[conversationId]
+    }
+
+    addConversation(conversation) {
+        this.conversations[conversation.getId()] = conversation
+    }
+
+    removeConversation(conversationId) {
+        delete this.conversations[conversationId]
+    }
+
+    getContactFromCache(uri) {
+        let contact = this.contactCache[uri]
+        if (!contact) {
+            contact = new Contact(uri)
+            this.contactCache[uri] = contact
+        }
+        return contact
+    }
+
+    getContacts() {
+        return this.contacts
+    }
 }
 
 Account.TYPE_JAMI = "RING"
@@ -52,4 +87,4 @@
 Account.BOOL_TRUE = "true"
 Account.BOOL_FALSE = "false"
 
-module.exports = Account;
+module.exports = Account
diff --git a/model/Contact.js b/model/Contact.js
new file mode 100644
index 0000000..b21ddcd
--- /dev/null
+++ b/model/Contact.js
@@ -0,0 +1,27 @@
+class Contact {
+    constructor(uri) {
+        this.uri = uri
+        this.displayName = undefined
+        this.registeredName = undefined
+    }
+
+    static from(object) {
+        return new Contact(object.uri)
+    }
+
+    getUri() { return this.uri }
+
+    getRegisteredName() { this.registeredName }
+
+    getDisplayName() {
+        return this.displayName || this.getRegisteredName() || this.getUri()
+    }
+
+    getObject() {
+        return {
+            uri: this.uri
+        }
+    }
+}
+
+module.exports = Contact;
diff --git a/routes/jami.js b/routes/jami.js
index 90b9422..9ba97a7 100644
--- a/routes/jami.js
+++ b/routes/jami.js
@@ -1,4 +1,4 @@
-const express = require('express');
+const express = require('express')
 
 class JamiRestApi {
     constructor(jami) {
@@ -6,38 +6,54 @@
     }
 
     getRouter() {
-        const router = express.Router({mergeParams: true});
+        const router = express.Router({mergeParams: true})
 
         // Accounts
         router.get(['/accounts'], (req, res, next) => {
-            console.log("Request account list")
+            console.log("Get account list")
             res.json(this.jami.getAccountList().map(account => account.getSummary()))
-        });
+        })
 
         router.get(['/accounts/:accountId'], (req, res, next) => {
-            console.log(`Request account ${req.params.accountId}`)
-            const account = this.jami.getAccount(req.params.accountId);
+            console.log(`Get account ${req.params.accountId}`)
+            const account = this.jami.getAccount(req.params.accountId)
             if (account)
                 res.json(account.getObject())
             else
                 res.sendStatus(404)
-        });
+        })
+
+        // Contacts
+        router.get(['/accounts/:accountId/contacts'], (req, res, next) => {
+            console.log(`Get account ${req.params.accountId}`)
+            const account = this.jami.getAccount(req.params.accountId)
+            if (account)
+                res.json(account.getContacts())
+            else
+                res.sendStatus(404)
+        })
 
         // Conversations
-        const conversationRouter = express.Router({mergeParams: true});
+        const conversationRouter = express.Router({mergeParams: true})
         conversationRouter.get('/', (req, res, next) => {
-            console.log(`Request conversations for account ${req.params.accountId}`);
-            res.json([]);
+            console.log(`Get conversations for account ${req.params.accountId}`)
+            const account = this.jami.getAccount(req.params.accountId)
+            if (!account)
+                res.sendStatus(404)
+            res.json(account.getConversationIds())
         })
 
         conversationRouter.get('/:conversationId', (req, res, next) => {
-            console.log(`Request conversation ${req.params.conversationId} for account ${req.params.accountId}`);
-            res.json({});
+            console.log(`Get conversation ${req.params.conversationId} for account ${req.params.accountId}`)
+            const account = this.jami.getAccount(req.params.accountId)
+            if (!account)
+                res.sendStatus(404)
+            res.json(account.getConversation(req.params.conversationId))
         })
 
-        router.use('/accounts/:accountId/conversations', conversationRouter);
-        return router;
+        router.use('/accounts/:accountId/conversations', conversationRouter)
+        return router
     }
 }
 
-module.exports = JamiRestApi;
+module.exports = JamiRestApi
