diff --git a/client/src/components/AccountPreferences.js b/client/src/components/AccountPreferences.js
index e14101f..7c7298d 100644
--- a/client/src/components/AccountPreferences.js
+++ b/client/src/components/AccountPreferences.js
@@ -39,6 +39,8 @@
   const moderators = account.getDefaultModerators()
   const [defaultModeratorUri, setDefaultModeratorUri] = useState('')
 
+  const [details, setDetails] = useState(account.getDetails())
+
   const addModerator = () => {
     if (defaultModeratorUri) {
       authManager.fetch(`/api/accounts/${account.getId()}/defaultModerators/${defaultModeratorUri}`, {method: "PUT"})
@@ -49,6 +51,22 @@
   const removeModerator = (uri) =>
     authManager.fetch(`/api/accounts/${account.getId()}/defaultModerators/${uri}`, {method: "DELETE"})
 
+  const handleToggle = (key, value) => {
+    console.log(`handleToggle ${key} ${value}`)
+    const newDetails = {}
+    newDetails[key] = value ? "true" : "false"
+    console.log(newDetails)
+    authManager.fetch(`/api/accounts/${account.getId()}`, {
+      method: "POST",
+      headers: {
+        'Accept': 'application/json',
+        'Content-Type': 'application/json'
+      },
+      body: JSON.stringify(newDetails)
+    })
+    setDetails({...account.updateDetails(newDetails)})
+  }
+
   return (
     <React.Fragment>
       <Typography variant="h2" component="h2" gutterBottom>{alias}</Typography>
@@ -83,8 +101,8 @@
           <ListItemSecondaryAction>
             <Switch
               edge="end"
-              /*onChange={handleToggle('wifi')}*/
-              checked={account.isRendezVous()}
+              onChange={e => handleToggle('Account.rendezVous', e.target.checked)}
+              checked={details['Account.rendezVous'] === 'true'}
               inputProps={{ 'aria-labelledby': 'switch-list-label-rendezvous' }}
             />
           </ListItemSecondaryAction>
@@ -97,8 +115,8 @@
           <ListItemSecondaryAction>
             <Switch
               edge="end"
-              /*onChange={handleToggle('bluetooth')}*/
-              checked={account.isPublicIn()}
+              onChange={e => handleToggle('DHT.PublicInCalls', e.target.checked)}
+              checked={details['DHT.PublicInCalls'] === 'true'}
               inputProps={{ 'aria-labelledby': 'switch-list-label-publicin' }}
             />
           </ListItemSecondaryAction>
diff --git a/client/src/components/ContactList.js b/client/src/components/ContactList.js
index ad75783..cbb64e1 100644
--- a/client/src/components/ContactList.js
+++ b/client/src/components/ContactList.js
@@ -1,16 +1,12 @@
 import List from '@material-ui/core/List'
 import React from 'react'
 
-class ContactList extends React.Component {
-    render() {
-        return (
-            <div className="rooms-list">
-            <List>
+export default function ContactList() {
+    return (
+        <div className="rooms-list">
+        <List>
 
-            </List>
-            </div>
-        )
-    }
+        </List>
+        </div>
+    )
 }
-
-export default ContactList
\ No newline at end of file
diff --git a/client/src/components/ConversationView.js b/client/src/components/ConversationView.js
index 5c5a936..d0ab227 100644
--- a/client/src/components/ConversationView.js
+++ b/client/src/components/ConversationView.js
@@ -59,7 +59,7 @@
       setState(state => {
         if (state.conversation)
           state.conversation.addMessage(data)
-          return {...state}
+        return {...state}
       })
     })
   }, [state.conversation ? state.conversation.getId() : "", socket])
@@ -74,9 +74,11 @@
       .then(messages => {
         console.log(messages)
         setLoadingMesages(false)
-        if (state.conversation)
+        setState(state => {
+          if (state.conversation)
             state.conversation.addLoadedMessages(messages)
-        setState(state)
+            return {...state}
+          })
       }).catch(e => console.log(e))
       return () => controller.abort()
   }, [state, loadingMesages])
diff --git a/client/src/components/JamiIdCard.js b/client/src/components/JamiIdCard.js
index 1b75bc5..1ecfd94 100644
--- a/client/src/components/JamiIdCard.js
+++ b/client/src/components/JamiIdCard.js
@@ -7,7 +7,6 @@
     fontSize: 14,
   }, pos: {
     fontSize: 14,
-
   }
 });
 
